Remove ECOMP in headers
[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  * 
22  */
23
24 app.directive( "contextMenu", function($compile){
25     
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    
53     return function(scope, element, attrs) {
54        
55         var fn = $parse(attrs.ngRightClick);
56         element.bind('contextmenu', function(event) {
57             
58             scope.$apply(function() {
59                 
60                 event.preventDefault();
61                 fn(scope, {$event:event});
62             });
63         });
64     };
65 });
66
67 app.directive('inputInfoClass', function ($compile) {
68    
69   return {
70       restrict: "C",
71       replace: true,
72       link: function(scope,element,attrs){
73        
74           var elementHTML = '';
75           scope.sourceExplorer = 'AM';
76           angular.forEach(scope.infoType.schemaElements, function(value, key){
77             
78                   
79                   scope.schemaElement = value;
80                   
81                   if(scope.schemaElement.complexType != null){
82                           if(scope.currentElementName == ''){
83                                   scope.currentElementName = scope.schemaElement.complexType.name;
84                           }
85                           
86                           scope.ParentKey = scope.parentName + '_' + scope.currentElementName;
87                           if(scope.schemaElement.repeatableHierarchicalPrefix != null){
88                                   scope.ParentKey = scope.ParentKey + scope.schemaElement.repeatableHierarchicalPrefix; 
89                           }
90                           scope.parElement = scope.schemaElement;
91                           scope.tableStyle = 'table-level' + scope.heirarchyLevel + '-tree'; 
92                           scope.tdLabelStyle = 'td-level' + scope.heirarchyLevel + '-label-tree'; 
93                           scope.heirLevel = scope.heirarchyLevel;
94                           
95                           elementHTML = elementHTML + '<div ng-show="schemaElement.complexType != null">';
96                           elementHTML = elementHTML + '<table class="{{tableStyle}}"> <tr>';
97                           elementHTML = elementHTML + '<td class="{{tdLabelStyle}}">';
98                           elementHTML = elementHTML + '<span class="pull-left" ng-click="showUTMViewMsgHeader=!showUTMViewMsgHeader">';
99                           elementHTML = elementHTML + '<i ng-class="showUTMViewMsgHeader == true ?\'fa fa-plus-circle\':\'fa fa-minus-circle\'"></i>';
100                           elementHTML = elementHTML + '</span>';
101                           elementHTML = elementHTML + '<b>{{currentElementName}}</b>';
102                           elementHTML = elementHTML + '</td>';
103                           elementHTML = elementHTML + '<td class="td-tree"></td>';
104                           elementHTML = elementHTML + '<td class="td-tree"></td>';
105                           elementHTML = elementHTML + '<td class="td-tree"></td>';
106                           elementHTML = elementHTML + '<td class="td-blank"></td>';
107                           elementHTML = elementHTML + '<td class="td-default_value-tree"> </td>';
108                           elementHTML = elementHTML + '</tr></table>';
109                           elementHTML = elementHTML + '<div style="margin-left: 10px" ng-class="{hidden:showUTMViewMsgHeader,chaldean:showUTMViewMsgHeader}">';
110                           elementHTML = elementHTML + '<div class="inputInfoClassMember" style="margin-left: 10px" ng-repeat="schemaElement in schemaElement.elements"></div>';
111                           elementHTML = elementHTML + '</div>';
112                           elementHTML = elementHTML + '</div>';
113                           var x = angular.element(elementHTML);
114                         element.append(x);
115                         $compile(x)(scope);
116                   }
117               });
118           
119       }
120   }
121 });
122
123 app.directive('inputInfoClassMember', function ($compile, $timeout) {
124     
125   return {
126       restrict: "C",
127
128       link: function(scope,element,attrs){
129         
130           
131           var elementHTML = '';
132           
133           scope.currentElementName=scope.objectName;
134           scope.parentName=scope.ParentKey; 
135           scope.parentElement=scope.parElement; 
136           scope.heirarchyLevel = scope.heirLevel + 1;
137           if(scope.schemaElement.element.name != null){
138                   
139                   scope.elementKey=scope.parentName + '_' + scope.schemaElement.element.name;
140                   if(scope.schemaElement.repeatableHierarchicalPrefix != null){
141                           scope.elementKey = scope.elementKey + scope.schemaElement.repeatableHierarchicalPrefix;
142                   }
143                   scope.tableStyle='table-level' + scope.heirarchyLevel + '-tree'; 
144                   scope.tdLabelStyle='td-level' + scope.heirarchyLevel +'-label-tree';
145                   
146                   if(scope.schemaElement.type.complexType != null){
147                           scope.showUTMViewMsgHeader = false;
148                           
149                   }else{
150                           scope.showUTMViewMsgHeader = true;
151                           if(scope.schemaElement.element.simpleType != null){
152                                   if(scope.schemaElement.element.simpleType.restriction != null){
153                                           if(scope.schemaElement.element.simpleType.restriction.minExclusivesAndMinInclusivesAndMaxExclusives != null){
154                                                   angular.forEach(scope.schemaElement.element.simpleType.restriction.minExclusivesAndMinInclusivesAndMaxExclusives, function(value, key){
155                                                          if(value.name!=null){
156                                                                  if((value.name).indexOf('enumeration') > -1){
157                                                                          scope.showUTMViewMsgHeader = false;
158                                                                  }
159                                                          }
160                                                   });
161                                           }
162                                   }
163                           }
164                   }
165                   
166                   elementHTML = elementHTML + '<div ng-show="schemaElement.element.name != null">';
167                   elementHTML = elementHTML + '<div id="elementKey">';
168                   elementHTML = elementHTML + '<table class="{{tableStyle}}"> ';
169                   elementHTML = elementHTML + '<tr>';
170                   elementHTML = elementHTML + '<td style="text-align: left;vertical-align: top;" class="{{tdLabelStyle}}">';
171                   elementHTML = elementHTML + '<div ng-mouseover="getContextMenu(schemaElement,elementKey)" context-menu="myContextDiv">';
172                   elementHTML = elementHTML + '<span class="pull-left" ng-click="showUTMViewMsgHeader=!showUTMViewMsgHeader" ng-style="(schemaElement.type.recursive ||schemaElement.list) && {\'color\':\'#0000FF\'} || {\'color\': \'#444444\'}">';
173                   elementHTML = elementHTML + '<i expandable ng-class="showUTMViewMsgHeader == true ?\'fa fa-minus-circle\':\'fa fa-plus-circle\'"></i>';
174                   elementHTML = elementHTML + '{{schemaElement.element.name}}  ';
175                   elementHTML = elementHTML + '';
176                   elementHTML = elementHTML + '';
177                   elementHTML = elementHTML + '';
178                   elementHTML = elementHTML + '';
179                   elementHTML = elementHTML + '</span>';
180                   elementHTML = elementHTML + '</div>';
181                   elementHTML = elementHTML + '</td>';
182                   
183                   if(scope.repeatableHeirarchicalElementMap !=null){
184                           elementHTML = elementHTML + '<div ng-if= "repeatableHeirarchicalElementMap !=null">';
185                           elementHTML = elementHTML + '<div ng-if="repeatableHeirarchicalElementMap[elementKey] != null">';
186                           elementHTML = elementHTML + '<div ng-repeat="repeatableElement in repeatableHeirarchicalElementMap[elementKey].repeatableElements">';
187                           elementHTML = elementHTML + '<div ng-init="addRepeatableElement1(schemaElement, parentElement, elementKey, $index)"></div>';
188                           elementHTML = elementHTML + '</div>';
189                           elementHTML = elementHTML + '<div ng-repeat="heirarchicalElement in repeatableHeirarchicalElementMap[elementKey].heirarchicalElements">';
190                           elementHTML = elementHTML + '</div>';
191                           elementHTML = elementHTML + '<div ng-init="addHierarchicalElement1(schemaElement, parentElement, elementKey, $index)"></div>';
192                           elementHTML = elementHTML + '</div>';
193                           elementHTML = elementHTML + '</div>';
194                   }
195                   
196                   elementHTML = elementHTML + '<td class="td-blank"></td>';
197                   elementHTML = elementHTML + '<td style="text-align: right;" class="td-tree">';
198                   if(scope.schemaElement.type.complexType == null){
199                           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>'
200                   }
201                   
202                   elementHTML = elementHTML + '</td>';
203                   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>';
204                   elementHTML = elementHTML + '</tr>';
205                   elementHTML = elementHTML + '</table>';
206                   elementHTML = elementHTML + '<div style="margin-left: 10px" ng-class="{hidden:!showUTMViewMsgHeader,chaldean:!showUTMViewMsgHeader}">';
207                   
208                   if(scope.schemaElement.type != null && scope.schemaElement.type.restriction != null){
209                           elementHTML = elementHTML + '<div ng-if = "schemaElement.type != null && schemaElement.type.restriction != null">';
210                           elementHTML = elementHTML + '<div ng-repeat="object in filteredObjects = (schemaElement.type.restriction.minExclusivesAndMinInclusivesAndMaxExclusives | filter: {name : \'enumeration\'})">';
211                           elementHTML = elementHTML + '{{object.value.value}}';
212                           elementHTML = elementHTML + '</div>';
213                           elementHTML = elementHTML + '</div>';
214                   }
215                   
216                   elementHTML = elementHTML + '</div>';
217                   elementHTML = elementHTML + '';
218                   elementHTML = elementHTML + '';
219                   elementHTML = elementHTML + '';
220                   elementHTML = elementHTML + '</div>';
221                   elementHTML = elementHTML + '</div>';
222                   
223                   var x = angular.element(elementHTML);
224                 element.append(x);
225                 $compile(x)(scope);
226                 
227                   
228                   if(scope.schemaElement.type.complexType != null){
229                           if(scope.schemaElement.repeatableHierarchicalPrefix!=null){
230                           }
231                           var elementHTML2 = '<div ng-show="schemaElement.type.complexType != null">'
232                           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 : \'\');">'
233                           elementHTML2 = elementHTML2 + '<div style="margin-left: 10px" ng-class="{hidden:!showUTMViewMsgHeader,chaldean:!showUTMViewMsgHeader}">'
234                           if(scope.schemaElement.repeatableHierarchicalPrefix!=null){
235                                   elementHTML2 = elementHTML2 + '<div id="{{parKey}}"></div>'
236                           }else{
237                                   elementHTML2 = elementHTML2 + '<div id="{{parKey}}"></div>'
238                           }
239                           elementHTML2 = elementHTML2 + '</div>'
240                           elementHTML2 = elementHTML2 + '</div>'
241                           elementHTML2 = elementHTML2 + '</div>';
242                           var x = angular.element(elementHTML2);
243                         element.append(x);
244                         $compile(x)(scope);
245                   }
246                   
247           }
248           
249       }
250   }
251   
252   
253 });
254
255 app.directive('expandable', function ($compile) {
256     
257   return {
258       restrict: "AE",
259       link: function(scope,element,attrs){
260         
261           var elementHTML = '';
262           element.bind("click", function(){
263                  
264                  var test1 = document.getElementById(scope.parKey);
265                  
266                  if(test1 != null){
267                          if((test1.getElementsByTagName('div') != null)&&(scope.schemaElement.type.elements != null)){
268                  
269                                  var htmlCount = test1.getElementsByTagName('div').length;
270                                  var schemaElementCount = scope.schemaElement.type.elements.length;
271                                  
272                                  if(htmlCount<schemaElementCount){
273                                          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>');
274                                      $compile(x)(angular.element('#'+scope.parKey).scope());
275                                  }
276                          }
277                  }
278                  
279                  var cElements = document.getElementsByClassName(scope.sourceExplorer+'_'+scope.parKey);
280                  if(cElements != null){
281                          
282                          for(var i=0; i<cElements.length; i++) {
283                                  if((cElements[i].getElementsByTagName('div') != null)&&(scope.schemaElement.type.elements != null)){
284                                          var htmlCount = cElements[i].getElementsByTagName('div').length;
285                                  var schemaElementCount = scope.schemaElement.type.elements.length;
286
287                                  if(htmlCount<schemaElementCount){
288                                          var x = '';
289                                          if(scope.sourceExplorer=='SDV'){
290                                                  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>');
291                                          }else if(scope.sourceExplorer=='PE'){
292                                                  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>');
293                                          }else if(scope.sourceExplorer=='USU'||scope.sourceExplorer=='USC'){
294                                                  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>');
295                                          }
296                                          
297                                      $compile(x)(angular.element('.'+scope.sourceExplorer+'_'+scope.parKey).scope());
298                                  }
299                                  }
300                          }
301                  }
302           });
303       }
304   }
305 });
306
307
308 app.controller('ActivityModellingCtrl', ['$scope', '$rootScope', '$location','dialogs', '$filter','Datafactory','soapRequestService', function($scope,$rootScope, $location,dialogs,$filter,Datafactory,soapRequestService){
309         
310         
311         $scope.count=0;
312         $scope.depth=0;
313         $scope.parentElementList=[];
314         $scope.schemaElementKeyMap={};
315         $scope.isVisible = false;
316         $rootScope.countElementKeyMap={};
317         $rootScope.depthElementKeyMap={};
318         $rootScope.isHorR = true;
319         $rootScope.requiredValues = {};
320         
321         $scope.utmModelSchemaExtension = {};
322         $rootScope.repeatableHeirarchicalElementMap = {};
323         
324         
325         
326
327         $rootScope.initProjectExplorer = function () {
328                 
329                 if(map_model_repeatable_heirarchical_elements[selected_model] != null) {
330                         $rootScope.repeatableHeirarchicalElementMap = map_model_repeatable_heirarchical_elements[selected_model];
331                 }
332                         
333                 
334                 if(list_model_schema_extensions[selected_model] != null) {
335                         $scope.utmModelSchemaExtension = list_model_schema_extensions[selected_model];
336                         if($scope.utmModelSchemaExtension.radioSelection == null || $scope.utmModelSchemaExtension.radioSelection == '')
337                                 $scope.utmModelSchemaExtension.radioSelection = 'Required Only';
338                 }
339         };
340         
341         $rootScope.initProjectExplorer();
342         
343         $scope.onChange= function(){
344         console.log("onChange");
345                 
346                 list_model_schema_extensions[selected_model] = $scope.utmModelSchemaExtension;
347                 
348         };
349         
350         $rootScope.requiredOnly = function(){
351         console.log("requiredOnly");
352                 for (var key in $scope.utmModelSchemaExtension.utmSchemaExtentionMap) {
353                         
354                         if ($scope.utmModelSchemaExtension.utmSchemaExtentionMap.hasOwnProperty(key)) {                         
355                                 $scope.utmModelSchemaExtension.utmSchemaExtentionMap[key].checked =  $rootScope.requiredValues[key] != 0;
356                         }
357                 }
358                 angular.forEach($scope.utmModelSchemaExtension.utmSchemaExtentionMap, function(value, key) {
359             console.log("forEach");
360                 });
361         };
362         
363         $rootScope.selectAll = function(){
364         console.log("selectAll");
365                 for (var key in $scope.utmModelSchemaExtension.utmSchemaExtentionMap) {
366                         
367                         if ($scope.utmModelSchemaExtension.utmSchemaExtentionMap.hasOwnProperty(key)) {
368                                 
369                                 $scope.utmModelSchemaExtension.utmSchemaExtentionMap[key].checked = true;
370                                 
371                         }
372                 }
373         };
374         
375         
376         $rootScope.unSelectAll = function(){
377         console.log("unSelectAll");
378                 for (var key in $scope.utmModelSchemaExtension.utmSchemaExtentionMap) {
379                         
380                         if ($scope.utmModelSchemaExtension.utmSchemaExtentionMap.hasOwnProperty(key)) {
381                                 
382                                 $scope.utmModelSchemaExtension.utmSchemaExtentionMap[key].checked = false;
383                                 
384                         }
385                 }
386         };
387         
388         //Functionality for Hierarchical Elements
389         $scope.addHierarchicalElement1 = function(schemaElement, parentElement, elementKey, index){
390         console.log("addHeirarchicalElement1");
391                 if($rootScope.isHorR){
392
393                 $scope.clonedSchemaElement={};
394                 angular.copy(schemaElement, $scope.clonedSchemaElement);
395                 
396                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
397                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
398                 
399                 //Remove any Heirarchical/Repeatable Elements in the ClonedSchemaElement
400                 for(var i=0;i<schemaElement.type.elements.length;i++) {
401                         if(schemaElement.type.elements[i].element.name.indexOf(schemaElement.element.name) != -1) {
402                                 $scope.clonedSchemaElement.type.elements.splice(i,(schemaElement.type.elements.length-i));
403                                 break;
404                         }
405                 }
406                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = (index+1);
407                 
408                         schemaElement.type.elements.push($scope.clonedSchemaElement);
409                 }
410                 
411         }
412         
413         //Functionality for Hierarchical Elements
414         $scope.addHierarchicalElement = function(schemaElement, parentElement, elementKey){
415         console.log("addHierarchicalElement");
416                 $rootScope.isHorR = false;
417                 $scope.clonedSchemaElement={};
418                 angular.copy(schemaElement, $scope.clonedSchemaElement);
419                 
420                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
421                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
422                 
423                 //Remove any Heirarchical/Repeatable Elements in the ClonedSchemaElement
424                 for(var i=0;i<schemaElement.type.elements.length;i++) {
425                         if(schemaElement.type.elements[i].element.name.indexOf(schemaElement.element.name) != -1) {
426                                 $scope.clonedSchemaElement.type.elements.splice(i,(schemaElement.type.elements.length-i));
427                                 break;
428                         }
429                 }
430                 
431                 schemaElement.type.elements.push($scope.clonedSchemaElement);
432                 
433                 if(list_model_repeatable_heirarchical_elements[selected_model] == null) {
434                         list_model_repeatable_heirarchical_elements[selected_model] = {};
435                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements = [];
436                 }
437                 
438                 if(map_model_repeatable_heirarchical_elements[selected_model] == null)
439                         map_model_repeatable_heirarchical_elements[selected_model] = {};
440                 
441                 if(map_model_repeatable_heirarchical_elements[selected_model][elementKey] == null) {
442                         $scope.repeatableHeirachicalSchemaElement = {};
443                         $scope.repeatableHeirachicalSchemaElement.elementKey = elementKey;
444                         
445                         var count = list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements.length;
446                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[count] = $scope.repeatableHeirachicalSchemaElement;
447                         
448                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "1";
449                         $scope.repeatableHeirachicalSchemaElementChild = {};
450                         $scope.repeatableHeirachicalSchemaElementChild.elementKey = elementKey+'_'+ schemaElement.element.name + $scope.clonedSchemaElement.repeatableHierarchicalPrefix;
451                         
452                         $scope.repeatableHeirachicalSchemaElement.heirarchicalElements = [];
453                         $scope.repeatableHeirachicalSchemaElement.heirarchicalElements[0] = $scope.repeatableHeirachicalSchemaElementChild; 
454                         
455                         map_model_repeatable_heirarchical_elements[selected_model][elementKey] = $scope.repeatableHeirachicalSchemaElement;
456                         map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementChild.elementKey] = $scope.repeatableHeirachicalSchemaElementChild;
457                 } else {
458                         if(map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements == null) {
459                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "1";
460                                 $scope.repeatableHeirachicalSchemaElementChild = {};
461                                 $scope.repeatableHeirachicalSchemaElementChild.elementKey = elementKey+'_'+schemaElement.element.name + $scope.clonedSchemaElement.repeatableHierarchicalPrefix;
462                                 
463                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements = [];
464                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements[0] = $scope.repeatableHeirachicalSchemaElementChild;
465                                 
466                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementChild.elementKey] = $scope.repeatableHeirachicalSchemaElementChild;
467                         } else {
468                                 var count = map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements.length;
469                                 
470                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = ""+(count+1);
471                                 $scope.repeatableHeirachicalSchemaElementChild = {};
472                                 $scope.repeatableHeirachicalSchemaElementChild.elementKey = elementKey+'_'+schemaElement.element.name + $scope.clonedSchemaElement.repeatableHierarchicalPrefix;
473                                 
474                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].heirarchicalElements[count] = $scope.repeatableHeirachicalSchemaElementChild;
475                                 
476                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementChild.elementKey] = $scope.repeatableHeirachicalSchemaElementChild;
477                         }
478                 }
479         };
480         
481         $scope.addRepeatableElement1 = function(schemaElement, parentElement, elementKey, index){
482         console.log("addRepeatableElement1");
483                 if($rootScope.isHorR == true){
484                 $scope.clonedSchemaElement={};
485                 angular.copy(schemaElement, $scope.clonedSchemaElement);
486                 
487                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
488                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
489                 
490                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix +"-"+(index+1);               
491                 
492                 $scope.childElements = {};
493                 if(parentElement.type != null && parentElement.type.elements != null) {
494                         $scope.childElements = parentElement.type.elements;
495                 } else if (parentElement.elements != null) {
496                         $scope.childElements = parentElement.elements;
497                 }
498                 
499                         if(schemaElement.type.complexType != null){
500                                 for(var i=0;i<$scope.childElements.length;i++){
501                                         if(angular.equals($scope.childElements[i],schemaElement)){      
502                                                 $scope.childElements.splice((i+1),0,$scope.clonedSchemaElement);
503                                                 break;
504                                         }
505                                 }
506                         } else if(schemaElement.element.name !=null) {
507                                 for(var j=0;j<$scope.childElements.length;j++){
508                                         if(angular.equals($scope.childElements[j],schemaElement)){                                                         
509                                                 $scope.childElements.splice((j+1),0,$scope.clonedSchemaElement);                          
510                                                 break;
511                                         }
512                                 }
513                         }
514                         
515                 }
516                 
517         };
518         
519         $scope.getContextMenu = function(schemaElement,elementKey){
520         console.log("getContextMenu");
521                 $scope.myContextDiv ="";
522                 if(schemaElement.type.recursive && schemaElement.list){
523                         if(schemaElement.repeatableHierarchicalPrefix != null){
524                                 $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>";
525                         }else{
526                                 $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>";
527                         }                       
528                 }else if(schemaElement.type.recursive){
529                         if(schemaElement.repeatableHierarchicalPrefix != null){
530                                 $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>";
531                         }else{
532                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addHierarchicalElement(schemaElement, parentElement, elementKey)'> Add Hierarchical Element </li></ul>";
533                         }
534                 }else if(schemaElement.list){                   
535                         if(schemaElement.repeatableHierarchicalPrefix != null){
536                                 $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>";
537                         }else{
538                                 $scope.myContextDiv = "<ul id='contextmenu-node' ><li class='contextmenu-item'  ng-click='addRepeatableElement(schemaElement, parentElement, elementKey)'> Add Repeatable Element </li></ul>";
539                         }
540                 }else{
541                         $scope.myContextDiv ="";
542                 }
543                 
544         };
545         
546         $scope.createSubModel = function(utmModels){
547        console.log("createSubModel");           
548                 $scope.mySubModelContext ="";
549                 console.log("utmModels name::"+utmModels.name);
550                 selected_model = utmModels.name ;
551                 changecolor(utmModels.name);
552                 isModelfrmClick = true;         
553                 $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>";
554                         
555         };
556         
557         function changecolor(selected_model){
558                 console.log("changecolor");
559                 var i = 0;
560             $(".models").each(function(i){
561             console.log("changecolor");
562             var model_value = $(this).text().trim();
563             if(model_value == selected_model || model_value == ""){
564                 $(this).addClass("selectedcolor");
565             }else {
566                 $(this).removeClass("selectedcolor"); 
567             }  
568                i++; 
569             });
570         };
571
572         $scope.addRepeatableElement = function(schemaElement, parentElement, elementKey){ 
573        console.log("addRepeatableElement");             
574                 $rootScope.isHorR = false;
575                 $scope.clonedSchemaElement={};
576                 angular.copy(schemaElement, $scope.clonedSchemaElement);
577
578                 if($scope.clonedSchemaElement.repeatableHierarchicalPrefix == null)
579                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = "";
580                 
581                 //Remove any Heirarchical/Repeatable Elements in the ClonedSchemaElement
582                 if(schemaElement.type.complexType != null){
583                 for(var i=0;i<schemaElement.type.elements.length;i++) {
584                         if(schemaElement.type.elements[i].element.name.indexOf(schemaElement.element.name) != -1) {
585                                 $scope.clonedSchemaElement.type.elements.splice(i,(schemaElement.type.elements.length-i));
586                                 break;
587                         }
588                 }
589                 }
590                 
591                 $scope.childElements = {};
592                 if(parentElement.type != null && parentElement.type.elements != null) {
593                         $scope.childElements = parentElement.type.elements;
594                 } else if (parentElement.elements != null) {
595                         $scope.childElements = parentElement.elements;
596                 }
597                 
598                 if(schemaElement.type.complexType != null){
599                         for(var i=0;i<$scope.childElements.length;i++){
600                                 if(angular.equals($scope.childElements[i],schemaElement)){      
601                                         //console.log("Complex Element List Match :" +$scope.childElements[i]);
602                                         $scope.childElements.splice((i+1),0,$scope.clonedSchemaElement);
603                                         break;
604                                 }
605                         }
606                 } else if(schemaElement.element.name !=null) {                  
607                         for(var j=0;j<$scope.childElements.length;j++){
608                                 if(angular.equals($scope.childElements[j],schemaElement)){                              
609                                         //console.log("Element List Match :" +$scope.childElements[j]);                            
610                                         $scope.childElements.splice((j+1),0,$scope.clonedSchemaElement);                          
611                                         break;
612                                 }
613                         }
614                 }
615                 
616                 if(list_model_repeatable_heirarchical_elements[selected_model] == null) {
617                         list_model_repeatable_heirarchical_elements[selected_model] = {};
618                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements = [];
619                 }
620                 
621                 if(map_model_repeatable_heirarchical_elements[selected_model] == null)
622                         map_model_repeatable_heirarchical_elements[selected_model] = {};
623                 
624                 if(map_model_repeatable_heirarchical_elements[selected_model][elementKey] == null) {
625                         $scope.repeatableHeirachicalSchemaElement = {};
626                         $scope.repeatableHeirachicalSchemaElement.elementKey = elementKey;
627                         
628                         var count = list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements.length;
629                         list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[count] = $scope.repeatableHeirachicalSchemaElement;
630
631                         $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix +"-" + 1;
632                         $scope.repeatableHeirachicalSchemaElementClone = {};
633                         $scope.repeatableHeirachicalSchemaElementClone.elementKey = elementKey +  "-" +1;
634                         
635                         $scope.repeatableHeirachicalSchemaElement.repeatableElements = [];
636                         $scope.repeatableHeirachicalSchemaElement.repeatableElements[0] = $scope.repeatableHeirachicalSchemaElementClone; 
637                         
638                         map_model_repeatable_heirarchical_elements[selected_model][elementKey] = $scope.repeatableHeirachicalSchemaElement;
639                         map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementClone.elementKey] = $scope.repeatableHeirachicalSchemaElementClone;
640                 } else {
641                         if(map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements == null) {
642                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix+"-"+1;
643                                 $scope.repeatableHeirachicalSchemaElementClone = {};
644                                 $scope.repeatableHeirachicalSchemaElementClone.elementKey = elementKey + "-" +1;
645                                 
646                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements = [];
647                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements[0] = $scope.repeatableHeirachicalSchemaElementClone;
648                                 
649                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementClone.elementKey] = $scope.repeatableHeirachicalSchemaElementClone;
650                         } else {
651                                 var count = map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements.length;
652
653                                 $scope.clonedSchemaElement.repeatableHierarchicalPrefix = $scope.clonedSchemaElement.repeatableHierarchicalPrefix+"-"+(count+1);
654                                 $scope.repeatableHeirachicalSchemaElementClone = {};
655                                 $scope.repeatableHeirachicalSchemaElementClone.elementKey = elementKey + "-" + (count+1);
656                                 
657                                 map_model_repeatable_heirarchical_elements[selected_model][elementKey].repeatableElements[count] = $scope.repeatableHeirachicalSchemaElementClone;                              
658                                 map_model_repeatable_heirarchical_elements[selected_model][$scope.repeatableHeirachicalSchemaElementClone.elementKey] = $scope.repeatableHeirachicalSchemaElementClone;
659                         }
660                 }
661         };
662         $scope.removeElement = function(schemaElement, parentElement, elementKey){
663         console.log("removeElement");
664                 $scope.index =0;                
665                 if(parentElement.type != null && parentElement.type.elements != null) {
666                         $scope.childElements = parentElement.type.elements;
667                 } else if (parentElement.elements != null) {
668                         $scope.childElements = parentElement.elements;
669                 }
670                 
671                 if(schemaElement.type.complexType != null){
672                         for(var i=0;i<$scope.childElements.length;i++){
673                                 if(angular.equals($scope.childElements[i],schemaElement)){      
674                                         //console.log("Complex Element List Match :" +$scope.childElements[i]);
675                                         $scope.childElements.splice(i,1);
676                                         $scope.index =i;
677                                         break;
678                                 }
679                         }
680                 } else if(schemaElement.element.name !=null) {                  
681                         for(var j=0;j<$scope.childElements.length;j++){
682                                 if(angular.equals($scope.childElements[j],schemaElement)){                              
683                                         //console.log("Element List Match :" +$scope.childElements[j]);                            
684                                         $scope.childElements.splice(j,1);       
685                                         $scope.index= j;
686                                         break;
687                                 }
688                         }
689                 }
690         
691                 if(list_model_repeatable_heirarchical_elements[selected_model] != null)
692                  {
693                         for(var i=0;i<list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements.length;i++){
694                                 if(list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[i].elementKey.indexOf(schemaElement.element.name) > -1){
695                                         $scope.removeRepeatableHeirarchicalMap(selected_model,list_model_repeatable_heirarchical_elements[selected_model].repeatableHeirachicalSchemaElements[i],elementKey);
696                                 }
697                         }
698                         
699                 }
700                         
701         };      
702         
703         
704         $scope.removeRepeatableHeirarchicalMap= function(modelName,repeatableHeirachicalSchemaElement,elementKey){              
705                 console.log("removeRepeatableHeirarchicalMap");
706                 $scope.repeatableElements = repeatableHeirachicalSchemaElement.repeatableElements;
707                 $scope.heirarchicalElements = repeatableHeirachicalSchemaElement.heirarchicalElements;
708                                 
709                 for(var j=0;j<$scope.repeatableElements.length;j++) {
710                         if(angular.equals($scope.repeatableElements[j].elementKey,elementKey)){                         
711                                 map_model_repeatable_heirarchical_elements[modelName][repeatableHeirachicalSchemaElement.elementKey].repeatableElements.splice(j,1);
712                                 break;
713                         }
714                         
715                         if($scope.repeatableElements[j].repeatableElements.length >0 || $scope.repeatableElements[j].heirarchicalElements.length >0 ){
716                                 if($scope.heirarchicalElements.length == 0){
717                                         $scope.removeRepeatableHeirarchicalMap(modelName,$scope.repeatableElements[j],elementKey);      
718                                 }else{
719                                         
720                                         if($scope.repeatableElements[j].heirarchicalElements.length > 0){
721                                                 for(var i=0 ;i<$scope.repeatableElements[j].heirarchicalElements.length;i++){
722                                                         if(angular.equals($scope.repeatableElements[j].heirarchicalElements[i].elementKey,elementKey)){
723                                                                 $scope.removeRepeatableHeirarchicalMap(modelName,$scope.repeatableElements[j],elementKey);
724                                                         }
725                                                 }
726                                         }
727                                         if($scope.repeatableElements[j].repeatableElements.length > 0){
728                                                 for(var q=0 ;q<$scope.repeatableElements[j].repeatableElements.length;q++){
729                                                         if(angular.equals($scope.repeatableElements[j].repeatableElements[q].elementKey,elementKey)){
730                                                                 $scope.removeRepeatableHeirarchicalMap(modelName,$scope.repeatableElements[j],elementKey);
731                                                         }
732                                                 }
733                                         }
734                                 }
735                         }       
736                 }       
737                 
738                 for(var k=0;k<$scope.heirarchicalElements.length;k++) {                 
739                         if(angular.equals($scope.heirarchicalElements[k].elementKey,elementKey)){
740                                 var count  = $scope.heirarchicalElements[k].repeatableElements.length;
741                                 $scope.childElements.splice($scope.index,count);
742                                 map_model_repeatable_heirarchical_elements[modelName][repeatableHeirachicalSchemaElement.elementKey].heirarchicalElements.splice(k,1);
743                                 break;
744                         }
745                         $scope.removeRepeatableHeirarchicalMap(modelName,$scope.heirarchicalElements[k],elementKey);
746                 }
747                 
748         };
749         
750         
751         
752         //Tst functions
753         
754         
755         //Generate and Download tst
756         $scope.generateTST = function(index){
757                 console.log("generateTST");
758                 Datafactory.setSelectedTestCase($rootScope.modeltestset.activityTestCases[index]);
759                 
760                 var tstInput={};
761                 console.log("inside generateTST() method");
762                 var generateTSTUrl ="/utm-service/soa_integration/generateTST";
763                 var tempActivityTestcase= {};
764                 angular.copy(Datafactory.getSelectedTestCase(),tempActivityTestcase);
765                 
766                 tstInput.activityTestCase = tempActivityTestcase;
767                 
768                 if(tstInput.activityTestCase.version != null){
769                         var newTestCaseName = tstInput.activityTestCase.testCaseName + "_"+ tstInput.activityTestCase.version;
770                         tstInput.activityTestCase.testCaseName = newTestCaseName;
771                         
772                 }
773                         
774                 tstInput.projectPreferenceInfo =  Datafactory.getProjectPreferenceInfo();
775                 tstInput.environmentData =  $rootScope.environmentData;
776                 tstInput.writeFileToolList=Datafactory.getWriteFileDataList();
777                 tstInput.fileStreamWriterList=Datafactory.getFileStreamWriterList();
778                 tstInput.commonPythonScriptList = Datafactory.getCommonPythonScriptList();
779                 
780                 
781                 soapRequestService.generateTst(tstInput, generateTSTUrl)
782                 .then(function(pars) {
783             console.log("pars");
784                         
785                         
786                         var dlg = dialogs.confirm('Message','Do you want to download TST file?');
787                         dlg.result.then(function(btn){
788                 console.log("btn");
789                         $scope.confirmed = 'You confirmed "Yes."';
790                         var downloadTSTUrl ="/utm-service/soa_integration/downloadTST";
791                         
792                         soapRequestService.downloadTst(pars, tstInput.activityTestCase.testCaseName, downloadTSTUrl)
793                         .then(function(results) {
794                 console.log("results");
795                                 
796                                 var sets=results.data;
797                          console.log("Sets value"+sets);            
798                      var headerValue=results.headers;
799                      
800                      var fileName=results.config.data.tstName + ".tst";
801                      console.log("Filename "+fileName);
802                      
803                      var hiddenElement = document.createElement('a');
804                      var objectUrl = URL.createObjectURL(results.data);
805                                 
806                              hiddenElement.href = objectUrl;
807                          hiddenElement.download = fileName;
808                          
809                          hiddenElement.target = '_blank';
810                          document.body.appendChild(hiddenElement);
811                          hiddenElement.click(); 
812                          document.body.removeChild(hiddenElement);
813                          
814                         });
815                         },function(btn){
816                 console.log("btn");
817                         $scope.confirmed = 'You confirmed "No."';
818                         });
819                         
820                 },
821                 function(data) {
822             console.log("data");
823
824                 });
825                 
826                 
827         }
828 }]);