[CLAMP-1] Initial ONAP CLAMP seed code commit
[clamp.git] / src / main / resources / META-INF / resources / designer / scripts / ActivityModellingCtrl.js
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights
6  *                             reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License"); 
9  * you may not use this file except in compliance with the License. 
10  * You may obtain a copy of the License at
11  * 
12  * http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software 
15  * distributed under the License is distributed on an "AS IS" BASIS, 
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
17  * See the License for the specific language governing permissions and 
18  * limitations under the License.
19  * ============LICENSE_END============================================
20  * ===================================================================
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23
24 app.directive( "contextMenu", function($compile){
25     console.log("contextMenu");
26     contextMenu = {};
27     contextMenu.restrict = "AE";
28     contextMenu.link = function( lScope, lElem, lAttr ){
29         console.log("link");
30         lElem.on("contextmenu", function (e) {
31             console.log("contextmenu");
32             e.preventDefault(); 
33             lElem.append( $compile( lScope[ lAttr.contextMenu ])(lScope) );
34             $("#contextmenu-node").css("left", e.clientX);
35             $("#contextmenu-node").css("top", e.clientY);            
36         });
37         lElem.on("mouseleave", function(e){
38             console.log("mouseleave");
39             if($("#contextmenu-node") )
40                 $("#contextmenu-node").remove();
41         });
42         lElem.on("click", function(e){
43         console.log("click"); 
44             if($("#contextmenu-node") )
45                 $("#contextmenu-node").remove();
46         });
47     };
48     return contextMenu;
49 });
50
51 app.directive('ngRightClick', function($parse) {
52     console.log("ngRightClick");
53     console.log("ngRightClick");
54     return function(scope, element, attrs) {
55         console.log("returnfunction");
56         var fn = $parse(attrs.ngRightClick);
57         element.bind('contextmenu', function(event) {
58             console.log("contextmenu");
59             scope.$apply(function() {
60                 console.log("apply");
61                 event.preventDefault();
62                 fn(scope, {$event:event});
63             });
64         });
65     };
66 });
67
68 app.directive('inputInfoClass', function ($compile) {
69     console.log("inputInfoClass");
70   return {
71       restrict: "C",
72       replace: true,
73       link: function(scope,element,attrs){
74         console.log("link");
75           var elementHTML = '';
76           scope.sourceExplorer = 'AM';
77           angular.forEach(scope.infoType.schemaElements, function(value, key){
78             console.log("schemaElement");
79                   
80                   scope.schemaElement = value;
81                   
82                   if(scope.schemaElement.complexType != null){
83                           if(scope.currentElementName == ''){
84                                   scope.currentElementName = scope.schemaElement.complexType.name;
85                           }
86                           
87                           scope.ParentKey = scope.parentName + '_' + scope.currentElementName;
88                           if(scope.schemaElement.repeatableHierarchicalPrefix != null){
89                                   scope.ParentKey = scope.ParentKey + scope.schemaElement.repeatableHierarchicalPrefix; 
90                           }
91                           scope.parElement = scope.schemaElement;
92                           scope.tableStyle = 'table-level' + scope.heirarchyLevel + '-tree'; 
93                           scope.tdLabelStyle = 'td-level' + scope.heirarchyLevel + '-label-tree'; 
94                           scope.heirLevel = scope.heirarchyLevel;
95                           
96                           elementHTML = elementHTML + '<div ng-show="schemaElement.complexType != null">';
97                           elementHTML = elementHTML + '<table class="{{tableStyle}}"> <tr>';
98                           elementHTML = elementHTML + '<td class="{{tdLabelStyle}}">';
99                           elementHTML = elementHTML + '<span class="pull-left" ng-click="showUTMViewMsgHeader=!showUTMViewMsgHeader">';
100                           elementHTML = elementHTML + '<i ng-class="showUTMViewMsgHeader == true ?\'fa fa-plus-circle\':\'fa fa-minus-circle\'"></i>';
101                           elementHTML = elementHTML + '</span>';
102                           elementHTML = elementHTML + '<b>{{currentElementName}}</b>';
103                           elementHTML = elementHTML + '</td>';
104                           elementHTML = elementHTML + '<td class="td-tree"></td>';
105                           elementHTML = elementHTML + '<td class="td-tree"></td>';
106                           elementHTML = elementHTML + '<td class="td-tree"></td>';
107                           elementHTML = elementHTML + '<td class="td-blank"></td>';
108                           elementHTML = elementHTML + '<td class="td-default_value-tree"> </td>';
109                           elementHTML = elementHTML + '</tr></table>';
110                           elementHTML = elementHTML + '<div style="margin-left: 10px" ng-class="{hidden:showUTMViewMsgHeader,chaldean:showUTMViewMsgHeader}">';
111                           elementHTML = elementHTML + '<div class="inputInfoClassMember" style="margin-left: 10px" ng-repeat="schemaElement in schemaElement.elements"></div>';
112                           elementHTML = elementHTML + '</div>';
113                           elementHTML = elementHTML + '</div>';
114                           var x = angular.element(elementHTML);
115                         element.append(x);
116                         $compile(x)(scope);
117                   }
118               });
119           
120       }
121   }
122 });
123
124 app.directive('inputInfoClassMember', function ($compile, $timeout) {
125     console.log("inputInfoClassMember");
126   return {
127       restrict: "C",
128
129       link: function(scope,element,attrs){
130         console.log("link");
131           
132           var elementHTML = '';
133           
134           scope.currentElementName=scope.objectName;
135           scope.parentName=scope.ParentKey; 
136           scope.parentElement=scope.parElement; 
137           scope.heirarchyLevel = scope.heirLevel + 1;
138           if(scope.schemaElement.element.name != null){
139                   
140                   scope.elementKey=scope.parentName + '_' + scope.schemaElement.element.name;
141                   if(scope.schemaElement.repeatableHierarchicalPrefix != null){
142                           scope.elementKey = scope.elementKey + scope.schemaElement.repeatableHierarchicalPrefix;
143                   }
144                   scope.tableStyle='table-level' + scope.heirarchyLevel + '-tree'; 
145                   scope.tdLabelStyle='td-level' + scope.heirarchyLevel +'-label-tree';
146                   
147                   if(scope.schemaElement.type.complexType != null){
148                           scope.showUTMViewMsgHeader = false;
149                           
150                   }else{
151                           scope.showUTMViewMsgHeader = true;
152                           if(scope.schemaElement.element.simpleType != null){
153                                   if(scope.schemaElement.element.simpleType.restriction != null){
154                                           if(scope.schemaElement.element.simpleType.restriction.minExclusivesAndMinInclusivesAndMaxExclusives != null){
155                                                   angular.forEach(scope.schemaElement.element.simpleType.restriction.minExclusivesAndMinInclusivesAndMaxExclusives, function(value, key){
156                                                          if(value.name!=null){
157                                                                  if((value.name).indexOf('enumeration') > -1){
158                                                                          scope.showUTMViewMsgHeader = false;
159                                                                  }
160                                                          }
161                                                   });
162                                           }
163                                   }
164                           }
165                   }
166                   
167                   elementHTML = elementHTML + '<div ng-show="schemaElement.element.name != null">';
168                   elementHTML = elementHTML + '<div id="elementKey">';
169                   elementHTML = elementHTML + '<table class="{{tableStyle}}"> ';
170                   elementHTML = elementHTML + '<tr>';
171                   elementHTML = elementHTML + '<td style="text-align: left;vertical-align: top;" class="{{tdLabelStyle}}">';
172                   elementHTML = elementHTML + '<div ng-mouseover="getContextMenu(schemaElement,elementKey)" context-menu="myContextDiv">';
173                   elementHTML = elementHTML + '<span class="pull-left" ng-click="showUTMViewMsgHeader=!showUTMViewMsgHeader" ng-style="(schemaElement.type.recursive ||schemaElement.list) && {\'color\':\'#0000FF\'} || {\'color\': \'#444444\'}">';
174                   elementHTML = elementHTML + '<i expandable ng-class="showUTMViewMsgHeader == true ?\'fa fa-minus-circle\':\'fa fa-plus-circle\'"></i>';
175                   elementHTML = elementHTML + '{{schemaElement.element.name}}  ';
176                   elementHTML = elementHTML + '';
177                   elementHTML = elementHTML + '';
178                   elementHTML = elementHTML + '';
179                   elementHTML = elementHTML + '';
180                   elementHTML = elementHTML + '</span>';
181                   elementHTML = elementHTML + '</div>';
182                   elementHTML = elementHTML + '</td>';
183                   
184                   if(scope.repeatableHeirarchicalElementMap !=null){
185                           elementHTML = elementHTML + '<div ng-if= "repeatableHeirarchicalElementMap !=null">';
186                           elementHTML = elementHTML + '<div ng-if="repeatableHeirarchicalElementMap[elementKey] != null">';
187                           elementHTML = elementHTML + '<div ng-repeat="repeatableElement in repeatableHeirarchicalElementMap[elementKey].repeatableElements">';
188                           elementHTML = elementHTML + '<div ng-init="addRepeatableElement1(schemaElement, parentElement, elementKey, $index)"></div>';
189                           elementHTML = elementHTML + '</div>';
190                           elementHTML = elementHTML + '<div ng-repeat="heirarchicalElement in repeatableHeirarchicalElementMap[elementKey].heirarchicalElements">';
191                           elementHTML = elementHTML + '</div>';
192                           elementHTML = elementHTML + '<div ng-init="addHierarchicalElement1(schemaElement, parentElement, elementKey, $index)"></div>';
193                           elementHTML = elementHTML + '</div>';
194                           elementHTML = elementHTML + '</div>';
195                   }
196                   
197                   elementHTML = elementHTML + '<td class="td-blank"></td>';
198                   elementHTML = elementHTML + '<td style="text-align: right;" class="td-tree">';
199                   if(scope.schemaElement.type.complexType == null){
200                           elementHTML = elementHTML + '<div><input type="checkbox" id="{{elementKey + \'_checkbox\'}}" ng-model="utmModelSchemaExtension.utmSchemaExtentionMap[elementKey].checked" ng-init="requiredValues[elementKey]=schemaElement.element.minOccurs;utmModelSchemaExtension.utmSchemaExtentionMap[elementKey].checked=(utmModelSchemaExtension.radioSelection == \'Required Only\' && schemaElement.element.minOccurs !=0) || utmModelSchemaExtension.radioSelection == \'Select All\' || utmModelSchemaExtension.utmSchemaExtentionMap[elementKey].checked" ng-change="onChange()"/></div>'
201                   }
202                   
203                   elementHTML = elementHTML + '</td>';
204                   elementHTML = elementHTML + '<td style="text-align:center;word-wrap: break-word" class="td-default_value-tree"><label id="{{elementKey + \'_label\'}}"/>{{utmModelSchemaExtension.utmSchemaExtentionMap[elementKey].defaultValue}}</td>';
205                   elementHTML = elementHTML + '</tr>';
206                   elementHTML = elementHTML + '</table>';
207                   elementHTML = elementHTML + '<div style="margin-left: 10px" ng-class="{hidden:!showUTMViewMsgHeader,chaldean:!showUTMViewMsgHeader}">';
208                   
209                   if(scope.schemaElement.type != null && scope.schemaElement.type.restriction != null){
210                           elementHTML = elementHTML + '<div ng-if = "schemaElement.type != null && schemaElement.type.restriction != null">';
211                           elementHTML = elementHTML + '<div ng-repeat="object in filteredObjects = (schemaElement.type.restriction.minExclusivesAndMinInclusivesAndMaxExclusives | filter: {name : \'enumeration\'})">';
212                           elementHTML = elementHTML + '{{object.value.value}}';
213                           elementHTML = elementHTML + '</div>';
214                           elementHTML = elementHTML + '</div>';
215                   }
216                   
217                   elementHTML = elementHTML + '</div>';
218                   elementHTML = elementHTML + '';
219                   elementHTML = elementHTML + '';
220                   elementHTML = elementHTML + '';
221                   elementHTML = elementHTML + '</div>';
222                   elementHTML = elementHTML + '</div>';
223                   
224                   var x = angular.element(elementHTML);
225                 element.append(x);
226                 $compile(x)(scope);
227                 
228                   
229                   if(scope.schemaElement.type.complexType != null){
230                           if(scope.schemaElement.repeatableHierarchicalPrefix!=null){
231                           }
232                           var elementHTML2 = '<div ng-show="schemaElement.type.complexType != null">'
233                           elementHTML2 = elementHTML2 + '<div ng-init="parKey=parentName + \'_\' + schemaElement.element.name + (schemaElement.repeatableHierarchicalPrefix != null ? schemaElement.repeatableHierarchicalPrefix : \'\'); heirLevel=heirarchyLevel; parElement=schemaElement; ParentKey=ParentKey+\'_\'+schemaElement.element.name + (schemaElement.repeatableHierarchicalPrefix != null ? schemaElement.repeatableHierarchicalPrefix : \'\');">'
234                           elementHTML2 = elementHTML2 + '<div style="margin-left: 10px" ng-class="{hidden:!showUTMViewMsgHeader,chaldean:!showUTMViewMsgHeader}">'
235                           if(scope.schemaElement.repeatableHierarchicalPrefix!=null){
236                                   elementHTML2 = elementHTML2 + '<div id="{{parKey}}"></div>'
237                           }else{
238                                   elementHTML2 = elementHTML2 + '<div id="{{parKey}}"></div>'
239                           }
240                           elementHTML2 = elementHTML2 + '</div>'
241                           elementHTML2 = elementHTML2 + '</div>'
242                           elementHTML2 = elementHTML2 + '</div>';
243                           var x = angular.element(elementHTML2);
244                         element.append(x);
245                         $compile(x)(scope);
246                   }
247                   
248           }
249           
250       }
251   }
252   
253   
254 });
255
256 app.directive('expandable', function ($compile) {
257     console.log("expandable");
258   return {
259       restrict: "AE",
260       link: function(scope,element,attrs){
261         console.log("link");
262           var elementHTML = '';
263           element.bind("click", function(){
264             console.log("bindclick");
265                  //console.log('directive clicked!!!');
266                  //console.log(scope.sourceExplorer);
267                  //console.log(scope.parKey);
268                  
269                  var test1 = document.getElementById(scope.parKey);
270                  
271                  if(test1 != null){
272                          if((test1.getElementsByTagName('div') != null)&&(scope.schemaElement.type.elements != null)){
273                  
274                                  var htmlCount = test1.getElementsByTagName('div').length;
275                                  var schemaElementCount = scope.schemaElement.type.elements.length;
276                                  //console.log(htmlCount);
277                                  //console.log(schemaElementCount);
278                                  
279                                  if(htmlCount<schemaElementCount){
280                                          var x = angular.element(test1).append('<div class="inputInfoClassMember" style="margin-left: 10px" ng-repeat="schemaElement in schemaElement.type.elements" ng-init="currentElementName=schemaElement.element.name;parentName=parKey; parentElement=parElement; heirarchyLevel=heirLevel+1 ;"></div>');
281                                      $compile(x)(angular.element('#'+scope.parKey).scope());
282                                  }
283                          }
284                  }
285                  
286                  var cElements = document.getElementsByClassName(scope.sourceExplorer+'_'+scope.parKey);
287                  if(cElements != null){
288                          
289                          for(var i=0; i<cElements.length; i++) {
290                                  if((cElements[i].getElementsByTagName('div') != null)&&(scope.schemaElement.type.elements != null)){
291                                          var htmlCount = cElements[i].getElementsByTagName('div').length;
292                                  var schemaElementCount = scope.schemaElement.type.elements.length;
293                                  //console.log(htmlCount);
294                                  //console.log(schemaElementCount);
295                                  //console.log(cElements[i]);
296                                  if(htmlCount<schemaElementCount){
297                                          var x = '';
298                                          if(scope.sourceExplorer=='SDV'){
299                                                  x = angular.element(cElements[i]).append('<div class="inputInfoDVClassMember" style="margin-left: 10px" ng-repeat="schemaElement in schemaElement.type.elements" ng-init="currentElementName=schemaElement.element.name;parentName=parKey; parentElement=parElement; heirarchyLevel=heirLevel+1 ;"></div>');
300                                          }else if(scope.sourceExplorer=='PE'){
301                                                  x = angular.element(cElements[i]).append('<div class="inputInfoPropertyClassMember" style="margin-left: 10px" ng-repeat="schemaElement in schemaElement.type.elements" ng-init="currentElementName=schemaElement.element.name;parentName=parKey; parentElement=parElement; heirarchyLevel=heirLevel+1 ;"></div>');
302                                          }else if(scope.sourceExplorer=='USU'||scope.sourceExplorer=='USC'){
303                                                  x = angular.element(cElements[i]).append('<div class="inputInfoUpgradeClassMember" style="margin-left: 10px" ng-repeat="schemaElement in schemaElement.type.elements" ng-init="currentElementName=schemaElement.element.name;parentName=parKey; parentElement=parElement; heirarchyLevel=heirLevel+1 ;"></div>');
304                                          }
305                                          
306                                      $compile(x)(angular.element('.'+scope.sourceExplorer+'_'+scope.parKey).scope());
307                                  }
308                                  }
309                          }
310                  }
311           });
312       }
313   }
314 });
315
316
317 app.controller('ActivityModellingCtrl', ['$scope', '$rootScope', '$location','dialogs', '$filter','Datafactory','soapRequestService', function($scope,$rootScope, $location,dialogs,$filter,Datafactory,soapRequestService){
318         
319         console.log("ActivityModellingCtrl");
320         $scope.count=0;
321         $scope.depth=0;
322         $scope.parentElementList=[];
323         $scope.schemaElementKeyMap={};
324         $scope.isVisible = false;
325         $rootScope.countElementKeyMap={};
326         $rootScope.depthElementKeyMap={};
327         $rootScope.isHorR = true;
328         $rootScope.requiredValues = {};
329         
330         $scope.utmModelSchemaExtension = {};
331         $rootScope.repeatableHeirarchicalElementMap = {};
332         
333         
334         
335
336         $rootScope.initProjectExplorer = function () {
337                 console.log("initProjectExplorer");
338                 if(map_model_repeatable_heirarchical_elements[selected_model] != null) {
339                         $rootScope.repeatableHeirarchicalElementMap = map_model_repeatable_heirarchical_elements[selected_model];
340                         ////console.log("$scope.repeatableHeirarchicalElementMap :: " + $rootScope.repeatableHeirarchicalElementMap);
341                 }
342                         
343                 
344                 ////console.log("$rootScope.utmModelSchemaExtension :: " + JSON.stringify(list_model_schema_extensions[selected_model]));
345                 if(list_model_schema_extensions[selected_model] != null) {
346                         $scope.utmModelSchemaExtension = list_model_schema_extensions[selected_model];
347                         if($scope.utmModelSchemaExtension.radioSelection == null || $scope.utmModelSchemaExtension.radioSelection == '')
348                                 $scope.utmModelSchemaExtension.radioSelection = 'Required Only';
349                 }
350         };
351         
352         $rootScope.initProjectExplorer();
353         
354         $scope.onChange= function(){
355         console.log("onChange");
356                 
357                 list_model_schema_extensions[selected_model] = $scope.utmModelSchemaExtension;
358                 
359         };
360         
361         $rootScope.requiredOnly = function(){
362         console.log("requiredOnly");
363                 for (var key in $scope.utmModelSchemaExtension.utmSchemaExtentionMap) {
364                         
365                         ////console.log(key);
366                         
367                         if ($scope.utmModelSchemaExtension.utmSchemaExtentionMap.hasOwnProperty(key)) {                         
368                                 //$scope.utmModelSchemaExtension.utmSchemaExtentionMap[key].checked = $scope.utmModelSchemaExtension.radioSelection == "Required Only" && $rootScope.requiredValues[key] != 0;
369                                 $scope.utmModelSchemaExtension.utmSchemaExtentionMap[key].checked =  $rootScope.requiredValues[key] != 0;
370                         }
371                 }
372                 angular.forEach($scope.utmModelSchemaExtension.utmSchemaExtentionMap, function(value, key) {
373             console.log("forEach");
374                           //console.log(key + ': ' + value);
375                 });
376         };
377         
378         $rootScope.selectAll = function(){
379         console.log("selectAll");
380                 for (var key in $scope.utmModelSchemaExtension.utmSchemaExtentionMap) {
381                         
382                         if ($scope.utmModelSchemaExtension.utmSchemaExtentionMap.hasOwnProperty(key)) {
383                                 
384                                 $scope.utmModelSchemaExtension.utmSchemaExtentionMap[key].checked = true;
385                                 
386                         }
387                 }
388         };
389         
390         
391         $rootScope.unSelectAll = function(){
392         console.log("unSelectAll");
393                 for (var key in $scope.utmModelSchemaExtension.utmSchemaExtentionMap) {
394                         
395                         if ($scope.utmModelSchemaExtension.utmSchemaExtentionMap.hasOwnProperty(key)) {
396                                 
397                                 $scope.utmModelSchemaExtension.utmSchemaExtentionMap[key].checked = false;
398                                 
399                         }
400                 }
401         };
402         
403 /*      $scope.generatedXML = function(xmlValue){
404         $scope.generatedXMLVal=xmlValue;
405         var dlg = dialogs.create('partials/portfolios/generatedXML.html','generateXMLCtrl',{},{size:'lg',keyboard: true,backdrop: true,windowClass: 'my-class'});
406                 
407     };*/
408         
409         //Functionality for Hierarchical Elements
410         $scope.addHierarchicalElement1 = function(schemaElement, parentElement, elementKey, index){
411         console.log("addHeirarchicalElement1");
412                 if($rootScope.isHorR){
413                 //console.log("Entering addHeirarchicalElement1");
414                 $scope.clonedSchemaElement={};
415                 angular.copy(schemaElement, $scope.clonedSchemaElement);
416                 
417                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
418                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
419                 
420                 //Remove any Heirarchical/Repeatable Elements in the ClonedSchemaElement
421                 for(var i=0;i<schemaElement.type.elements.length;i++) {
422                         if(schemaElement.type.elements[i].element.name.indexOf(schemaElement.element.name) != -1) {
423                                 $scope.clonedSchemaElement.type.elements.splice(i,(schemaElement.type.elements.length-i));
424                                 break;
425                         }
426                 }
427                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = (index+1);
428                 
429                         schemaElement.type.elements.push($scope.clonedSchemaElement);
430                 }
431                 
432         }
433         
434         //Functionality for Hierarchical Elements
435         $scope.addHierarchicalElement = function(schemaElement, parentElement, elementKey){
436         console.log("addHierarchicalElement");
437                 $rootScope.isHorR = false;
438                 $scope.clonedSchemaElement={};
439                 angular.copy(schemaElement, $scope.clonedSchemaElement);
440                 
441                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
442                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
443                 
444                 //Remove any Heirarchical/Repeatable Elements in the ClonedSchemaElement
445                 for(var i=0;i<schemaElement.type.elements.length;i++) {
446                         if(schemaElement.type.elements[i].element.name.indexOf(schemaElement.element.name) != -1) {
447                                 $scope.clonedSchemaElement.type.elements.splice(i,(schemaElement.type.elements.length-i));
448                                 break;
449                         }
450                 }
451                 
452                 schemaElement.type.elements.push($scope.clonedSchemaElement);
453                 
454                 if(list_model_repeatable_heirarchical_elements[selected_model] == null) {
455                         list_model_repeatable_heirarchical_elements[selected_model] = {};
456                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements = [];
457                 }
458                 
459                 if(map_model_repeatable_heirarchical_elements[selected_model] == null)
460                         map_model_repeatable_heirarchical_elements[selected_model] = {};
461                 
462                 if(map_model_repeatable_heirarchical_elements[selected_model][elementKey] == null) {
463                         $scope.repeatableHeirachicalSchemaElement = {};
464                         $scope.repeatableHeirachicalSchemaElement.elementKey = elementKey;
465                         
466                         var count = list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements.length;
467                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[count] = $scope.repeatableHeirachicalSchemaElement;
468                         
469                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "1";
470                         $scope.repeatableHeirachicalSchemaElementChild = {};
471                         $scope.repeatableHeirachicalSchemaElementChild.elementKey = elementKey+'_'+ schemaElement.element.name + $scope.clonedSchemaElement.repeatableHierarchicalPrefix;
472                         
473                         $scope.repeatableHeirachicalSchemaElement.heirarchicalElements = [];
474                         $scope.repeatableHeirachicalSchemaElement.heirarchicalElements[0] = $scope.repeatableHeirachicalSchemaElementChild; 
475                         
476                         map_model_repeatable_heirarchical_elements[selected_model][elementKey] = $scope.repeatableHeirachicalSchemaElement;
477                         map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementChild.elementKey] = $scope.repeatableHeirachicalSchemaElementChild;
478                 } else {
479                         if(map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements == null) {
480                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "1";
481                                 $scope.repeatableHeirachicalSchemaElementChild = {};
482                                 $scope.repeatableHeirachicalSchemaElementChild.elementKey = elementKey+'_'+schemaElement.element.name + $scope.clonedSchemaElement.repeatableHierarchicalPrefix;
483                                 
484                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements = [];
485                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements[0] = $scope.repeatableHeirachicalSchemaElementChild;
486                                 
487                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementChild.elementKey] = $scope.repeatableHeirachicalSchemaElementChild;
488                         } else {
489                                 var count = map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements.length;
490                                 
491                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = ""+(count+1);
492                                 $scope.repeatableHeirachicalSchemaElementChild = {};
493                                 $scope.repeatableHeirachicalSchemaElementChild.elementKey = elementKey+'_'+schemaElement.element.name + $scope.clonedSchemaElement.repeatableHierarchicalPrefix;
494                                 
495                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements[count] = $scope.repeatableHeirachicalSchemaElementChild;
496                                 
497                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementChild.elementKey] = $scope.repeatableHeirachicalSchemaElementChild;
498                         }
499                 }
500         };
501         
502         $scope.addRepeatableElement1 = function(schemaElement, parentElement, elementKey, index){
503         console.log("addRepeatableElement1");
504                 if($rootScope.isHorR == true){
505                 $scope.clonedSchemaElement={};
506                 angular.copy(schemaElement, $scope.clonedSchemaElement);
507                 
508                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
509                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
510                 
511                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix +"-"+(index+1);               
512                 
513                 $scope.childElements = {};
514                 if(parentElement.type != null && parentElement.type.elements != null) {
515                         $scope.childElements = parentElement.type.elements;
516                 } else if (parentElement.elements != null) {
517                         $scope.childElements = parentElement.elements;
518                 }
519                 
520                         if(schemaElement.type.complexType != null){
521                                 for(var i=0;i<$scope.childElements.length;i++){
522                                         if(angular.equals($scope.childElements[i],schemaElement)){      
523                                                 //console.log("Complex Element List Match :" +$scope.childElements[i]);
524                                                 $scope.childElements.splice((i+1),0,$scope.clonedSchemaElement);
525                                                 break;
526                                         }
527                                 }
528                         } else if(schemaElement.element.name !=null) {
529                                 for(var j=0;j<$scope.childElements.length;j++){
530                                         if(angular.equals($scope.childElements[j],schemaElement)){                              
531                                                 //console.log("Element List Match :" +$scope.childElements[j]);                            
532                                                 $scope.childElements.splice((j+1),0,$scope.clonedSchemaElement);                          
533                                                 break;
534                                         }
535                                 }
536                         }
537                         
538                 }
539                 
540         };
541         
542         $scope.getContextMenu = function(schemaElement,elementKey){
543         console.log("getContextMenu");
544                 $scope.myContextDiv ="";
545                 if(schemaElement.type.recursive && schemaElement.list){
546                         if(schemaElement.repeatableHierarchicalPrefix != null){
547                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addHierarchicalElement(schemaElement, parentElement, elementKey)'> Add Hierarchical Element </li><li  class='contextmenu-item'  ng-click='addRepeatableElement(schemaElement, parentElement, elementKey)'> Add Repeatable Element </li><li class='contextmenu-item' ng-click='removeElement(schemaElement, parentElement, elementKey)'>Remove Element</li></ul>";
548                         }else{
549                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addHierarchicalElement(schemaElement, parentElement, elementKey)'> Add Hierarchical Element </li><li  class='contextmenu-item'  ng-click='addRepeatableElement(schemaElement, parentElement, elementKey)'> Add Repeatable Element </li></ul>";
550                         }                       
551                 }else if(schemaElement.type.recursive){
552                         if(schemaElement.repeatableHierarchicalPrefix != null){
553                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addHierarchicalElement(schemaElement, parentElement, elementKey)'> Add Hierarchical Element </li><li class='contextmenu-item' ng-click='removeElement(schemaElement, parentElement, elementKey)'>Remove Element</li></ul>";
554                         }else{
555                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addHierarchicalElement(schemaElement, parentElement, elementKey)'> Add Hierarchical Element </li></ul>";
556                         }
557                 }else if(schemaElement.list){                   
558                         if(schemaElement.repeatableHierarchicalPrefix != null){
559                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addRepeatableElement(schemaElement, parentElement, elementKey)'> Add Repeatable Element </li><li class='contextmenu-item' ng-click='removeElement(schemaElement, parentElement, elementKey)'>Remove Element</li></ul>";
560                         }else{
561                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addRepeatableElement(schemaElement, parentElement, elementKey)'> Add Repeatable Element </li></ul>";
562                         }
563                 }else{
564                         $scope.myContextDiv ="";
565                 }
566                 
567         };
568         
569         $scope.createSubModel = function(utmModels){
570        console.log("createSubModel");           
571                 $scope.mySubModelContext ="";
572                 console.log("utmModels name::"+utmModels.name);
573                 selected_model = utmModels.name ;
574                 changecolor(utmModels.name);
575                 isModelfrmClick = true;         
576                 $scope.mySubModelContext = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='createModel()'> Add Sub Model</li><li class='contextmenu-item'  ng-click='renameModel()'> Rename Model</li></ul>";
577                         
578         };
579         
580         function changecolor(selected_model){
581                 console.log("changecolor");
582                 var i = 0;
583             $(".models").each(function(i){
584             console.log("changecolor");
585             var model_value = $(this).text().trim();
586             if(model_value == selected_model || model_value == ""){
587                 $(this).addClass("selectedcolor");
588             }else {
589                 $(this).removeClass("selectedcolor"); 
590             }  
591                i++; 
592             });
593         };
594                 
595         /*$scope.renameModel = function(){
596         console.log("renameModel");
597                 
598                 console.log("renameModel");
599                 
600                 var dlg = dialogs.create('partials/portfolios/rename_model.html','CreateModelCtrl',{},{size:'lg',keyboard: true,backdrop: true,windowClass: 'my-class'});
601                 dlg.result.then(function(name){ 
602         console.log("dlg.result");                      
603                     
604                 },function(){
605                         console.log("...empty");
606                 });
607                 
608         
609         };*/
610         
611         
612         $scope.addRepeatableElement = function(schemaElement, parentElement, elementKey){ 
613        console.log("addRepeatableElement");             
614                 $rootScope.isHorR = false;
615                 $scope.clonedSchemaElement={};
616                 angular.copy(schemaElement, $scope.clonedSchemaElement);
617
618                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
619                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
620                 
621                 //Remove any Heirarchical/Repeatable Elements in the ClonedSchemaElement
622                 if(schemaElement.type.complexType != null){
623                 for(var i=0;i<schemaElement.type.elements.length;i++) {
624                         if(schemaElement.type.elements[i].element.name.indexOf(schemaElement.element.name) != -1) {
625                                 $scope.clonedSchemaElement.type.elements.splice(i,(schemaElement.type.elements.length-i));
626                                 break;
627                         }
628                 }
629                 }
630                 
631                 $scope.childElements = {};
632                 if(parentElement.type != null && parentElement.type.elements != null) {
633                         $scope.childElements = parentElement.type.elements;
634                 } else if (parentElement.elements != null) {
635                         $scope.childElements = parentElement.elements;
636                 }
637                 
638                 if(schemaElement.type.complexType != null){
639                         for(var i=0;i<$scope.childElements.length;i++){
640                                 if(angular.equals($scope.childElements[i],schemaElement)){      
641                                         //console.log("Complex Element List Match :" +$scope.childElements[i]);
642                                         $scope.childElements.splice((i+1),0,$scope.clonedSchemaElement);
643                                         break;
644                                 }
645                         }
646                 } else if(schemaElement.element.name !=null) {                  
647                         for(var j=0;j<$scope.childElements.length;j++){
648                                 if(angular.equals($scope.childElements[j],schemaElement)){                              
649                                         //console.log("Element List Match :" +$scope.childElements[j]);                            
650                                         $scope.childElements.splice((j+1),0,$scope.clonedSchemaElement);                          
651                                         break;
652                                 }
653                         }
654                 }
655                 
656                 if(list_model_repeatable_heirarchical_elements[selected_model] == null) {
657                         list_model_repeatable_heirarchical_elements[selected_model] = {};
658                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements = [];
659                 }
660                 
661                 if(map_model_repeatable_heirarchical_elements[selected_model] == null)
662                         map_model_repeatable_heirarchical_elements[selected_model] = {};
663                 
664                 if(map_model_repeatable_heirarchical_elements[selected_model][elementKey] == null) {
665                         $scope.repeatableHeirachicalSchemaElement = {};
666                         $scope.repeatableHeirachicalSchemaElement.elementKey = elementKey;
667                         
668                         var count = list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements.length;
669                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[count] = $scope.repeatableHeirachicalSchemaElement;
670
671                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix +"-" + 1;
672                         $scope.repeatableHeirachicalSchemaElementClone = {};
673                         $scope.repeatableHeirachicalSchemaElementClone.elementKey = elementKey +  "-" +1;
674                         
675                         $scope.repeatableHeirachicalSchemaElement.repeatableElements = [];
676                         $scope.repeatableHeirachicalSchemaElement.repeatableElements[0] = $scope.repeatableHeirachicalSchemaElementClone; 
677                         
678                         map_model_repeatable_heirarchical_elements[selected_model][elementKey] = $scope.repeatableHeirachicalSchemaElement;
679                         map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementClone.elementKey] = $scope.repeatableHeirachicalSchemaElementClone;
680                 } else {
681                         if(map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements == null) {
682                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix+"-"+1;
683                                 $scope.repeatableHeirachicalSchemaElementClone = {};
684                                 $scope.repeatableHeirachicalSchemaElementClone.elementKey = elementKey + "-" +1;
685                                 
686                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements = [];
687                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements[0] = $scope.repeatableHeirachicalSchemaElementClone;
688                                 
689                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementClone.elementKey] = $scope.repeatableHeirachicalSchemaElementClone;
690                         } else {
691                                 var count = map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements.length;
692
693                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix+"-"+(count+1);
694                                 $scope.repeatableHeirachicalSchemaElementClone = {};
695                                 $scope.repeatableHeirachicalSchemaElementClone.elementKey = elementKey + "-" + (count+1);
696                                 
697                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements[count] = $scope.repeatableHeirachicalSchemaElementClone;                              
698                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementClone.elementKey] = $scope.repeatableHeirachicalSchemaElementClone;
699                         }
700                 }
701         };
702         $scope.removeElement = function(schemaElement, parentElement, elementKey){
703         console.log("removeElement");
704                 $scope.index =0;                
705                 if(parentElement.type != null && parentElement.type.elements != null) {
706                         $scope.childElements = parentElement.type.elements;
707                 } else if (parentElement.elements != null) {
708                         $scope.childElements = parentElement.elements;
709                 }
710                 
711                 if(schemaElement.type.complexType != null){
712                         for(var i=0;i<$scope.childElements.length;i++){
713                                 if(angular.equals($scope.childElements[i],schemaElement)){      
714                                         //console.log("Complex Element List Match :" +$scope.childElements[i]);
715                                         $scope.childElements.splice(i,1);
716                                         $scope.index =i;
717                                         break;
718                                 }
719                         }
720                 } else if(schemaElement.element.name !=null) {                  
721                         for(var j=0;j<$scope.childElements.length;j++){
722                                 if(angular.equals($scope.childElements[j],schemaElement)){                              
723                                         //console.log("Element List Match :" +$scope.childElements[j]);                            
724                                         $scope.childElements.splice(j,1);       
725                                         $scope.index= j;
726                                         break;
727                                 }
728                         }
729                 }
730                 
731                 /*if(parentElement.complexType != null){
732                          var index = parentElement.elements.indexOf(schemaElement);
733                          parentElement.elements.splice(index, 1);  
734                 }
735                 else{
736                         var index = parentElement.type.elements.indexOf(schemaElement);
737                         parentElement.type.elements.splice(index, 1);   
738                 }*/
739                 
740                 
741                 if(list_model_repeatable_heirarchical_elements[selected_model] != null)
742                  {
743                         for(var i=0;i<list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements.length;i++){
744                                 if(list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[i].elementKey.indexOf(schemaElement.element.name) > -1){
745                                         $scope.removeRepeatableHeirarchicalMap(selected_model,list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[i],elementKey);
746                                 }
747                         }
748                         
749                 }
750                         
751         };      
752         
753         
754         $scope.removeRepeatableHeirarchicalMap= function(modelName,repeatableHeirachicalSchemaElement,elementKey){              
755                 console.log("removeRepeatableHeirarchicalMap");
756         //console.log("child element length:"+$scope.childElements.length);
757                 $scope.repeatableElements = repeatableHeirachicalSchemaElement.repeatableElements;
758                 $scope.heirarchicalElements = repeatableHeirachicalSchemaElement.heirarchicalElements;
759                                 
760                 for(var j=0;j<$scope.repeatableElements.length;j++) {
761                         if(angular.equals($scope.repeatableElements[j].elementKey,elementKey)){                         
762                                 map_model_repeatable_heirarchical_elements[modelName][repeatableHeirachicalSchemaElement.elementKey].repeatableElements.splice(j,1);
763                                 break;
764                         }
765                         
766                         if($scope.repeatableElements[j].repeatableElements.length >0 || $scope.repeatableElements[j].heirarchicalElements.length >0 ){
767                                 if($scope.heirarchicalElements.length == 0){
768                                         $scope.removeRepeatableHeirarchicalMap(modelName,$scope.repeatableElements[j],elementKey);      
769                                 }else{
770                                         
771                                         if($scope.repeatableElements[j].heirarchicalElements.length > 0){
772                                                 for(var i=0 ;i<$scope.repeatableElements[j].heirarchicalElements.length;i++){
773                                                         if(angular.equals($scope.repeatableElements[j].heirarchicalElements[i].elementKey,elementKey)){
774                                                                 $scope.removeRepeatableHeirarchicalMap(modelName,$scope.repeatableElements[j],elementKey);
775                                                         }
776                                                 }
777                                         }
778                                         if($scope.repeatableElements[j].repeatableElements.length > 0){
779                                                 for(var q=0 ;q<$scope.repeatableElements[j].repeatableElements.length;q++){
780                                                         if(angular.equals($scope.repeatableElements[j].repeatableElements[q].elementKey,elementKey)){
781                                                                 $scope.removeRepeatableHeirarchicalMap(modelName,$scope.repeatableElements[j],elementKey);
782                                                         }
783                                                 }
784                                         }
785                                 }
786                         }       
787                 }       
788                 
789                 for(var k=0;k<$scope.heirarchicalElements.length;k++) {                 
790                         if(angular.equals($scope.heirarchicalElements[k].elementKey,elementKey)){
791                                 var count  = $scope.heirarchicalElements[k].repeatableElements.length;
792                                 $scope.childElements.splice($scope.index,count);
793                                 map_model_repeatable_heirarchical_elements[modelName][repeatableHeirachicalSchemaElement.elementKey].heirarchicalElements.splice(k,1);
794                                 break;
795                         }
796                         $scope.removeRepeatableHeirarchicalMap(modelName,$scope.heirarchicalElements[k],elementKey);
797                 }
798                 
799         };
800         
801         
802         
803         //Tst functions
804         
805         
806         //Generate and Download tst
807         $scope.generateTST = function(index){
808                 console.log("generateTST");
809                 Datafactory.setSelectedTestCase($rootScope.modeltestset.activityTestCases[index]);
810                 
811                 var tstInput={};
812                 console.log("inside generateTST() method");
813                 var generateTSTUrl ="/utm-service/soa_integration/generateTST";
814                 var tempActivityTestcase= {};
815                 angular.copy(Datafactory.getSelectedTestCase(),tempActivityTestcase);
816                 
817                 tstInput.activityTestCase = tempActivityTestcase;
818                 
819                 if(tstInput.activityTestCase.version != null){
820                         var newTestCaseName = tstInput.activityTestCase.testCaseName + "_"+ tstInput.activityTestCase.version;
821                         tstInput.activityTestCase.testCaseName = newTestCaseName;
822                         
823                 }
824                         
825                 tstInput.projectPreferenceInfo =  Datafactory.getProjectPreferenceInfo();
826                 tstInput.environmentData =  $rootScope.environmentData;
827                 tstInput.writeFileToolList=Datafactory.getWriteFileDataList();
828                 tstInput.fileStreamWriterList=Datafactory.getFileStreamWriterList();
829                 tstInput.commonPythonScriptList = Datafactory.getCommonPythonScriptList();
830                 
831                 
832                 soapRequestService.generateTst(tstInput, generateTSTUrl)
833                 .then(function(pars) {
834             console.log("pars");
835                         
836                         
837                         var dlg = dialogs.confirm('Message','Do you want to download TST file?');
838                         dlg.result.then(function(btn){
839                 console.log("btn");
840                         $scope.confirmed = 'You confirmed "Yes."';
841                         var downloadTSTUrl ="/utm-service/soa_integration/downloadTST";
842                         
843                         soapRequestService.downloadTst(pars, tstInput.activityTestCase.testCaseName, downloadTSTUrl)
844                         .then(function(results) {
845                 console.log("results");
846                                 
847                                 var sets=results.data;
848                          console.log("Sets value"+sets);            
849                      var headerValue=results.headers;
850                      
851                      var fileName=results.config.data.tstName + ".tst";
852                      console.log("Filename "+fileName);
853                      
854                      var hiddenElement = document.createElement('a');
855                      var objectUrl = URL.createObjectURL(results.data);
856                                 
857                              hiddenElement.href = objectUrl;
858                          hiddenElement.download = fileName;
859                          
860                          hiddenElement.target = '_blank';
861                          document.body.appendChild(hiddenElement);
862                          hiddenElement.click(); 
863                          document.body.removeChild(hiddenElement);
864                          
865                         });
866                         },function(btn){
867                 console.log("btn");
868                         $scope.confirmed = 'You confirmed "No."';
869                         });
870                         
871                 },
872                 function(data) {
873             console.log("data");
874
875                 });
876                 
877                 
878         }
879         
880         //Execute and display tst results
881         /*$scope.executeTst = function(index){
882                 console.log("executeTst");
883                 Datafactory.setSelectedTestCase($rootScope.modeltestset.activityTestCases[index]);
884                 
885                 var tstInput={};
886                 console.log("inside generateTST() method");
887                 var executeTSTUrl ="/utm-service/soa_integration/executeTST";
888                 var tempActivityTestcase= {};
889                 angular.copy(Datafactory.getSelectedTestCase(),tempActivityTestcase);
890                 
891                 tstInput.activityTestCase = tempActivityTestcase;
892                 
893                 if(tstInput.activityTestCase.version != null){
894                         var newTestCaseName = tstInput.activityTestCase.testCaseName + "_"+ tstInput.activityTestCase.version;
895                         tstInput.activityTestCase.testCaseName = newTestCaseName;
896                         
897                 }
898                         
899                 tstInput.projectPreferenceInfo =  Datafactory.getProjectPreferenceInfo();
900                 tstInput.environmentData =  $rootScope.environmentData;
901                 tstInput.writeFileToolList=Datafactory.getWriteFileDataList();
902                 tstInput.fileStreamWriterList=Datafactory.getFileStreamWriterList();
903                 tstInput.commonPythonScriptList = Datafactory.getCommonPythonScriptList();
904                 
905                 
906                 soapRequestService.generateTst(tstInput, executeTSTUrl)
907                 .then(function(pars) {
908             console.log("pars");
909                         
910                         if(pars != null || pars != undefined){
911                         
912                         Datafactory.setExecuteResultset(pars);
913                         
914                         var dlg = dialogs.create('partials/SOA/execute-request.html','executeRequestCtrl',{},{size:'lg',keyboard: true,backdrop: true,windowClass: 'my-class'});
915                         }
916                         else{
917                                 dialogs.error("Some error occured during execution of tst file");
918                         }
919                                 
920                         
921                         });
922                         
923                 
924                 
925                 
926         }*/
927 }]);