specify_advanced_routing.xts 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: ps
  5. (C) Copyright IBM Corp. 2005, 2015
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <!--
  9. Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  10. Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  11. -->
  12. <xts:morphlet xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/portal.xml, messages/portalRL.xml" includeConfig="true" requiredCapability="canUseAdministrationPortal">
  13. <xts:block id="formlogic_init" type="exec" mode="interpret" processor="XSLT" path="/logicsheets/formlogic_init.xslt" nodelist="env,credential,system,http"/>
  14. <!--
  15. ===============================================================================================
  16. getConfig - Need to get the list of namespace ID's. Only needed if we're on a group or role object
  17. ===============================================================================================
  18. -->
  19. <xts:block id="getConfig" processor="XSLT" type="exec" dependency="formlogic_init" condition=".[/root/env/param[@name='m_class']='group' or /root/env/param[@name='m_class']='role']" mandatory="false">
  20. <xsl:stylesheet version="1.0"
  21. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  22. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  23. <xsl:template match="/">
  24. <xts:sequence>
  25. <xts:append>
  26. <xts:function name="getConfiguration">
  27. <xts:param name="AAA"/>
  28. </xts:function>
  29. </xts:append>
  30. </xts:sequence>
  31. </xsl:template>
  32. </xsl:stylesheet>
  33. </xts:block>
  34. <!--
  35. ===============================================================================================
  36. getContent - get our data from Content Manager
  37. ===============================================================================================
  38. -->
  39. <xts:block id="getContent" processor="XSLT" type="exec" dependency="formlogic_init getConfig">
  40. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  41. <xts:logicsheet path="logicsheets/portal.xsl"/>
  42. <xsl:stylesheet version="1.0"
  43. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  44. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  45. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  46. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  47. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  48. exclude-result-prefixes="xsl send cm pf">
  49. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  50. <xsl:key name="env-param" match="/root/env/param" use="@name"/>
  51. <pf:variables/>
  52. <xsl:template match="/">
  53. <xts:sequence>
  54. <xts:append>
  55. <xts:transform src="transforms/portal/config/mergeRoutingTableAndRoutingHints.xslt" processor="XSLT">
  56. <routingHints>
  57. <objectType><xsl:value-of select="key('env-param','m_class')"/></objectType>
  58. <xts:transform src="transforms/CM/post-process.xslt" processor="XSLT">
  59. <send:request provider="cm">
  60. <xts:transform src="transforms/CM/pre-process.xslt" processor="XSLT">
  61. <cm:query>
  62. <cm:requests>
  63. <xsl:choose>
  64. <xsl:when test="key('env-param','m_class')='package'">
  65. <!-- get all the packages -->
  66. <cm:query>
  67. <cm:search>//package[hasProperty('routingHints')]</cm:search>
  68. <cm:properties>
  69. <cm:property name="searchPath"/>
  70. <cm:property name="defaultName"/>
  71. <cm:property name="routingHints"/>
  72. <cm:property name="storeID"/>
  73. </cm:properties>
  74. </cm:query>
  75. </xsl:when>
  76. <xsl:otherwise>
  77. <xsl:variable name="classFilter">
  78. <xsl:choose>
  79. <xsl:when test="key('env-param','m_class')='group'">[@objectClass='group']</xsl:when>
  80. <xsl:when test="key('env-param','m_class')='role'">[@objectClass='role']</xsl:when>
  81. </xsl:choose>
  82. </xsl:variable>
  83. <!-- Cognos namespace-->
  84. <cm:query>
  85. <cm:search>/directory/namespace[@id = ':']//*<xsl:value-of select="$classFilter"/>[hasProperty('routingHints')]</cm:search>
  86. <cm:properties>
  87. <cm:property name="searchPath"/>
  88. <cm:property name="defaultName"/>
  89. <cm:property name="routingHints"/>
  90. <cm:property name="storeID"/>
  91. </cm:properties>
  92. </cm:query>
  93. <!-- third party namespaces -->
  94. <xsl:for-each select="/root/configuration/property[@name='AAA']/*[local-name()='value']/*[local-name()='instances']/*[local-name()='instance']/*[local-name()='parameter' and @name='id']/*[local-name()='value' and . != '']">
  95. <cm:query>
  96. <cm:search>/directory/namespace[@id="<xsl:value-of select="."/>"]//*<xsl:value-of select="$classFilter"/>[hasProperty('routingHints')]</cm:search>
  97. <cm:properties>
  98. <cm:property name="searchPath"/>
  99. <cm:property name="defaultName"/>
  100. <cm:property name="routingHints"/>
  101. <cm:property name="storeID"/>
  102. </cm:properties>
  103. </cm:query>
  104. </xsl:for-each>
  105. </xsl:otherwise>
  106. </xsl:choose>
  107. <cm:query>
  108. <cm:search>/configuration</cm:search>
  109. <cm:properties>
  110. <cm:property name="routingTable"/>
  111. </cm:properties>
  112. </cm:query>
  113. </cm:requests>
  114. </cm:query>
  115. </xts:transform>
  116. </send:request>
  117. </xts:transform>
  118. </routingHints>
  119. </xts:transform>
  120. </xts:append>
  121. </xts:sequence>
  122. </xsl:template>
  123. </xsl:stylesheet>
  124. </xts:block>
  125. <!--
  126. ===============================================================================================
  127. format - render the page
  128. ===============================================================================================
  129. -->
  130. <xts:block id="format" mode="output" processor="XSLT" type="exec" dependency="getContent" mimeType="text/html">
  131. <!-- portal specific information -->
  132. <xts:logicsheet path="logicsheets/portal.xsl"/>
  133. <!-- get the new theme stuff -->
  134. <xts:logicsheet path="logicsheets/presentation/layout.xsl"/>
  135. <xts:logicsheet path="logicsheets/presentation/dialog/framework.xsl"/>
  136. <xts:logicsheet path="logicsheets/presentation/dialog/presentation.xsl"/>
  137. <xts:logicsheet path="logicsheets/presentation/controls/framework.xsl"/>
  138. <xts:logicsheet path="logicsheets/presentation/controls/presentation.xsl"/>
  139. <xts:logicsheet path="logicsheets/formlogic_lite.xslt"/>
  140. <xts:logicsheet path="logicsheets/validation.xslt"/>
  141. <xts:logicsheet path="logicsheets/presentation/touch_up.xslt"/>
  142. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  143. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  144. xmlns:lyt="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/layout/"
  145. xmlns:dp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/presentation/"
  146. xmlns:cf="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/framework/"
  147. xmlns:cp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/presentation/"
  148. xmlns:df="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/framework/"
  149. xmlns:utml="http://developer.cognos.com/schemas/xts/logicsheet/xslt/formlogic/"
  150. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  151. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  152. exclude-result-prefixes="pf lyt dp cf cp df utml xtsext cm">
  153. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
  154. <!-- Global template variables -->
  155. <pf:variables/>
  156. <!-- time varibales needed for the calendar control -->
  157. <xsl:variable name="mname" select="'specify_advanced_routing.xts'"/>
  158. <xsl:key name="hints" match="/root/routingHints/cm:string[. != '']" use="."/>
  159. <xsl:variable name="uniqueHints" select="/root/routingHints/*[generate-id(.)=generate-id(key('hints',.))]"/>
  160. <!-- start the output -->
  161. <xsl:template match="/root">
  162. <xsl:variable name="browserTitle">
  163. <xts:string id="IDS_ARS_TITLE">
  164. <xts:param name="obj"><span lang="{$contentLocale}"><xsl:value-of select="key('env-param','m_name')"/></span></xts:param>
  165. </xts:string>
  166. </xsl:variable>
  167. <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text><dp:page longTitle="$browserTitle" dp:kbA11y="true">
  168. <dp:meta>
  169. <pf:meta/> <!-- Standard meta tags -->
  170. </dp:meta>
  171. <pf:help/>
  172. <script language="javascript">
  173. function validate()
  174. {
  175. frm = document.pform;
  176. var duplicate = false;
  177. var alertUser = false;
  178. <!-- need to select all the entries or they won't get returned to the general dialog
  179. also remove any duplicate entries-->
  180. selectAll(frm.m_routingHints);
  181. for (var i=0; i &lt; frm.m_routingHints.options.length; i++)
  182. {
  183. for (var ii=i+1; ii &lt; frm.m_routingHints.options.length; ii++)
  184. {
  185. if (i != ii &amp;&amp; frm.m_routingHints.options[i].value == frm.m_routingHints.options[ii].value &amp;&amp; frm.m_routingHints.options[ii].selected == true)
  186. {
  187. duplicate = true;
  188. alertUser = true;
  189. break;
  190. }
  191. }
  192. if (duplicate)
  193. {
  194. frm.m_routingHints.options[ii].selected = false;
  195. }
  196. duplicate = false;
  197. }
  198. if (alertUser)
  199. {
  200. alert("<xts:string id="IDS_ARS_DUPLICATE_ENTRY" encode="javascript"/>");
  201. }
  202. return true;
  203. }
  204. <!-- used to replace linefeeds to </br> for the html version of the body -->
  205. function replaceCarriageReturns(string, replaceWith)
  206. {
  207. <!-- encode textarea string's carriage returns -->
  208. string = escape(string);
  209. <!--loop through string, replacing carriage return encoding with HTML break tag-->
  210. for(i=0; i&lt;string.length; i++)
  211. {
  212. if(string.indexOf("%0D%0A") > -1)
  213. {
  214. <!-- Windows encodes returns as \r\n hex-->
  215. string=string.replace("%0D%0A",replaceWith);
  216. }
  217. else if(string.indexOf("%0A") > -1)
  218. {
  219. <!-- Unix encodes returns as \n hex-->
  220. string=string.replace("%0A",replaceWith);
  221. }
  222. else if(string.indexOf("%0D") > -1)
  223. {
  224. <!-- Macintosh encodes returns as \r hex -->
  225. string=string.replace("%0D",replaceWith);
  226. }
  227. }
  228. string=unescape(string) <!-- unescape all other encoded characters -->
  229. return string;
  230. }
  231. <!-- trim leading and trailing spaces (around ';') -->
  232. function trimWhiteSpaces(string)
  233. {
  234. <!-- Trim leading white spaces -->
  235. while (string.substring(0,1) == ' ')
  236. {
  237. string = string.substring(1, string.length);
  238. }
  239. <!-- Trim trailing white spaces -->
  240. while (string.substring(string.length-1, string.length) == ' ')
  241. {
  242. string = string.substring(0,string.length-1);
  243. }
  244. index =1;
  245. while (index != -1)
  246. {
  247. index = string.indexOf('; ');
  248. if (index != -1)
  249. {
  250. string = string.replace('; ', ';');
  251. }
  252. }
  253. index =1;
  254. while (index != -1)
  255. {
  256. index = string.indexOf(' ;');
  257. if (index != -1)
  258. {
  259. string = string.replace(' ;', ';');
  260. }
  261. }
  262. return string;
  263. }
  264. function addRoutingSet(addFrom)
  265. {
  266. frm = document.pform;
  267. deselectAll(frm.m_routingHints);
  268. if (addFrom == 'typed')
  269. {
  270. if (frm.routing_set_add.value == '')
  271. return;
  272. typedText = frm.routing_set_add.value;
  273. typedText = trimWhiteSpaces(typedText);
  274. typedText = replaceCarriageReturns(typedText,";");
  275. while (typedText != '')
  276. {
  277. index = typedText.indexOf(';');
  278. if (index != -1)
  279. {
  280. routingSet = typedText.substring(0,index);
  281. typedText = typedText.substring(index+1);
  282. createSelectOption(routingSet);
  283. }
  284. else
  285. {
  286. createSelectOption(typedText);
  287. typedText = '';
  288. }
  289. }
  290. frm.routing_set_add.value = '';
  291. frm.routing_set_add.focus();
  292. }
  293. else
  294. {
  295. for (var i = 0; i &lt; frm.availableHints.options.length ; i++)
  296. {
  297. if (frm.availableHints.options[i].selected)
  298. {
  299. createSelectOption(frm.availableHints.options[i].value);
  300. frm.availableHints.options[i].selected = false;
  301. }
  302. }
  303. }
  304. }
  305. function deselectAll(obj)
  306. {
  307. for (var i = 0; i &lt; obj.options.length ; i++) {
  308. obj.options[i].selected = false;
  309. }
  310. }
  311. function selectAll(obj)
  312. {
  313. for (var i = 0; i &lt; obj.options.length ; i++) {
  314. obj.options[i].selected = true;
  315. }
  316. }
  317. function selectLast(obj)
  318. {
  319. obj.options[obj.options.length-1].selected = true;
  320. }
  321. function createSelectOption(routingSet)
  322. {
  323. if (routingSet != '')
  324. {
  325. document.pform.m_routingHints.options[document.pform.m_routingHints.options.length] = new Option(routingSet, routingSet, false, true);
  326. }
  327. }
  328. function removeRoutingSet()
  329. {
  330. frm = document.pform;
  331. for (var i=(frm.m_routingHints.options.length - 1); i &gt; -1; i--)
  332. {
  333. if (frm.m_routingHints.options[i].selected)
  334. {
  335. frm.m_routingHints.options[i] = null;
  336. }
  337. }
  338. }
  339. </script>
  340. <!-- Get date control includes -->
  341. <utml:form name="pform" method="post" action="{$gateway}">
  342. <utml:input type="hidden" name="routingHintsChanged" value="true" utml:update="false"/>
  343. <!-- header -->
  344. <dp:header dp:kbA11y="true">
  345. <dp:title>
  346. <xsl:copy-of select="$browserTitle"/>
  347. </dp:title>
  348. <dp:description>
  349. <xts:string id="IDS_ARS_INTRO"/>
  350. </dp:description>
  351. <span style="position: absolute;margin-left: -9999px; margin-top: -9999px;" id="arsIntro"><xts:string id="IDS_ARS_INTRO"/></span>
  352. </dp:header>
  353. <!-- body -->
  354. <lyt:layout style="1" lyt:kbA11y="true">
  355. <lyt:section>
  356. <table cellpadding="0" cellspacing="0" width="650" role="presentation">
  357. <tr>
  358. <td class="formLabel" style="width:300px; padding-right:15px">
  359. <label for="ctrl_availableHints"><xts:string id="IDS_ARS_AVAILABLE_SETS"/></label>
  360. </td>
  361. <td/>
  362. <td class="formLabel" style="width:300px;padding-left:15px;">
  363. <label for="ctrl_m_routingHints"><xts:string id="IDS_ARS_ASSIGNED_ROUTING_SETS"/></label>
  364. </td>
  365. </tr>
  366. <tr>
  367. <td class="dialogHintText" style="width:300px; padding-right:15px">
  368. <xts:string id="IDS_ARS_AVAILABLE_DESCRIPTION"/>
  369. </td>
  370. <td/>
  371. <!-- Assigned routing sets -->
  372. <td rowspan="5" style="padding-left:15px;" nowrap="nowrap">
  373. <utml:select size="15" name="m_routingHints" multiple="true" style="width:300px;" id="ctrl_m_routingHints">
  374. <xsl:for-each select="key('env-param','m_routingHints')">
  375. <xsl:sort select="." lang="$productLocale"/>
  376. <option value="{.}">
  377. <xsl:value-of select="."/>
  378. </option>
  379. </xsl:for-each>
  380. </utml:select>
  381. <br/>
  382. </td>
  383. </tr>
  384. <tr>
  385. <!-- Available routing sets -->
  386. <td style="width:300px; padding-right:15px">
  387. <utml:select name="availableHints" size="5" multiple="true" style="width:300px;" id="ctrl_availableHints">
  388. <xsl:for-each select="$uniqueHints">
  389. <xsl:sort select="." lang="$productLocale"/>
  390. <option value="{.}">
  391. <xsl:value-of select="."/>
  392. </option>
  393. </xsl:for-each>
  394. </utml:select>
  395. </td>
  396. <df:button df:id="IDS_ARS_ADD_EXISTING" df:noText='true' df:style="href" df:href="#" onclick="addRoutingSet('available');">
  397. <df:image df:tooltip="IDS_ARS_ADD_EXISTING">{$image_root}move_right.gif</df:image>
  398. </df:button>
  399. <td/>
  400. </tr>
  401. <tr>
  402. <td style="width:300px;" class="formLabel">
  403. <label for="ctrl_typedRoutingSets"><xts:string id="IDS_ARS_TYPE_SETS"/></label>
  404. </td>
  405. <td/>
  406. </tr>
  407. <tr>
  408. <td style="width:300px;" class="dialogHintText">
  409. <xts:string id="IDS_ARS_TYPE_DESCRIPTION"/>
  410. </td>
  411. <td/>
  412. </tr>
  413. <tr>
  414. <td style="width:300px;">
  415. <!-- typed routing sets -->
  416. <utml:textarea name="routing_set_add" cols="80" rows="3" style="width:300px;" id="ctrl_typedRoutingSets" role="textbox">
  417. <utml:value>
  418. <xsl:if test="not(key('env-param','m_routingHints')) or key('env-param','m_routingHints')=''">
  419. <xsl:value-of select="key('env-param','m_name')"/>
  420. </xsl:if>
  421. </utml:value>
  422. </utml:textarea>
  423. </td>
  424. <df:button df:id="IDS_ARS_ADD_NEW" df:noText='true' df:style="href" df:href="#" onclick="addRoutingSet('typed');">
  425. <df:image df:tooltip="IDS_ARS_ADD_NEW">{$image_root}move_right.gif</df:image>
  426. </df:button>
  427. </tr>
  428. <tr>
  429. <td style="width:300px;"/>
  430. <td/>
  431. <td align="right" class="formLink">
  432. <a href="#" onclick="removeRoutingSet()"><xts:string id="IDS_ARS_REMOVE"/></a>
  433. </td>
  434. </tr>
  435. </table>
  436. </lyt:section>
  437. </lyt:layout>
  438. <!-- footer -->
  439. <dp:footer>
  440. <df:button df:id="IDS_OK" utml:validate="true" df:style="stack-down-save"/>
  441. <xsl:choose>
  442. <xsl:when test="key('env-param', 'ps_nav_stack') and not(key('env-param', 'ps_nav_stack') = '') ">
  443. <df:button df:id="IDS_CANCEL" df:style="stack-down"/>
  444. </xsl:when>
  445. <xsl:otherwise>
  446. <df:button df:id="IDS_CANCEL" df:style="back-url"/>
  447. </xsl:otherwise>
  448. </xsl:choose>
  449. </dp:footer>
  450. </utml:form>
  451. </dp:page>
  452. </xsl:template>
  453. </xsl:stylesheet>
  454. </xts:block>
  455. <!--
  456. ===============================================================================================
  457. debug - display debug information
  458. ===============================================================================================
  459. -->
  460. <xts:block id="debug" dependency="format" condition=".[/root/session/param[@name='debug']='1']" type="exec" mode="output" processor="XSLT" mandatory="false" mimeType="text/html">
  461. <!-- get the debug logic sheet -->
  462. <xts:logicsheet path="logicsheets/debuglogic.xslt"/>
  463. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dbg="http://developer.cognos.com/schemas/xts/logicsheets/xslt/debug/" exclude-result-prefixes="dbg">
  464. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
  465. <xsl:template match="/">
  466. <dbg:dumpxml select="/root"/>
  467. </xsl:template>
  468. </xsl:stylesheet>
  469. </xts:block>
  470. </xts:morphlet>