importWizardTM1.js 62 KB

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