importWizardESSBASE.js 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145
  1. /****************************************************************
  2. ** IBM Confidential
  3. **
  4. ** OCO Source Materials
  5. **
  6. ** IBM Cognos Products: mdsrv
  7. **
  8. ** (C) Copyright IBM Corp. 2008, 2017
  9. **
  10. ** The source code for this program is not published or otherwise
  11. ** divested of its trade secrets, irrespective of what has been
  12. ** deposited with the U.S. Copyright Office.
  13. *****************************************************************/
  14. G_HAL.F_Include( WEB_CONTENT + "/hal/C_Deck.js" );
  15. G_HAL.F_Include( WEB_CONTENT + "/hal/C_TreeView.js" );
  16. G_HAL.F_Include( WEB_CONTENT + "/hal/C_ListView.js" );
  17. G_HAL.F_Include( WEB_CONTENT + "/hal/U_CookieJar.js" );
  18. G_HAL.F_Include( WEB_CONTENT + "/hal/C_Dialog.js" );
  19. G_HAL.F_Include( WEB_CONTENT + "/common/json/json2.js" );
  20. G_HAL.F_Include( WEB_CONTENT + "/hal/G_ResManager.js" );
  21. G_HAL.F_Include( WEB_CONTENT + "/hal/C_MultiScriptRequest.js" );
  22. //G_HAL.F_Include( WEB_CONTENT + "hal/G_KeyboardManager.js");
  23. G_HAL.F_Include( WEB_CONTENT + "/hal/C_ComboBox.js" );
  24. G_HAL.F_Include( WEB_CONTENT + "/hal/C_PropertySheet.js" );
  25. /*
  26. This file is used for Essbase and TMR, as their implementations have something in common,
  27. e.g. keeping track of a map from a cube to one (or more) alias, which maps to the selected language(s).
  28. Since TMR doesn't support aliases, we can use a fake alias so that the existing code in FM can be leveraged.
  29. Note that TM1 can't be used because TM1 has 4 levels of mapping: cube -> dimensions -> aliases -> languages.
  30. */
  31. //TO DO & Ideas:
  32. //
  33. // - button: Unselect all
  34. //
  35. // - label: Number of objects selected
  36. // These are meant to be constants (even if JavaScript allows you to change them; you MUST NOT change them).
  37. var kDatabaseTypeStr = "database";
  38. var kCatalogTypeStr = "catalog";
  39. var kCubeTypeStr = "cube";
  40. var kInfoQueryTypeStr = "infoQuery";
  41. var kDimensionGroupTypeStr = "dimensionGroup";
  42. var kDimensionTypeStr = "dimension";
  43. var kMeasuresGroupTypeStr = "Measures";
  44. var kMeasureTypeStr = "measure";
  45. var asyncErrorPagePid = "importWizard_communication_error_page";
  46. var mapCubeAliasLanguages; //map { cubeuniqueName, map { alias table / list(of selected languages) } }
  47. var cubeNodeList; // keeps the tree nodes of the selected cubes. We need the tree nodes to be able to compute the path to the cube browsing the parents.
  48. var cubeAttributeDimensionsAsProperties; // keep the attributeDimensionsAsProperties per cube
  49. var mapCubeAliasTables; // map { cubeuniqueName, treeSnippet} ( used to cash the alias tables per cube to improve the performance )
  50. var G_App = {};
  51. function ImportWizard()
  52. {
  53. this.credentials = "";
  54. }
  55. ImportWizard.prototype.setDataSourceCredentials = function(credentialString)
  56. {
  57. this.credentials = credentialString;
  58. urlRequestInvoker.RequestFinished();
  59. }
  60. ImportWizard.prototype.updateCredentials = function(newCredentials)
  61. {
  62. var urlPostParams = new Object();
  63. urlPostParams["pid"] = "updateCredentials";
  64. urlPostParams["current_credentials"] = this.credentials;
  65. urlPostParams["newcredentials_password"] = newCredentials;
  66. urlPostParams["error_pid"] = asyncErrorPagePid;
  67. var updateCredentialsRequestURL = GATEWAY_URL + "/metadataUIService";
  68. urlRequestInvoker.MakeAsyncRequestInIFrame( updateCredentialsRequestURL, urlPostParams );
  69. }
  70. ImportWizard.prototype.checkNext = function()
  71. {
  72. var currentCard = G_App.m_oDeck.F_GetIndex();
  73. switch (currentCard)
  74. {
  75. case 0:
  76. {
  77. var msg = this.checkImportSelectionRestraints();
  78. if (msg && msg != null)
  79. {
  80. return msg;
  81. }
  82. msg = this.checkDesignLocaleSelected();
  83. if (msg && msg != null){
  84. return msg;
  85. }
  86. break;
  87. }
  88. case 1:
  89. break;
  90. case 2:
  91. break;
  92. case 3:
  93. break;
  94. }
  95. return null;
  96. }
  97. ImportWizard.prototype.checkDesignLocaleSelected = function(){
  98. var designLocaleList = document.getElementById( "designLanguage" );
  99. if (designLocaleList.selectedIndex < 0){
  100. return localizedStrings["MSR_SAP_designLocaleRequired"];
  101. }
  102. }
  103. ImportWizard.prototype.checkImportSelectionRestraints = function()
  104. {
  105. var treeNodesList = G_App.m_oTreeViewCheckboxes.F_GetCheckedNodes();
  106. if (treeNodesList.length == 0)
  107. {
  108. return localizedStrings["MSR_SAP_mustImportAtLeastOneItem"];
  109. }
  110. return null;
  111. }
  112. IMPORTWIZARD = new ImportWizard();
  113. G_App.F_HAL_OnLoad = function()
  114. {
  115. // @todo Must pass proper locale code!
  116. G_ResManager.F_SetLocale( "en" );
  117. // This call is needed even if we don't pass a filename as an argument,
  118. // in order to load the standard HAL string resources.
  119. G_ResManager.F_LoadStrings( [ /*WEB_CONTENT + "/mdsrv/res/strings"*/], this );
  120. //Enable Accessibility for FireFox Browser only, pass false as second parameter if you don't want the focus ring in Firefox
  121. G_HAL.F_EnableAccessibility( G_BrowserInfo.M_bIsFirefox );
  122. //Enable High Contrast Mode need for FireFox only, Need testing to enable it for IE as well
  123. //if( G_BrowserInfo.M_bIsFirefox )
  124. // Need to check if the high contrast mode is enabled, waiting for HAL to expose this function or may not need it
  125. //G_HAL.F_EnableHighContrastMode();
  126. };
  127. G_App.initControls = function()
  128. {
  129. this.m_oDeck = new C_Deck( document.getElementById( "divDeck" ), this );
  130. UpdateButtonsEnableStatus( 0 /* cardIndex */ );
  131. this.F_ApplySkin( "corporate|portal" );
  132. // this.F_ApplySkin( "windows|app" );
  133. this.m_treeViewNodesDoc = U_XML.F_CreateDocument();
  134. var treeViewElem = this.m_treeViewNodesDoc.appendChild( this.m_treeViewNodesDoc.createElement( 'treeView' ) );
  135. treeViewElem.setAttribute( "id", "TreeView" );
  136. treeViewElem.setAttribute( "showCheckboxes", "true" );
  137. //treeViewElem.setAttribute( "multiSelect", "false" );
  138. // Only populate with the root node if in "create" mode!
  139. if (!IMPORTWIZARD.isEdit)
  140. {
  141. this.PopulateTreeView_RootNode( this.m_treeViewNodesDoc, treeViewElem );
  142. }
  143. this.m_oTreeViewCheckboxes = new C_TreeView( document.getElementById( "divTreeViewCheckboxes" ), treeViewElem, this );
  144. g_expandTreeLevel = 0;
  145. var useV5DataServerCheckBox = document.getElementById( "useV5DataServer" );
  146. useV5DataServerCheckBox.checked = IMPORTWIZARD.bUseV5DataServer;
  147. if (IMPORTWIZARD.bDisableClassic == "true")
  148. //useV5DataServerCheckBox.disabled=true;
  149. useV5DataServerCheckBox.style.display = "none";
  150. // Cubes
  151. var aDoc3 = U_XML.F_CreateDocument();
  152. var listViewElemCubes = aDoc3.appendChild( aDoc3.createElement( 'listView' ) );
  153. listViewElemCubes.setAttribute( "id", "CubesListView" );
  154. listViewElemCubes.setAttribute( "showCheckboxes", "false" );
  155. listViewElemCubes.setAttribute( "multiSelect", "false" );
  156. listViewElemCubes.appendChild( aDoc3.createElement( "listItems" ) );
  157. this.m_oListViewCubes = new C_ListView( document.getElementById( "divListViewCubes" ), listViewElemCubes, this );
  158. // Alias Tables
  159. var aDocDimensions = U_XML.F_CreateDocument();
  160. var listViewElemDimensions = aDocDimensions.appendChild( aDocDimensions.createElement( 'listView' ) );
  161. listViewElemDimensions.setAttribute( "id", "DimensionsListView" );
  162. listViewElemDimensions.setAttribute( "showCheckboxes", "false" );
  163. listViewElemDimensions.setAttribute( "multiSelect", "false" );
  164. listViewElemDimensions.appendChild( aDocDimensions.createElement( "listItems" ) );
  165. this.m_oListViewDimensions = new C_ListView( document.getElementById( "divListViewDimensions" ), listViewElemDimensions, this );
  166. // Locales per alias per dimension
  167. var aDoc2 = U_XML.F_CreateDocument();
  168. var listViewElem = aDoc2.appendChild( aDoc2.createElement( 'listView' ) );
  169. listViewElem.setAttribute( "id", "LanguagesListView" );
  170. listViewElem.setAttribute( "view", "checkbox" );
  171. listViewElem.setAttribute( "showCheckboxes", "true" );
  172. listViewElem.appendChild( aDoc2.createElement( "listItems" ) );
  173. this.m_oListViewCheckboxes = new C_ListView( document.getElementById( "divListViewCheckboxes" ), listViewElem, this );
  174. // pre-populate the language list box
  175. PopulateLanguagesListBox();
  176. if (IMPORTWIZARD.enableTest == false)
  177. {
  178. ShowPackageRenameDlgIfNeeded();
  179. }
  180. }
  181. G_App.expandNode = function( node)
  182. {
  183. // testing code to expand the root node
  184. if (IMPORTWIZARD.enableTest == true)
  185. {
  186. //var node = g_viewNodeToExpand.selectSingleNode( "treeNode" );
  187. if (node != null)
  188. {
  189. G_App.m_oTreeViewCheckboxes.F_ExpandNode(node );
  190. G_App.m_oTreeViewCheckboxes.F_Draw();
  191. }
  192. }
  193. }
  194. G_App.initializeTreeViewCheckBox = function( )
  195. {
  196. this.m_treeViewNodesDoc = U_XML.F_CreateDocument();
  197. var treeViewElem = this.m_treeViewNodesDoc.appendChild( this.m_treeViewNodesDoc.createElement( 'treeView' ) );
  198. treeViewElem.setAttribute( "id", "TreeView" );
  199. treeViewElem.setAttribute( "showCheckboxes", "true" );
  200. this.PopulateTreeView_RootNode( this.m_treeViewNodesDoc, treeViewElem );
  201. // delete the maps
  202. mapCubeAliasTables = new Object();
  203. mapCubeAliasLanguages = new Object();
  204. cubeAttributeDimensionsAsProperties = new Object();
  205. this.m_oTreeViewCheckboxes = new C_TreeView( document.getElementById( "divTreeViewCheckboxes" ), treeViewElem, this );
  206. g_expandTreeLevel = 0;
  207. // expand the root node
  208. var treeRootViewNode = G_App.m_oTreeViewCheckboxes.F_GetTreeViewNode();
  209. var node = treeRootViewNode.selectSingleNode( "treeNode" );
  210. if (node != null)
  211. {
  212. setTimeout( function(){
  213. G_App.expandNode( node);
  214. }, 700 );
  215. }
  216. }
  217. G_App.F_ListView_OnCheckboxClick = function( v_oListView, v_nListItem, v_iMouseButton )
  218. {
  219. if (v_oListView == G_App.m_oListViewCheckboxes)
  220. {
  221. // will fill out the map mapLanguageAlias
  222. var checkedItemsOrig = G_App.m_oListViewCheckboxes.F_GetCheckedListItems();
  223. var checkedItems = new Array();
  224. for (var n = 0; n < checkedItemsOrig.length; n++)
  225. {
  226. var lang = checkedItemsOrig[n];
  227. var langCode = lang.getAttribute( "value" );
  228. checkedItems[n] = langCode;
  229. }
  230. // for TMR, simply add the selected languages
  231. // to the map using a faked alias, because TMR doesn't support aliases
  232. if (IMPORTWIZARD.dataSourceType == "TMR")
  233. {
  234. var mapDimMapLang = new Object();
  235. var cubeName = getSelectedCubeUniqueName();
  236. mapCubeAliasLanguages[cubeName] = mapDimMapLang;
  237. var aliasName = "TMR_Alias";
  238. mapDimMapLang[aliasName] = checkedItems; // list of languages
  239. return;
  240. }
  241. // !!!!! ToDo: !!!!! check to see if the language has already been assaigned to different alias table
  242. if (G_App.checkLangIsUsed() == false) // check to see if the languge has been already used. Unchecks the language. Returns "true" or "false"
  243. {
  244. v_nListItem.setAttribute("checked", "false"); //
  245. G_App.m_oListViewCheckboxes.F_Draw();
  246. return;
  247. }
  248. var dimNode = G_App.m_oListViewDimensions.F_GetSelectedListItem();
  249. if (dimNode != null)
  250. {
  251. var dimName = dimNode.getAttribute("label");
  252. var childNodeUniqueName = getSelectedCubeUniqueName();
  253. if (childNodeUniqueName != null)
  254. {
  255. var mapAliasMapLang = mapCubeAliasLanguages[childNodeUniqueName];
  256. if (mapAliasMapLang == null)
  257. {
  258. mapAliasMapLang = new Object();
  259. mapCubeAliasLanguages[childNodeUniqueName] = mapAliasMapLang;
  260. }
  261. mapAliasMapLang[dimName] = checkedItems; // list of languages
  262. }
  263. }
  264. }
  265. }
  266. // check to see if the languge has been already used.
  267. // Unchecks the language.
  268. // Returns true or false
  269. G_App.checkLangIsUsed = function()
  270. {
  271. var childNodeUniqueName = getSelectedCubeUniqueName();
  272. if (childNodeUniqueName != null)
  273. {
  274. var mapAliasMapLang = mapCubeAliasLanguages[childNodeUniqueName];
  275. if (mapAliasMapLang != null)
  276. {
  277. var aliasNode = G_App.m_oListViewDimensions.F_GetSelectedListItem();
  278. if (aliasNode != null)
  279. {
  280. var aliasNameSelected = aliasNode.getAttribute("label");
  281. var checkedItems = G_App.m_oListViewCheckboxes.F_GetCheckedListItems();
  282. for (var aliasName in mapAliasMapLang)
  283. {
  284. if (aliasNameSelected != aliasName)
  285. {
  286. var checkedItemsPerAlias = mapAliasMapLang[aliasName];
  287. for (var n = 0; n < checkedItemsPerAlias.length; n++)
  288. {
  289. var langCode = checkedItemsPerAlias[n];
  290. // var langCode = lang.getAttribute( "value" );
  291. // var langName = lang.getAttribute( "label" );
  292. for (var k = 0; k < checkedItems.length; k++)
  293. {
  294. var item = checkedItems[k];
  295. var code = item.getAttribute( "value" );
  296. if (code == langCode)
  297. {
  298. // error message
  299. // like
  300. // The selected language has been used in table - "ActoCust[Week][Coach]"
  301. var message = localizedStrings["MSR_ESB_tooManyLanguages"].replace("{0}", aliasName);
  302. if (message){
  303. alert(message);
  304. // item.setAttribute("checked", "false"); //
  305. // G_App.m_oListViewCheckboxes.F_Draw();
  306. }
  307. return false;
  308. }
  309. }
  310. }
  311. }
  312. }
  313. }
  314. }
  315. }
  316. return true;
  317. }
  318. G_App.F_ListView_OnItemClick = function( v_oListView, v_nListItem, v_iMouseButton )
  319. {
  320. if (v_oListView == G_App.m_oListViewCubes)
  321. {
  322. G_App.RepopulateAliasTablesListView();
  323. }
  324. if (v_oListView == G_App.m_oListViewDimensions)
  325. {
  326. if (IMPORTWIZARD.dataSourceType != "TMR") // for TMR, don't care about this
  327. {
  328. // 2. Set language chechboxes from the map
  329. G_App.RepopulateLanguagesListView();
  330. }
  331. }
  332. }
  333. G_App.RepopulateAliasTablesListView = function()
  334. {
  335. var cubeNode = G_App.m_oListViewCubes.F_GetSelectedListItem();
  336. var childNodeUniqueName = getSelectedCubeUniqueName();
  337. if (IMPORTWIZARD.dataSourceType != "TMR")
  338. {
  339. var attribDimAsProp = cubeAttributeDimensionsAsProperties [childNodeUniqueName];
  340. if (attribDimAsProp == null)
  341. cubeAttributeDimensionsAsProperties [childNodeUniqueName] = getAttributeDimensionsAsProperties();
  342. else
  343. {
  344. if (attribDimAsProp == "true")
  345. {
  346. document.getElementById( "radProperties" ).checked = true;
  347. document.getElementById( "radSeparateDim" ).checked = false;
  348. }
  349. else if (attribDimAsProp == "false")
  350. {
  351. document.getElementById( "radProperties" ).checked = false;
  352. document.getElementById( "radSeparateDim" ).checked = true;
  353. }
  354. }
  355. }
  356. // see if we have already populated it
  357. var treeSnippet = mapCubeAliasTables[childNodeUniqueName];
  358. if (treeSnippet == null)
  359. {
  360. var selValue = cubeNode.getAttribute( "value" );
  361. for (var k = 0; k < cubeNodeList.length; k++)
  362. {
  363. var currentNode = cubeNodeList[k];
  364. var nodeValue = currentNode.getAttribute( "value" );
  365. if (selValue == nodeValue)
  366. {
  367. PopulateDimensionsListBox( currentNode );
  368. break;
  369. }
  370. }
  371. }
  372. else
  373. {
  374. metadataDimensionListResultsReceived( treeSnippet );
  375. }
  376. }
  377. // Sets the checked languages in the language list box accordingly with the selected alias table
  378. // The values are kept in the map mapAliasLanguages
  379. G_App.RepopulateLanguagesListView = function()
  380. {
  381. // Clear all check boxes
  382. G_App.m_oListViewCheckboxes.F_UncheckAll();
  383. // var cubeListNode = G_App.m_oListViewCubes.F_GetSelectedListItem();
  384. var childNodeUniqueName = getSelectedCubeUniqueName();
  385. if (childNodeUniqueName != null)
  386. {
  387. var dimNode = G_App.m_oListViewDimensions.F_GetSelectedListItem();
  388. if (dimNode != null)
  389. {
  390. var dimName = dimNode.getAttribute("label");
  391. G_App.m_oListViewCheckboxes.F_UncheckAll();
  392. //map { cubeuniqueName, map { alias table / list(of selected languages) } }
  393. var mapAliasLangs = mapCubeAliasLanguages[childNodeUniqueName];
  394. if (mapAliasLangs != null)
  395. {
  396. var listLang = mapAliasLangs[dimName]; // list of languages
  397. if (listLang != null)
  398. {
  399. var langItems = G_App.m_oListViewCheckboxes.F_GetListItems();
  400. for (var n = 0; n < langItems.length; n++)
  401. {
  402. var lang = langItems[n];
  403. var langCode = lang.getAttribute( "value" );
  404. var langName = lang.getAttribute( "label" );
  405. // see if it has been checked
  406. for ( var k = 0; k < listLang.length; k++ )
  407. {
  408. var code = listLang[k];
  409. if (langCode == code)
  410. {
  411. lang.setAttribute("checked", "true");
  412. break;
  413. }
  414. }
  415. }
  416. }
  417. }
  418. }
  419. }
  420. G_App.m_oListViewCheckboxes.F_Draw();
  421. }
  422. function OnUseV5DataServerBtnClicked( sourceUseV5DataServerChkBox )
  423. {
  424. G_App.m_oTreeViewCheckboxes.F_Detach();
  425. G_App.initializeTreeViewCheckBox();
  426. }
  427. function getSelectedCubeUniqueName()
  428. {
  429. var cubeNode = G_App.m_oListViewCubes.F_GetSelectedListItem();
  430. if (cubeNode == null)
  431. return null;
  432. var nodeValue = cubeNode.getAttribute( "value" );
  433. var childNodeValueObj = eval( "(" + nodeValue + ")" );
  434. return childNodeValueObj.uniqueName;
  435. }
  436. function OnSeparateDimBtnClicked( )
  437. {
  438. cubeAttributeDimensionsAsProperties [getSelectedCubeUniqueName()] = "false";
  439. }
  440. function OnPropertiesBtnClicked( )
  441. {
  442. cubeAttributeDimensionsAsProperties [getSelectedCubeUniqueName()] = "true";
  443. }
  444. function selectFirstItemInTreeControl()
  445. {
  446. var v_elSpanFirst = G_App.m_oTreeViewCheckboxes.F_GetFirstVisibleTreeItem();
  447. if ( v_elSpanFirst )
  448. {
  449. v_elSpanFirst.focus();
  450. }
  451. }
  452. G_App.F_ResManager_OnStringsLoaded = function( v_aFiles )
  453. {
  454. G_ResManager.F_LoadResources( [ WEB_CONTENT + "/mdsrv/res/EditVariablesResources.xml" ],this );
  455. };
  456. G_App.F_ResManager_OnResourcesLoaded = function( v_aFiles )
  457. {
  458. //LoadStrings is async call therefore load all the controls after G_ResManager.F_LoadStrings G_ResManager.F_LoadResources are completed. This change was done because the Treeview tries to access HAL string before it is loaded.
  459. this.initControls();
  460. }
  461. function retrieveImportSpec()
  462. {
  463. var getImportSpecRequestURL = GATEWAY_URL + "/metadataUIService";
  464. D_Progress.F_DisableCancel();
  465. D_Progress.F_Show( null, localizedStrings["MSR_SAP_Loading"] );
  466. var getImportSpecRequestPostParams = {};
  467. getImportSpecRequestPostParams["pid"] = "importWizard_ImportSpec_pid";
  468. getImportSpecRequestPostParams["packageLocation"] = IMPORTWIZARD.packageLocation;
  469. getImportSpecRequestPostParams["packageName"] = IMPORTWIZARD.packageName;
  470. getImportSpecRequestPostParams["error_pid"] = asyncErrorPagePid;
  471. IMPORTWIZARD.onResumeFromNonRecoverableError = function(){
  472. hideProgressIfShowing();
  473. }
  474. urlRequestInvoker.MakeAsyncRequestInIFrame( getImportSpecRequestURL, getImportSpecRequestPostParams );
  475. }
  476. function GenerateJSONString( obj )
  477. {
  478. var strObjJSON = "";
  479. for (var i in obj)
  480. {
  481. strObjJSON += "\t\t\"" + i + "\": ";
  482. strObjJSON += "\"" + obj[i] + "\",\n";
  483. }
  484. // The last comma must be removed, in order to have a syntactically correct JSON string.
  485. // Firefox doesn't care about this, but IE fails to work properly if this isn't done.
  486. var lastCommaIndex = strObjJSON.lastIndexOf( ',' );
  487. strObjJSON = "\t{\n" + strObjJSON.substr(0, lastCommaIndex ) + "\n\t}\n";
  488. // alert( "GenerateJSONString\n\n" + strObjJSON ); // Debugging
  489. return strObjJSON;
  490. }
  491. G_App.PopulateTreeView_RootNode = function( aDoc, treeViewElem )
  492. {
  493. var rootNodeElem = treeViewElem.appendChild( aDoc.createElement( "treeNode" ) );
  494. var nodeValueObj = {};
  495. nodeValueObj["type"] = kDatabaseTypeStr;
  496. nodeValueObj["uniqueName"] = kDatabaseTypeStr;
  497. var nodeIcon = GetIconFilePath( kDatabaseTypeStr );
  498. var nodeValue = GenerateJSONString( nodeValueObj );
  499. rootNodeElem.setAttribute( "value", nodeValue );
  500. rootNodeElem.setAttribute( "label", IMPORTWIZARD.dataSourceName);
  501. rootNodeElem.setAttribute( "smallIcon", nodeIcon );
  502. rootNodeElem.setAttribute( "expandedSmallIcon", nodeIcon );
  503. rootNodeElem.setAttribute( "expandable", "true" );
  504. rootNodeElem.setAttribute( "staticCheckbox", "true" );
  505. rootNodeElem.setAttribute( "role", "treeItem" );
  506. rootNodeElem.setAttribute( "tooltip", kDatabaseTypeStr );
  507. };
  508. var bIsLanguagesListPopulated = false;
  509. function PopulateLanguagesListBox()
  510. {
  511. var getLanguagesRequestURL = GATEWAY_URL + "/metadataUIService";
  512. D_Progress.F_DisableCancel();
  513. D_Progress.F_Show( null, localizedStrings["MSR_SAP_Loading"]);
  514. var getLanguagesRequestPostParams = {};
  515. getLanguagesRequestPostParams["pid"] = "OLAPImportWizard_Languages_pid"
  516. getLanguagesRequestPostParams["datasource"] = IMPORTWIZARD.dataSourceName;
  517. getLanguagesRequestPostParams["dataSourceCredentials"] = IMPORTWIZARD.credentials;
  518. getLanguagesRequestPostParams["error_pid"] = asyncErrorPagePid;
  519. urlRequestInvoker.MakeAsyncRequestInIFrame( getLanguagesRequestURL, getLanguagesRequestPostParams );
  520. }
  521. G_App.PopulateLanguagesListView = function(languagesList)
  522. {
  523. var designLocaleList = document.getElementById( "designLanguage" );
  524. var selIndex = 0;
  525. for (var i = 0; i < languagesList.length; i++)
  526. {
  527. var newListItemNode = this.m_oListViewCheckboxes.F_AppendNewListItem();
  528. newListItemNode.setAttribute( "value", languagesList[i].localeId );
  529. newListItemNode.setAttribute( "label", languagesList[i].localeName );
  530. newListItemNode.setAttribute( "staticCheckbox", "false" );
  531. newListItemNode.setAttribute( "checked", "false" );
  532. if (languagesList[i].localeId == IMPORTWIZARD.productLocale)
  533. selIndex = i;
  534. designLocaleList.options[i]=new Option(languagesList[i].localeName, languagesList[i].localeId);
  535. }
  536. designLocaleList.selectedIndex = selIndex;
  537. bIsLanguagesListPopulated = true;
  538. hideProgressIfShowing();
  539. };
  540. function providerLangResultsReceived( providerLanguages )
  541. {
  542. G_App.PopulateLanguagesListView( providerLanguages.lang );
  543. G_App.m_oListViewCheckboxes.F_Draw();
  544. //D_Progress.F_Hide();
  545. urlRequestInvoker.RequestFinished();
  546. // expand the root node
  547. //alert( "In providerLangResultsReceived( providerLanguages ).\n" );
  548. setTimeout( function(){
  549. var treeRootViewNode = G_App.m_oTreeViewCheckboxes.F_GetTreeViewNode();
  550. var node = treeRootViewNode.selectSingleNode( "treeNode" );
  551. G_App.expandNode(node);
  552. }, 700 );
  553. // // For accessibility Set the focus on the first item of the check box
  554. // var v_nFirstListItem = G_App.m_oListViewCheckboxes.F_GetFirstSelectableItem();
  555. // if ( v_nFirstListItem )
  556. // {
  557. // var vaFocus = document.getElementById( v_nFirstListItem.getAttribute( "htmlId" ) );
  558. // if( vaFocus )
  559. // vaFocus.focus();
  560. // }
  561. }
  562. function importSpecReceivedReceived( treeSnippet )
  563. {
  564. D_Progress.F_Hide();
  565. urlRequestInvoker.RequestFinished();
  566. G_App.m_oTreeViewCheckboxes.F_StartAsyncLoad();
  567. var aDoc = G_App.m_treeViewNodesDoc;
  568. var treeViewElem = G_App.m_oTreeViewCheckboxes.F_GetTreeViewNode();
  569. IMPORTWIZARD.dataSourceName = treeSnippet.node.Name; // In edit scenario we didn't know the ds name, so we populate it now
  570. PopulateTreeView( treeSnippet.node, aDoc, treeViewElem );
  571. G_App.m_oTreeViewCheckboxes.F_EndAsyncLoad( true /* v_bSucceeded */);
  572. selectFirstItemInTreeControl();
  573. }
  574. function SaveModifiedSettings()
  575. {
  576. var saveModifiedSettingsURL = GATEWAY_URL + "/metadataUIService";
  577. D_Progress.F_DisableCancel();
  578. D_Progress.F_Show( null, localizedStrings["MSR_SAP_Saving"]);
  579. var saveModifiedSettingsParams = {};
  580. saveModifiedSettingsParams["pid"] = "saveModifiedPackageSettings_pid";
  581. saveModifiedSettingsParams["searchPath"] = IMPORTWIZARD.packageLocation + "/package[@name=" + EncloseInQuotes( IMPORTWIZARD.packageName ) + "]/model";
  582. saveModifiedSettingsParams["property"] = "http://developer.cognos.com/ceba/constants/queryOptionEnum#mode";
  583. var ms_useV5DataServerCheckBox = document.getElementById( "ms_useV5DataServer" );
  584. if (ms_useV5DataServerCheckBox.checked)
  585. {
  586. saveModifiedSettingsParams["value"] = "http://developer.cognos.com/ceba/constants/queryModeEnum#dynamic"; // XQE
  587. }
  588. else
  589. {
  590. saveModifiedSettingsParams["value"] = "http://developer.cognos.com/ceba/constants/queryModeEnum#compatible"; // Legacy query stack
  591. }
  592. saveModifiedSettingsParams["error_pid"] = asyncErrorPagePid;
  593. urlRequestInvoker.MakeAsyncRequestInIFrame( saveModifiedSettingsURL, saveModifiedSettingsParams );
  594. }
  595. function OnSaveModifiedPackageSettingsRequestCompleted()
  596. {
  597. D_Progress.F_Hide();
  598. urlRequestInvoker.RequestFinished();
  599. window.location.replace( IMPORTWIZARD.backURL );
  600. }
  601. //
  602. // Populates the tree view based on data obtained from the server side
  603. // (through a JSP async call).
  604. // This data could be coming from either:
  605. // - the browse JSP (when expanding tree nodes for the first time)
  606. // - the import spec JSP (when editing an existing package)
  607. //
  608. function PopulateTreeView( treeViewNodeData, aDoc, treeViewElem )
  609. {
  610. var nodeLabel = treeViewNodeData.Name;
  611. var nodeType = treeViewNodeData.Type;
  612. var bIsNodeSelected = treeViewNodeData.Selected != null && treeViewNodeData.Selected != "false";
  613. var nodeValueObj = {};
  614. nodeValueObj["type"] = nodeType;
  615. nodeValueObj["uniqueName"] = (treeViewNodeData.uniqueName != null) ? treeViewNodeData.uniqueName : treeViewNodeData.Name;
  616. var nodeValue = GenerateJSONString( nodeValueObj );
  617. var nodeIcon = GetIconFilePath( nodeType );
  618. var nodeExpandedIcon = GetIconFilePath( nodeType );
  619. var bExpandable = (nodeType != kCubeTypeStr);
  620. var bHideCheckBox = (nodeType == kDimensionGroupTypeStr || nodeType == kDimensionTypeStr
  621. || nodeType == kMeasuresGroupTypeStr || nodeType == kMeasureTypeStr);
  622. var bStaticCheckBox = (nodeType != kCubeTypeStr);
  623. var bChecked = !bHideCheckBox && bIsNodeSelected;
  624. var nodeElem = treeViewElem.appendChild( aDoc.createElement( "treeNode" ) );
  625. nodeElem.setAttribute( "value", nodeValue );
  626. nodeElem.setAttribute( "label", nodeLabel );
  627. nodeElem.setAttribute( "smallIcon", nodeIcon );
  628. nodeElem.setAttribute( "expandedSmallIcon", nodeExpandedIcon );
  629. nodeElem.setAttribute( "tooltip", nodeType );
  630. nodeElem.setAttribute( "expandable", bExpandable ? "true" : "false" );
  631. nodeElem.setAttribute( "hideCheckbox", bHideCheckBox ? "true" : "false" );
  632. nodeElem.setAttribute( "staticCheckbox", bStaticCheckBox ? "true" : "false" );
  633. nodeElem.setAttribute( "checked", bChecked ? "true" : "false" );
  634. // testing code
  635. if (IMPORTWIZARD.enableTest)
  636. {
  637. if (nodeValueObj["uniqueName"] == IMPORTWIZARD.treeLevels[g_expandTreeLevel])
  638. {
  639. // remember treeViewNodeData
  640. g_viewNodeToExpand = nodeElem;
  641. }
  642. if (nodeValueObj["type"] == kCubeTypeStr)
  643. {
  644. if (nodeValueObj["uniqueName"] == IMPORTWIZARD.cubeToSelect)
  645. {
  646. nodeElem.setAttribute( "checked","true" );
  647. }
  648. }
  649. }
  650. // testing code end
  651. if (treeViewNodeData.children != null)
  652. {
  653. for (var i = 0; i < treeViewNodeData.children.length; i++)
  654. {
  655. PopulateTreeView( treeViewNodeData.children[i], aDoc, nodeElem );
  656. }
  657. }
  658. }
  659. /**
  660. * Used in edit mode, to pass to the browse JSP, the selected nodes recursively.
  661. */
  662. function ExtractSelectedTreeNodes( v_nTreeNode, nodePathEntry )
  663. {
  664. if (v_nTreeNode.childNodes != null && v_nTreeNode.childNodes.length > 0)
  665. {
  666. nodePathEntry.children = [];
  667. for (var i = 0; i < v_nTreeNode.childNodes.length; i++)
  668. {
  669. var childNodeName = v_nTreeNode.childNodes[i].getAttribute( "label" );
  670. var childNodeValue = v_nTreeNode.childNodes[i].getAttribute( "value" );
  671. var childNodeValueObj = eval( "(" + childNodeValue + ")" );
  672. var childNodeType = childNodeValueObj.type;
  673. var childNodeUniqueName = childNodeValueObj.uniqueName;
  674. nodePathEntry.children[i] = {};
  675. nodePathEntry.children[i]["uniqueName"] = childNodeUniqueName;
  676. nodePathEntry.children[i].Selected = "true";
  677. nodePathEntry.children[i].Type = childNodeType;
  678. nodePathEntry.children[i].Value = "false";
  679. nodePathEntry.children[i].Name = childNodeName;
  680. ExtractSelectedTreeNodes( v_nTreeNode.childNodes[i], nodePathEntry.children[i] );
  681. }
  682. }
  683. }
  684. var g_treeNodeBeingPopulated = null;
  685. var g_expandTreeLevel = 0; // used only for testing (does not expect collapsing the tree nodes)
  686. var g_viewNodeToExpand = null; // node to expand based on the provided drill down path
  687. var g_dimNum = 0; // currently selected dimension number (zero based) in test mode
  688. //var g_aliasNum = 0; // currently selected alias table number (zero based) in test mode
  689. G_App.F_TreeView_OnPopulateChildren = function( v_oTreeView, v_nTreeNode )
  690. {
  691. //
  692. // Disable the Next & Finish buttons temporarily, to prevent 2 async calls from colliding in the same IFrame.
  693. //
  694. var nextButton = document.getElementById( "nextButton" );
  695. EnableButton( nextButton, false /* bEnable */ );
  696. var finishButton = document.getElementById( "finishButton" );
  697. IMPORTWIZARD.isFinishButtonEnabled = IsButtonEnabled( finishButton );
  698. EnableButton( finishButton, false /* bEnable */ );
  699. var currentNode = v_nTreeNode;
  700. var nodePath = "";
  701. // The nodePath is being build back-wards
  702. do
  703. {
  704. var nodeName = currentNode.getAttribute( "label" );
  705. var nodeValue = currentNode.getAttribute( "value" );
  706. var nodeValueObj = eval( "(" + nodeValue + ")" );
  707. var nodeType = nodeValueObj.type;
  708. var nodeUniqueName = nodeValueObj.uniqueName;
  709. // if the node path is empty then we are at the beginning
  710. var bIsSelectedNode = (nodePath == "");
  711. var nodePathEntry = {};
  712. nodePathEntry.Name = nodeName;
  713. nodePathEntry.Type = nodeType;
  714. nodePathEntry.Value = "false";
  715. if (nodeType == kDatabaseTypeStr)
  716. {
  717. nodePathEntry.dbType = IMPORTWIZARD.dataSourceType;
  718. nodePathEntry.isSystem = "false";
  719. }
  720. else
  721. {
  722. nodePathEntry.uniqueName = nodeUniqueName;
  723. }
  724. if (bIsSelectedNode)
  725. {
  726. nodePathEntry.Selected = "true";
  727. nodePathEntry.expansion = "true";
  728. ExtractSelectedTreeNodes( v_nTreeNode, nodePathEntry );
  729. }
  730. strNodePathEntry = JSON.stringify( nodePathEntry, null, "\t" );
  731. var nodePathEntryPostfix = (currentNode == v_nTreeNode) ? "\n" : ",\n";
  732. nodePath = strNodePathEntry + nodePathEntryPostfix + nodePath;
  733. currentNode = currentNode.parentNode;
  734. }
  735. while (currentNode != null && currentNode.tagName == "treeNode");
  736. nodePath = "{\"node\":[\n" + nodePath + "]}";
  737. g_treeNodeBeingPopulated = v_nTreeNode;
  738. var browseTreeRequestURL = GATEWAY_URL + "/metadataUIService";
  739. var browseTreeRequestPostParams = {};
  740. if (IMPORTWIZARD.enableTestNoDBConnection)
  741. browseTreeRequestPostParams["pid"] = "importWizard_GetTreeNodes_TEST_pid";
  742. else
  743. browseTreeRequestPostParams["pid"] = "importWizard_GetTreeNodes_pid";
  744. browseTreeRequestPostParams["connectionName"] = IMPORTWIZARD.dataSourceName;
  745. browseTreeRequestPostParams["nodePath"] = nodePath;
  746. browseTreeRequestPostParams["dataSourceCredentials"] = IMPORTWIZARD.credentials;
  747. browseTreeRequestPostParams["error_pid"] = asyncErrorPagePid;
  748. var useV5DataServerCheckBox = document.getElementById( "useV5DataServer" );
  749. browseTreeRequestPostParams["useV5DataServer"] = useV5DataServerCheckBox.checked ? "true" : "false";
  750. IMPORTWIZARD.onResumeFromRecoveredErrorHandler = function()
  751. {
  752. urlRequestInvoker.RequestFinished();
  753. G_App.m_oTreeViewCheckboxes.F_EndAsyncLoad( false /* v_bSucceeded */ );
  754. g_treeNodeBeingPopulated = null;
  755. if (this.retry)
  756. {
  757. this.retry = false;
  758. G_App.m_oTreeViewCheckboxes.F_ExpandNode(v_nTreeNode);
  759. }
  760. };
  761. IMPORTWIZARD.onResumeFromNonRecoverableError = function()
  762. {
  763. G_App.m_oTreeViewCheckboxes.F_EndAsyncLoad( false /* v_bSucceeded */ );
  764. g_treeNodeBeingPopulated = null;
  765. urlRequestInvoker.RequestFinished();
  766. }
  767. urlRequestInvoker.MakeAsyncRequestInIFrame( browseTreeRequestURL, browseTreeRequestPostParams );
  768. return true;
  769. };
  770. G_App.F_HAL_OnUnLoad = function()
  771. {
  772. this.m_oTreeViewCheckboxes.F_Detach();
  773. this.m_oListViewCheckboxes.F_Detach();
  774. if (this.m_oPropertySheet != null)
  775. {
  776. this.m_oPropertySheet.F_Detach();
  777. }
  778. };
  779. G_App.F_ApplySkin = function( v_sSkin )
  780. {
  781. // Build the path to the appropriate skin css file
  782. var v_aSkin = v_sSkin.split( "|" );
  783. var v_sSkinName = v_aSkin[0];
  784. var v_sSkinType = v_aSkin[1];
  785. var v_sSkinPath = WEB_CONTENT + "/skins/" + v_sSkinName + "/hal/hal_portal_skin.css";
  786. var v_sSkinPath2 = WEB_CONTENT + "/skins/" + v_sSkinName + "/hal/hal_skin.css";
  787. // Remove existing link tag to skin css
  788. var v_nExistingCSSNode = document.getElementById( "idHALSkinCSS" );
  789. if ( v_nExistingCSSNode )
  790. {
  791. v_nExistingCSSNode.parentNode.removeChild( v_nExistingCSSNode );
  792. }
  793. // Create and append new link tag to skin css
  794. var v_elHead = document.getElementsByTagName( "head" )[0];
  795. var v_elLinkCSS = document.createElement( "link" );
  796. v_elLinkCSS.id = "idHALSkinCSS";
  797. v_elLinkCSS.type = "text/css";
  798. v_elLinkCSS.rel = "stylesheet";
  799. v_elLinkCSS.href = v_sSkinPath;
  800. v_elHead.appendChild( v_elLinkCSS );
  801. var v_elLinkCSS2 = document.createElement( "link" );
  802. v_elLinkCSS2.id = "idHALSkinCSS";
  803. v_elLinkCSS2.type = "text/css";
  804. v_elLinkCSS2.rel = "stylesheet";
  805. v_elLinkCSS2.href = v_sSkinPath2;
  806. v_elHead.appendChild( v_elLinkCSS2 );
  807. document.body.style.backgroundColor = ( v_sSkinType == "portal" ) ? "#FFFFFF" : "";
  808. // Set skin value in cookie
  809. var v_dateExpires = new Date();
  810. v_dateExpires.setUTCFullYear( v_dateExpires.getUTCFullYear() + 1 );
  811. U_CookieJar.F_SetCookie( "skin", v_sSkin, v_dateExpires );
  812. };
  813. G_App.F_Deck_OnBeforeCardVisible = function( v_oDeck, v_divNewCard, v_iOldCardIndex, v_iNewCardIndex )
  814. {
  815. };
  816. G_App.F_Deck_OnAfterCardVisible = function( v_oDeck, v_divNewCard, v_iOldCardIndex, v_iNewCardIndex )
  817. {
  818. if (v_oDeck == this.m_oDeck)
  819. {
  820. var pageTitles =
  821. [
  822. localizedStrings["MSR_SAP_selectObjectsTitle"],
  823. localizedStrings["MSR_SAP_selectLanguagesTitle"],
  824. localizedStrings["MSR_SAP_generateDimensionsTitle"]
  825. ];
  826. // var pageTitlePostfix = (IMPORTWIZARD.isEdit) ? " &nbsp; <i>[Edit Package Mode]</i>" : "";
  827. document.getElementById( "dialogHeaderTitle" ).innerHTML = pageTitles[v_iNewCardIndex];
  828. UpdateButtonsEnableStatus( v_iNewCardIndex );
  829. if (v_iNewCardIndex == 1 /* languages card index */ )
  830. {
  831. if (bIsLanguagesListPopulated == false)
  832. {
  833. PopulateLanguagesListBox();
  834. }
  835. if (IMPORTWIZARD.dataSourceType != "TMR")
  836. {
  837. document.getElementById( "radSeparateDim" ).checked = "false";
  838. document.getElementById( "radProperties" ).checked = "true";
  839. }
  840. // populate the list box with the dimensions (id="divListViewDimensions") from the selected cube
  841. // Get the selected tree node
  842. var treeNodesList = G_App.m_oTreeViewCheckboxes.F_GetCheckedNodes();
  843. var cubeNamesToDelete = [];
  844. for (var cubeName in mapCubeAliasTables)
  845. {
  846. // search the new list to see if the cube has been deleted
  847. var found = false;
  848. for (var n = 0; n < treeNodesList.length; n++)
  849. {
  850. var treeNode = treeNodesList.item( n );
  851. var nodeValue = treeNode.getAttribute( "value" );
  852. var nodeValueObj = eval( "(" + nodeValue + ")" );
  853. var nodeUniqueName = nodeValueObj.uniqueName;
  854. if (nodeUniqueName == cubeName)
  855. {
  856. found = true;
  857. break;
  858. }
  859. }
  860. if (found == false)
  861. {
  862. cubeNamesToDelete.push(cubeName);
  863. }
  864. }
  865. for (var k = 0; k < cubeNamesToDelete.length; k++)
  866. {
  867. var cube = cubeNamesToDelete[k];
  868. delete mapCubeAliasTables[cube];
  869. if (mapCubeAliasLanguages[cube] != null)
  870. {
  871. delete mapCubeAliasLanguages[cube];
  872. }
  873. if (cubeAttributeDimensionsAsProperties[cube] != null)
  874. {
  875. delete cubeAttributeDimensionsAsProperties[cube];
  876. }
  877. }
  878. PopulateCubes( treeNodesList );
  879. }
  880. else if(v_iNewCardIndex == 2 )
  881. {
  882. //For Accessibility put the focus on the first control of the page
  883. var focusElement = document.getElementById( "radioShortName");
  884. if( focusElement )
  885. {
  886. focusElement.focus();
  887. }
  888. }
  889. }
  890. };
  891. G_App.F_Next = function()
  892. {
  893. var msg = IMPORTWIZARD.checkNext();
  894. if (msg){
  895. alert(msg);
  896. }
  897. else{
  898. var currentCard = G_App.m_oDeck.F_GetIndex();
  899. switch (currentCard)
  900. {
  901. case 0:
  902. {
  903. if(mapCubeAliasTables == null)
  904. mapCubeAliasTables = new Object();
  905. if(mapCubeAliasLanguages == null)
  906. mapCubeAliasLanguages = new Object();
  907. if(cubeAttributeDimensionsAsProperties == null)
  908. cubeAttributeDimensionsAsProperties = new Object();
  909. break;
  910. }
  911. case 1:
  912. break;
  913. case 2:
  914. break;
  915. case 3:
  916. break;
  917. }
  918. this.m_oDeck.F_Next();
  919. }
  920. };
  921. function PopulateCubes( treeNodesList )
  922. {
  923. //
  924. // Disable the Next & Finish buttons temporarily, to prevent 2 async calls from colliding in the same IFrame.
  925. //
  926. cubeNodeList = treeNodesList; // keeps the tree nodes of the selected cubes. We need the tree nodes to be able to compute the path to the cube browsing the parents.
  927. G_App.m_oListViewCubes.F_Clear();
  928. var nextButton = document.getElementById( "nextButton" );
  929. EnableButton( nextButton, false );
  930. var finishButton = document.getElementById( "finishButton" );
  931. EnableButton( finishButton, true );
  932. if (D_Progress.F_IsActiveDialog() == false)
  933. {
  934. D_Progress.F_DisableCancel();
  935. D_Progress.F_Show( null, localizedStrings["MSR_SAP_Loading"]);
  936. }
  937. for (var i = 0; i < treeNodesList.length; i++)
  938. {
  939. var cube = treeNodesList[i];
  940. var nodeName = cube.getAttribute( "label" );
  941. var nodeValue = cube.getAttribute( "value" );
  942. var childNodeValueObj = eval( "(" + nodeValue + ")" );
  943. var childNodeType = childNodeValueObj.type;
  944. var childNodeUniqueName = childNodeValueObj.uniqueName;
  945. var newListItemNode = G_App.m_oListViewCubes.F_AppendNewListItem();
  946. newListItemNode.setAttribute( "value", nodeValue );
  947. newListItemNode.setAttribute( "label", nodeName );
  948. }
  949. G_App.selectFirstListBoxItem(G_App.m_oListViewCubes);
  950. G_App.m_oListViewCubes.F_Draw();
  951. // populate dimensions for the first cube in the list
  952. var firstCube = treeNodesList[0];
  953. PopulateDimensionsListBox( firstCube );
  954. hideProgressIfShowing();
  955. }
  956. function PopulateDimensionsListBox( v_nTreeNode )
  957. {
  958. //
  959. // Disable the Next & Finish buttons temporarily, to prevent 2 async calls from colliding in the same IFrame.
  960. //
  961. var nextButton = document.getElementById( "nextButton" );
  962. EnableButton( nextButton, false ); // bEnable
  963. var finishButton = document.getElementById( "finishButton" );
  964. IMPORTWIZARD.isFinishButtonEnabled = IsButtonEnabled( finishButton );
  965. EnableButton( finishButton, false );// bEnable
  966. if (D_Progress.F_IsActiveDialog() == false)
  967. {
  968. D_Progress.F_DisableCancel();
  969. D_Progress.F_Show( null, localizedStrings["MSR_SAP_Loading"]);
  970. }
  971. var currentNode = v_nTreeNode;
  972. var nodePath = "";
  973. // The nodePath is being build back-wards
  974. do
  975. {
  976. var nodeName = currentNode.getAttribute( "label" );
  977. var nodeValue = currentNode.getAttribute( "value" );
  978. var nodeValueObj = eval( "(" + nodeValue + ")" );
  979. var nodeType = nodeValueObj.type;
  980. var nodeUniqueName = nodeValueObj.uniqueName;
  981. // if the node path is empty then we are at the beginning
  982. var bIsSelectedNode = (nodePath == "");
  983. var nodePathEntry = {};
  984. nodePathEntry.Name = nodeName;
  985. nodePathEntry.Type = nodeType;
  986. nodePathEntry.Value = "false";
  987. if (nodeType == kDatabaseTypeStr)
  988. {
  989. nodePathEntry.dbType = IMPORTWIZARD.dataSourceType;
  990. nodePathEntry.isSystem = "false";
  991. }
  992. else
  993. {
  994. nodePathEntry.uniqueName = nodeUniqueName;
  995. }
  996. if (bIsSelectedNode)
  997. {
  998. nodePathEntry.Selected = "true";
  999. nodePathEntry.expansion = "true";
  1000. ExtractSelectedTreeNodes( v_nTreeNode, nodePathEntry );
  1001. }
  1002. strNodePathEntry = JSON.stringify( nodePathEntry, null, "\t" );
  1003. var nodePathEntryPostfix = (currentNode == v_nTreeNode) ? "\n" : ",\n";
  1004. nodePath = strNodePathEntry + nodePathEntryPostfix + nodePath;
  1005. currentNode = currentNode.parentNode;
  1006. }
  1007. while (currentNode != null && currentNode.tagName == "treeNode");
  1008. nodePath = "{\"node\":[\n" + nodePath + "]}";
  1009. g_treeNodeBeingPopulated = v_nTreeNode;
  1010. var browseTreeRequestURL = GATEWAY_URL + "/metadataUIService";
  1011. var browseTreeRequestPostParams = {};
  1012. if (IMPORTWIZARD.enableTestNoDBConnection)
  1013. browseTreeRequestPostParams["pid"] = "OLAPImportWizard_GetDimensionsList_TEST_pid";
  1014. else
  1015. browseTreeRequestPostParams["pid"] = "OLAPImportWizard_GetDimensionsList_pid";
  1016. browseTreeRequestPostParams["connectionName"] = IMPORTWIZARD.dataSourceName;
  1017. browseTreeRequestPostParams["nodePath"] = nodePath;
  1018. browseTreeRequestPostParams["dataSourceCredentials"] = IMPORTWIZARD.credentials;
  1019. browseTreeRequestPostParams["error_pid"] = asyncErrorPagePid;
  1020. var useV5DataServerCheckBox = document.getElementById( "useV5DataServer" );
  1021. browseTreeRequestPostParams["useV5DataServer"] = useV5DataServerCheckBox.checked ? "true" : "false";
  1022. IMPORTWIZARD.onResumeFromRecoveredErrorHandler = function()
  1023. {
  1024. urlRequestInvoker.RequestFinished();
  1025. G_App.m_oTreeViewCheckboxes.F_EndAsyncLoad( false );// v_bSucceeded
  1026. g_treeNodeBeingPopulated = null;
  1027. if (this.retry)
  1028. {
  1029. this.retry = false;
  1030. G_App.m_oTreeViewCheckboxes.F_ExpandNode(v_nTreeNode);
  1031. }
  1032. };
  1033. IMPORTWIZARD.onResumeFromNonRecoverableError = function()
  1034. {
  1035. G_App.m_oTreeViewCheckboxes.F_EndAsyncLoad( false );// v_bSucceeded
  1036. g_treeNodeBeingPopulated = null;
  1037. urlRequestInvoker.RequestFinished();
  1038. }
  1039. urlRequestInvoker.MakeAsyncRequestInIFrame2( browseTreeRequestURL, browseTreeRequestPostParams );
  1040. }
  1041. G_App.F_Back = function()
  1042. {
  1043. this.m_oDeck.F_Back();
  1044. };
  1045. //
  1046. // When a node is checked/unchecked, update the check status of the parent nodes.
  1047. //
  1048. G_App.F_TreeView_OnNodeCheck = function( v_oTreeView, v_nTreeNode )
  1049. {
  1050. };
  1051. G_App.F_TreeView_OnNodeClick = function( v_oTreeView, v_nTreeNode, v_iMouseButton )
  1052. {
  1053. };
  1054. G_App.F_TreeView_OnNodeDblClick = function( v_oTreeView, v_nTreeNode )
  1055. {
  1056. };
  1057. function IsButtonEnabled( button )
  1058. {
  1059. return (button.className == "commandButton");
  1060. }
  1061. // Enables the button (if bEnable is true), or disables it (if bEnable is false).
  1062. // It preserves and restores the OnClick and OnDblClick events properly.
  1063. function EnableButton( button, bEnable )
  1064. {
  1065. var prevEnabledState = IsButtonEnabled( button );
  1066. if (bEnable == true /*&& button.className == "commandButtonInactiveII"*/)
  1067. {
  1068. button.className = "commandButton";
  1069. button.onmouseover = function( e ) { this.className = "commandButtonOver"; };
  1070. button.onmouseout = function( e ) { this.className = "commandButton"; };
  1071. button.onmousedown = function( e ) { this.className = "commandButton"; };
  1072. button.onkeypress = handle_onkeydown;
  1073. button.children[0].tabIndex = 0;
  1074. if (prevEnabledState == false)
  1075. {
  1076. if (button.onclick_enabled != null)
  1077. {
  1078. button.onclick = button.onclick_enabled;
  1079. }
  1080. if (button.ondblclick_enabled != null)
  1081. {
  1082. button.ondblclick = button.ondblclick_enabled;
  1083. }
  1084. }
  1085. }
  1086. else if (bEnable == false)
  1087. {
  1088. button.className = "commandButtonInactiveII";
  1089. button.onmouseover = null;
  1090. button.onmouseout = null;
  1091. button.onmousedown = null;
  1092. button.onkeypress = null;
  1093. button.children[0].tabIndex = -1;
  1094. // preserve the previous event handlers
  1095. if (prevEnabledState == true)
  1096. {
  1097. button.onclick_enabled = button.onclick;
  1098. button.ondblclick_enabled = button.ondblclick;
  1099. }
  1100. button.onclick = "";
  1101. button.ondblclick = "";
  1102. }
  1103. }
  1104. function UpdateButtonsEnableStatus( cardIndex )
  1105. {
  1106. var prevButton = document.getElementById( "prevButton" );
  1107. var bEnablePrevButton = (cardIndex != 0);
  1108. if (bEnablePrevButton)
  1109. {
  1110. prevButton.onclick = function( e ) { G_App.F_Back(); };
  1111. prevButton.ondblclick = function( e ) { G_App.F_Back(); };
  1112. }
  1113. EnableButton( prevButton, bEnablePrevButton );
  1114. var nextButton = document.getElementById( "nextButton" );
  1115. var bEnableNextButton = (cardIndex != G_App.m_oDeck.F_GetNumberOfCards() - 1);
  1116. if (bEnableNextButton)
  1117. {
  1118. nextButton.onclick = function( e ) { G_App.F_Next(); };
  1119. nextButton.ondblclick = function( e ) { G_App.F_Next(); };
  1120. }
  1121. EnableButton( nextButton, bEnableNextButton );
  1122. var finishButton = document.getElementById( "finishButton" );
  1123. var bEnableFinishButton = (cardIndex == G_App.m_oDeck.F_GetNumberOfCards() - 1);
  1124. if (bEnableFinishButton)
  1125. {
  1126. finishButton.onclick = function( e ) { WizardDone(); };
  1127. finishButton.ondblclick = function( e ) { WizardDone(); };
  1128. EnableButton( finishButton, bEnableFinishButton );
  1129. }
  1130. }
  1131. function UpdateImportSpecLang()
  1132. {
  1133. // for each cube from mapCubeAliasTables
  1134. for (var cubeName in mapCubeAliasTables)
  1135. {
  1136. var treeSnippet = mapCubeAliasTables[cubeName];
  1137. var mapAliasLangs = mapCubeAliasLanguages[cubeName]; //map { cubeuniqueName, map { alias table / list(of selected languages) } }
  1138. if (mapAliasLangs != null)
  1139. {
  1140. // TMR doesn't support aliases, so just add aliasTableLang to the importSpec if the user has selected a language
  1141. // because the code in FM is looking for aliasTableLang to add locales to the package
  1142. if (IMPORTWIZARD.dataSourceType == "TMR")
  1143. {
  1144. var checkedItemsPerAlias = mapAliasLangs["TMR_Alias"];
  1145. if (checkedItemsPerAlias != null)
  1146. {
  1147. for (var n = 0; n < checkedItemsPerAlias.length; n++)
  1148. {
  1149. var langCode = checkedItemsPerAlias[n];
  1150. var nodeEntry = {};
  1151. nodeEntry.Name = aliasName;
  1152. nodeEntry.Type = "aliasTableLang";
  1153. nodeEntry.uniqueName = langCode;
  1154. // add the new entry to the dimension
  1155. treeSnippet.node.children.push(nodeEntry);
  1156. }
  1157. }
  1158. }
  1159. for (var i = 0; i < treeSnippet.node.children.length; i++)
  1160. {
  1161. treeViewNodeData = treeSnippet.node.children[i]
  1162. var aliasName = treeViewNodeData.Name;
  1163. var nodeType = treeViewNodeData.Type;
  1164. if (nodeType == "aliasTable")
  1165. {
  1166. var checkedItemsPerAlias = mapAliasLangs[aliasName];
  1167. if (checkedItemsPerAlias != null)
  1168. {
  1169. for (var n = 0; n < checkedItemsPerAlias.length; n++)
  1170. {
  1171. var langCode = checkedItemsPerAlias[n];
  1172. // var langCode = lang.getAttribute( "value" );
  1173. // var langName = lang.getAttribute( "label" );
  1174. var nodeEntry = {};
  1175. nodeEntry.Name = aliasName;
  1176. nodeEntry.Type = "aliasTableLang";
  1177. nodeEntry.uniqueName = langCode;
  1178. // add the new entry to the dimension
  1179. treeSnippet.node.children.push(nodeEntry);
  1180. }
  1181. }
  1182. }
  1183. }
  1184. }
  1185. }
  1186. }
  1187. // returns "true" (Properties of the dimension they are associated with ) or "false" (Separate dimensions )
  1188. function getAttributeDimensionsAsProperties()
  1189. {
  1190. var v_separateDim;
  1191. if ( document.getElementById( "radSeparateDim" ).checked )
  1192. {
  1193. v_separateDim = "false";
  1194. }
  1195. else if ( document.getElementById( "radProperties" ).checked )
  1196. {
  1197. v_separateDim = "true";
  1198. }
  1199. return v_separateDim;
  1200. }
  1201. function associateCubesWithAliases(treeNodesPaths)
  1202. {
  1203. // browse to the leaf (cube)
  1204. var curentNode = treeNodesPaths[0].children; // get catalogs
  1205. if (curentNode != null)
  1206. {
  1207. for (var k = 0; k < curentNode.length; k++)
  1208. {
  1209. if (curentNode[k].children != null)
  1210. {
  1211. associateCubesWithAliases(curentNode[k].children);
  1212. }
  1213. else
  1214. {
  1215. // here curentNode is a cube
  1216. var cube = mapCubeAliasTables[curentNode.Name];
  1217. curentNode.children = cube.node.children;
  1218. }
  1219. }
  1220. }
  1221. else
  1222. {
  1223. // here treeNodesPaths are cubes
  1224. for (var j = 0; j < treeNodesPaths.length; j++)
  1225. {
  1226. var cube = mapCubeAliasTables[treeNodesPaths[j].Name];
  1227. if (cube != null)
  1228. {
  1229. treeNodesPaths[j].children = cube.node.children;
  1230. }
  1231. var attrib = cubeAttributeDimensionsAsProperties [treeNodesPaths[j].Name];
  1232. if (attrib == null)
  1233. attrib = "true"; // the default value is "true"
  1234. treeNodesPaths[j].attributeDimensionsAsProperties = attrib;
  1235. }
  1236. }
  1237. }
  1238. function WizardDone()
  1239. {
  1240. UpdateImportSpecLang();
  1241. // Build the importSpec object
  1242. var treeNodesList = G_App.m_oTreeViewCheckboxes.F_GetCheckedNodes();
  1243. if (treeNodesList.length == 0)
  1244. {
  1245. alert( "No objects have been selected for the import.\n\nImport action cancelled.\n" );
  1246. return;
  1247. }
  1248. var treeNodesPaths = [];
  1249. for (var n = 0; n < treeNodesList.length; n++)
  1250. {
  1251. var treeNode = treeNodesList.item( n );
  1252. treeNodesPaths[n] = GetTreeNodePath( treeNode );
  1253. }
  1254. ConsolidateTree( treeNodesPaths, 0 /* referenceNodeIndex */ );
  1255. if (treeNodesPaths.length != 1)
  1256. {
  1257. alert( "ASSERT FAILED: The number tree objects must be 1!\n\nIt is currently: " + treeNodesPaths.length );
  1258. }
  1259. associateCubesWithAliases(treeNodesPaths);
  1260. var importSpec = {};
  1261. importSpec["node"] = [];
  1262. importSpec["node"][0] = treeNodesPaths[0];
  1263. var strImportSpec = JSON.stringify( importSpec, null, "\t" );
  1264. var useV5DataServerCheckBox = document.getElementById( "useV5DataServer" );
  1265. var designLocaleCombo = document.getElementById("designLanguage");
  1266. var parameters = {};
  1267. parameters["params"] = {};
  1268. parameters["params"]["UseV5DataServer"] = useV5DataServerCheckBox.checked ? "true" : "false";
  1269. parameters["params"].designLocale = designLocaleCombo.options[designLocaleCombo.selectedIndex].value;
  1270. var strParameters = JSON.stringify( parameters, null, "\t" );
  1271. var pkgInfo = {};
  1272. pkgInfo["pkgInfo"]={};
  1273. pkgInfo["pkgInfo"]["Name"]=IMPORTWIZARD.packageName;
  1274. pkgInfo["pkgInfo"]["Description"]=IMPORTWIZARD.packageDescription;
  1275. pkgInfo["pkgInfo"]["ScreenTip"]=IMPORTWIZARD.packageScreentip;
  1276. pkgInfo["pkgInfo"]["Location"]=IMPORTWIZARD.packageLocation;
  1277. var strPkgInfo = JSON.stringify( pkgInfo, null, "\t" );
  1278. IMPORTWIZARD.onResumeFromNonRecoverableError = function(){
  1279. hideProgressIfShowing();
  1280. }
  1281. var importHelper = new ImportHelper(strImportSpec, strParameters, strPkgInfo);
  1282. importHelper.runImport();
  1283. D_Progress.F_DisableCancel();
  1284. D_Progress.F_Show( null, localizedStrings["MSR_SAP_creatingPackage"] );
  1285. }
  1286. function hideProgressIfShowing()
  1287. {
  1288. if (D_Progress.F_IsActiveDialog())
  1289. {
  1290. // hide any progress that may be up
  1291. D_Progress.F_Hide();
  1292. }
  1293. }
  1294. function GetTreeNodePath( v_nTreeNode )
  1295. {
  1296. var currentNode = v_nTreeNode;
  1297. var nodePathObj = {};
  1298. var bIsLeaf = true;
  1299. // The nodePath is being build back-wards
  1300. do
  1301. {
  1302. var nodeLabel = currentNode.getAttribute( "label" );
  1303. var nodeValue = currentNode.getAttribute( "value" );
  1304. var nodeValueObj = eval( "(" + nodeValue + ")" );
  1305. var nodeType = nodeValueObj.type;
  1306. var nodeUniqueName = nodeValueObj.uniqueName;
  1307. var nodeEntry = {};
  1308. nodeEntry.Name = nodeLabel;
  1309. nodeEntry.Type = nodeType;
  1310. nodeEntry.Value = (nodeType == kDatabaseTypeStr || nodeType == kCatalogTypeStr) ? "partial" : "true";
  1311. if (nodeType == kDatabaseTypeStr)
  1312. {
  1313. nodeEntry.dbType = IMPORTWIZARD.dataSourceType;
  1314. nodeEntry.isSystem = "false";
  1315. }
  1316. else
  1317. {
  1318. nodeEntry.uniqueName = nodeUniqueName;
  1319. }
  1320. if (!bIsLeaf)
  1321. {
  1322. nodeEntry.children = [nodePathObj];
  1323. }
  1324. nodePathObj = nodeEntry;
  1325. currentNode = currentNode.parentNode;
  1326. bIsLeaf = false;
  1327. }
  1328. while (currentNode != null && currentNode.tagName == "treeNode");
  1329. return nodePathObj;
  1330. }
  1331. // The first node in the array will end up containing the cosolidated tree nodes.
  1332. function ConsolidateTree( treeNodesPaths, referenceNodeIndex )
  1333. {
  1334. // Consolidate the various trees (tree node paths) into a single unified tree.
  1335. if (referenceNodeIndex < treeNodesPaths.length - 2)
  1336. {
  1337. ConsolidateTree( treeNodesPaths, referenceNodeIndex + 1);
  1338. }
  1339. // Traverse the list of nodes in reverse, to be able to remove elements on the fly.
  1340. for (var n = treeNodesPaths.length - 1; n > (referenceNodeIndex); n--)
  1341. {
  1342. var firstTreeNode = treeNodesPaths[referenceNodeIndex];
  1343. var currentTreeNode = treeNodesPaths[n];
  1344. if (AreObjectsEqual( firstTreeNode, currentTreeNode, ["children"] ))
  1345. {
  1346. // var strTreeNodePathBEFORE = JSON.stringify( firstTreeNode, null, "\t" );
  1347. // alert( "(BEFORE) same root node found\n\n\""
  1348. /// + strTreeNodePathBEFORE);
  1349. if (firstTreeNode.children == undefined || firstTreeNode.children == null)
  1350. {
  1351. firstTreeNode.children = currentTreeNode.children;
  1352. }
  1353. else
  1354. {
  1355. firstTreeNode.children = firstTreeNode.children.concat( currentTreeNode.children );
  1356. }
  1357. // node already processed; remove it from the collection.
  1358. treeNodesPaths.splice( n, 1 );
  1359. ConsolidateTree( firstTreeNode.children, 0 /* referenceNodeIndex */ );
  1360. }
  1361. }
  1362. }
  1363. G_App.F_OnCancel = function()
  1364. {
  1365. D_Progress.F_Hide();
  1366. };
  1367. function GetIconFilePath( objectType )
  1368. {
  1369. // hal/images/tv_folder.gif hal/images/tv_folder_expanded.gif
  1370. //
  1371. // This directory has all the images necessary:
  1372. // C:\Program Files\cognos\c8.5.17.3_Colorado_2009-02-13\webcontent\pat\images
  1373. var iconDirPath = WEB_CONTENT + "/mdsrv/importWizardUI/images/";
  1374. //
  1375. // This is NOT an associative array, but rather a HACK,
  1376. // where the keys are actually elements of the object properties.
  1377. //
  1378. var iconMap = [];
  1379. iconMap[kDatabaseTypeStr] = iconDirPath + "icon_data_source.gif";
  1380. iconMap[kCatalogTypeStr] = iconDirPath + "icon_catalog.gif";
  1381. iconMap[kCubeTypeStr] = iconDirPath + "icon_cube.gif";
  1382. iconMap[kInfoQueryTypeStr] = iconDirPath + "icon_info_query.gif";
  1383. iconMap[kDimensionGroupTypeStr] = iconDirPath + "icon_folder_dimensions.gif";
  1384. iconMap[kDimensionTypeStr] = iconDirPath + "icon_dimension.gif";
  1385. iconMap[kMeasuresGroupTypeStr] = iconDirPath + "icon_folder_measures.gif";
  1386. iconMap[kMeasureTypeStr] = iconDirPath + "icon_measure.gif";
  1387. iconMap["unknown"] = WEB_CONTENT + "/hal/images/btn_new.gif";
  1388. var objectIconFilePath = iconMap[objectType];
  1389. if (objectIconFilePath == null)
  1390. {
  1391. objectIconFilePath = iconMap["unknown"];
  1392. }
  1393. return objectIconFilePath;
  1394. }
  1395. function metadataTreeResultsReceived( treeSnippet )
  1396. {
  1397. if (g_treeNodeBeingPopulated == null)
  1398. {
  1399. return;
  1400. }
  1401. if (treeSnippet == null)
  1402. {
  1403. G_App.m_oTreeViewCheckboxes.F_EndAsyncLoad( true /* v_bSucceeded */ );
  1404. g_treeNodeBeingPopulated = null;
  1405. urlRequestInvoker.RequestFinished();
  1406. return;
  1407. }
  1408. g_viewNodeToExpand = null;
  1409. // This function will clear only the child nodes.
  1410. G_App.m_oTreeViewCheckboxes.F_Clear( g_treeNodeBeingPopulated );
  1411. for (var i = 0; i < treeSnippet.node.children.length; i++)
  1412. {
  1413. var aDoc = G_App.m_treeViewNodesDoc;
  1414. PopulateTreeView( treeSnippet.node.children[i], aDoc, g_treeNodeBeingPopulated );
  1415. }
  1416. G_App.m_oTreeViewCheckboxes.F_EndAsyncLoad( true /* v_bSucceeded */ );
  1417. g_treeNodeBeingPopulated = null;
  1418. urlRequestInvoker.RequestFinished();
  1419. //
  1420. // Re-enable the Next and Finish buttons
  1421. //
  1422. var nextButton = document.getElementById( "nextButton" );
  1423. EnableButton( nextButton, true /* bEnable */ );
  1424. var finishButton = document.getElementById( "finishButton" );
  1425. EnableButton( finishButton, IMPORTWIZARD.isFinishButtonEnabled /* bEnable */ );
  1426. g_expandTreeLevel += 1;
  1427. if (g_viewNodeToExpand != null)
  1428. {
  1429. setTimeout( function(){
  1430. G_App.expandNode( g_viewNodeToExpand);
  1431. }, 700 );
  1432. }
  1433. if (IMPORTWIZARD.enableTest == true)
  1434. {
  1435. if (g_expandTreeLevel == IMPORTWIZARD.treeLevels.length + 1)
  1436. {
  1437. setTimeout( function(){
  1438. G_App.F_Next();
  1439. }, 700 );
  1440. }
  1441. }
  1442. }
  1443. function metadataDimensionListResultsReceived( treeSnippet )
  1444. {
  1445. var childNodeUniqueName = getSelectedCubeUniqueName();
  1446. if (childNodeUniqueName != null)
  1447. {
  1448. mapCubeAliasTables[childNodeUniqueName] = treeSnippet; // map { cubeListNode, treeSnippet} ( used to cash the alias tables per cube to improve the performance )
  1449. }
  1450. // g_dimensionTree = treeSnippet;
  1451. G_App.PopulateDimensionsListView(treeSnippet);
  1452. hideProgressIfShowing();
  1453. urlRequestInvoker.RequestFinished();
  1454. G_App.m_oListViewDimensions.F_Draw();
  1455. G_App.selectFirstListBoxItem(G_App.m_oListViewDimensions);
  1456. G_App.m_oListViewDimensions.F_Draw();
  1457. if (IMPORTWIZARD.enableTest == true)
  1458. {
  1459. // in test mode, select all dimensions that are sent as http parameters
  1460. for (var dim in IMPORTWIZARD.dimAlias)
  1461. {
  1462. G_App.m_oListViewDimensions.F_DeselectAll();
  1463. var strDim = new String(dim);
  1464. g_dimNum = strDim.substr(1);
  1465. G_App.selectListBoxItem(G_App.m_oListViewDimensions, g_dimNum);
  1466. G_App.m_oListViewDimensions.F_Draw();
  1467. //G_App.PopulateAliasTablesListView(treeSnippet);
  1468. }
  1469. // Finish
  1470. // no requests in the previous code, so goto to finish
  1471. WizardDone();
  1472. }
  1473. // For accessibility Set the focus on the first item of the check box
  1474. var v_nFirstListItem = G_App.m_oListViewDimensions.F_GetFirstSelectableItem();
  1475. if ( v_nFirstListItem )
  1476. {
  1477. var vaFocus = document.getElementById( v_nFirstListItem.getAttribute( "htmlId" ) );
  1478. if( vaFocus )
  1479. vaFocus.focus();
  1480. }
  1481. G_App.m_oListViewDimensions.F_Draw();
  1482. var finishButton = document.getElementById( "finishButton" );
  1483. EnableButton( finishButton, IMPORTWIZARD.isFinishButtonEnabled /* bEnable */ );
  1484. }
  1485. G_App.PopulateDimensionsListView = function(treeSnippet)
  1486. {
  1487. var bAliasTableListPopulates = "false";
  1488. G_App.m_oListViewDimensions.F_Clear(); // clear the alias tables list box
  1489. for (var i = 0; i < treeSnippet.node.children.length; i++)
  1490. {
  1491. treeViewNodeData = treeSnippet.node.children[i]
  1492. var nodeLabel = treeViewNodeData.Name;
  1493. var nodeType = treeViewNodeData.Type;
  1494. if (nodeType == "aliasTable")
  1495. {
  1496. var newListItemNode = this.m_oListViewDimensions.F_AppendNewListItem();
  1497. newListItemNode.setAttribute( "value", nodeType );
  1498. newListItemNode.setAttribute( "label", nodeLabel );
  1499. }
  1500. bAliasTableListPopulates = "true";
  1501. }
  1502. G_App.m_oListViewDimensions.F_Draw();
  1503. // enable languages list box if
  1504. if (bAliasTableListPopulates == "true")
  1505. {
  1506. G_App.dissableLanguageBox("false");
  1507. G_App.m_oListViewCheckboxes.F_Draw();
  1508. // select the first alias table
  1509. G_App.selectFirstListBoxItem(G_App.m_oListViewDimensions);
  1510. // populate the languages list box for the selected (first) alias table
  1511. G_App.RepopulateLanguagesListView();
  1512. // select the first language list box item
  1513. // first unselect all because this is multi-selection list box
  1514. G_App.m_oListViewCheckboxes.F_DeselectAll();
  1515. G_App.selectFirstListBoxItem(G_App.m_oListViewCheckboxes);
  1516. G_App.m_oListViewCheckboxes.F_Draw();
  1517. if (IMPORTWIZARD.enableTest == true)
  1518. {
  1519. var dim = "a" + g_dimNum;
  1520. var langs = IMPORTWIZARD.dimAlias[dim];
  1521. // for (var lang in mapAliasMapLang)
  1522. // {
  1523. // G_App.m_oListViewAliasTables.F_DeselectAll();
  1524. // var strAlias = new String(alias);
  1525. // g_aliasNum = strAlias.substr(1);
  1526. // G_App.selectListBoxItem(G_App.m_oListViewAliasTables, g_aliasNum);
  1527. // G_App.m_oListViewAliasTables.F_Draw();
  1528. // // populate the languages list box for the selected (first) alias table
  1529. // G_App.RepopulateLanguagesListView();
  1530. // var langs = mapAliasMapLang[alias];
  1531. for (var lang in langs)
  1532. {
  1533. // "lang" is the name of the language to select
  1534. var nodeListLangs = G_App.m_oListViewCheckboxes.F_GetListItems();
  1535. var numberOfLangs = nodeListLangs.length;
  1536. for ( var i = 0; i < numberOfLangs; i++ )
  1537. {
  1538. var la = nodeListLangs.item( i );
  1539. langName = la.getAttribute("label");
  1540. if (langName == lang)
  1541. {
  1542. la.setAttribute("checked", "true");
  1543. G_App.F_ListView_OnCheckboxClick( G_App.m_oListViewCheckboxes, la, null );
  1544. break;
  1545. }
  1546. }
  1547. G_App.m_oListViewCheckboxes.F_Draw();
  1548. }
  1549. G_App.m_oListViewCheckboxes.F_Draw();
  1550. // }
  1551. }
  1552. }
  1553. else
  1554. {
  1555. // no alias tables
  1556. // Clear all check boxes
  1557. G_App.m_oListViewCheckboxes.F_UncheckAll();
  1558. G_App.m_oListViewCheckboxes.F_DeselectAll();
  1559. G_App.m_oListViewCheckboxes.F_Draw();
  1560. G_App.dissableLanguageBox("true");
  1561. G_App.m_oListViewCheckboxes.F_Draw();
  1562. }
  1563. };
  1564. // The argument is "true" or "false"
  1565. G_App.dissableLanguageBox = function(bEnable)
  1566. {
  1567. var nl = G_App.m_oListViewCheckboxes.F_GetListItems();
  1568. for ( var i = 0; i < nl.length; i++ )
  1569. {
  1570. var v_nListItem = nl.item( i );
  1571. v_nListItem.setAttribute( "staticCheckbox", bEnable );
  1572. }
  1573. }
  1574. //
  1575. G_App.selectFirstListBoxItem = function(listBoxView)
  1576. {
  1577. var v_nlListItems = listBoxView.F_GetListViewNode().selectNodes( "listItems/listItem" );
  1578. if (v_nlListItems != null && v_nlListItems.length > 0)
  1579. {
  1580. var v_nListItem = v_nlListItems.item( 0 );
  1581. v_nListItem.setAttribute( "selected", "true" );
  1582. }
  1583. }
  1584. // select a given item from the listbox view
  1585. // itemNumber = integer (zero based)
  1586. G_App.selectListBoxItem = function(listBoxView, itemNumber)
  1587. {
  1588. var v_nlListItems = listBoxView.F_GetListViewNode().selectNodes( "listItems/listItem" );
  1589. if (v_nlListItems != null && v_nlListItems.length > 0)
  1590. {
  1591. if (itemNumber < v_nlListItems.length)
  1592. {
  1593. var v_nListItem = v_nlListItems.item( itemNumber );
  1594. v_nListItem.setAttribute( "selected", "true" );
  1595. }
  1596. }
  1597. }
  1598. function HandleException(jsonExceptionObj)
  1599. {
  1600. hideProgressIfShowing();
  1601. var errorPageMgr = new ErrorPageManager();
  1602. if (jsonExceptionObj.isQF)
  1603. {
  1604. document.getElementById( "main" ).style.display = "none";
  1605. errorPageMgr.handleQF(jsonExceptionObj.faultDom, ErrorPageClosed);
  1606. }
  1607. else if (jsonExceptionObj.isCAM)
  1608. {
  1609. document.getElementById( "main" ).style.display = "none";
  1610. errorPageMgr.handleCAM(jsonExceptionObj, ErrorPageClosed);
  1611. }
  1612. else
  1613. {
  1614. var msg = jsonExceptionObj.messageString;
  1615. if (msg === "")
  1616. {
  1617. msg = localizedStrings["MSR_SAP_unknownErrorMessage"];
  1618. }
  1619. var stackTrace = jsonExceptionObj.stackTrace;
  1620. stackTrace = unescape(stackTrace);
  1621. document.getElementById( "main" ).style.display = "none";
  1622. document.getElementById( "editSelection" ).style.display = "none"
  1623. errorPageMgr.setupAndDisplayErrorPage(localizedStrings["MSR_SAP_errorPageTitle"], "",
  1624. msg, stackTrace, ErrorPageClosed);
  1625. }
  1626. }
  1627. function ErrorPageClosed(recovered)
  1628. {
  1629. document.getElementById("main").style.display = "block";
  1630. // If its been recovered, then we presume that call back will occur at a later time
  1631. if (IMPORTWIZARD.onResumeFromNonRecoverableError && !recovered){
  1632. IMPORTWIZARD.onResumeFromNonRecoverableError();
  1633. }
  1634. }
  1635. function launchFromEdit()
  1636. {
  1637. var selectMetadataRadioBtn = document.getElementById( "modifyMetadataSelections" );
  1638. var editVariablesRadioBtn = document.getElementById( "editVariables" );
  1639. var modifySettingsRadioBtn = document.getElementById( "modifySettings" );
  1640. var editSelectionPage = document.getElementById( "editSelection" );
  1641. if (selectMetadataRadioBtn.checked)
  1642. {
  1643. editSelectionPage.style.display = "none";
  1644. var main = document.getElementById( "main" );
  1645. main.style.display = "block";
  1646. retrieveImportSpec();
  1647. }
  1648. else if (editVariablesRadioBtn.checked)
  1649. {
  1650. editSelectionPage.style.display = "none";
  1651. OnShowVariables();
  1652. }
  1653. else if (modifySettingsRadioBtn.checked)
  1654. {
  1655. SaveModifiedSettings();
  1656. }
  1657. }
  1658. function ImportHelper(importSpec, parameters, packageInfo)
  1659. {
  1660. this.m_importSpec = importSpec;
  1661. this.m_parameters = parameters;
  1662. this.m_packageInfo = packageInfo;
  1663. }
  1664. ImportHelper.prototype.runImport = function()
  1665. {
  1666. var importRequestURL = GATEWAY_URL + "/metadataUIService"
  1667. this.m_requestId = new Date().getTime();
  1668. var importRequestPostParams = {};
  1669. if (IMPORTWIZARD.enableTestNoDBConnection)
  1670. importRequestPostParams["pid"] = "OLAPImportWizard_Import_TEST_pid";
  1671. else
  1672. importRequestPostParams["pid"] = "OLAPImportWizard_Import_pid";
  1673. importRequestPostParams["importSpec"] = this.m_importSpec;
  1674. importRequestPostParams["parameters"] = this.m_parameters;
  1675. importRequestPostParams["packageInfo"] = this.m_packageInfo;
  1676. importRequestPostParams["requestId"] = this.m_requestId;
  1677. importRequestPostParams["dataSourceCredentials"] = IMPORTWIZARD.credentials;
  1678. importRequestPostParams["error_pid"] = asyncErrorPagePid;
  1679. if (IMPORTWIZARD.enableTest == true)
  1680. {
  1681. importRequestPostParams["enableTest"] = "true";
  1682. }
  1683. urlRequestInvoker.MakeAsyncRequestInIFrame( importRequestURL, importRequestPostParams );
  1684. }