Rework javascripts for designer UI (part2)
[clamp.git] / src / main / resources / META-INF / resources / designer / scripts / CldsModelService.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.service('cldsModelService', ['alertService','$http', '$q', function (alertService,$http, $q) {
25   
26   function checkIfElementType(name){
27
28     //This will open the methods located in the app.js
29         if (name.toLowerCase().indexOf("stringmatch")>=0)
30             StringMatchWindow();
31         else if (name.toLowerCase().indexOf("tca")>=0)
32                 TCAWindow();
33     else if(name.toLowerCase().indexOf("policy")>=0)
34         PolicyWindow();
35     else if(name.toLowerCase().indexOf("collector")>=0)
36         CollectorsWindow();
37     
38   }
39
40   this.toggleDeploy = function  (uiAction, modelName, controlNamePrefixIn, 
41     bpmnTextIn, propTextIn, svgXmlIn, templateName, typeID, controlNameUuid, modelEventService, deploymentId) {
42      
43     var def = $q.defer();
44     var sets = [];
45     var action = uiAction.toLowerCase();
46    var deployUrl = "/restservices/clds/v1/clds/"+action+"/"+modelName; 
47    var requestData = {name: modelName, 
48     controlNamePrefix: controlNamePrefixIn, 
49     bpmnText: bpmnTextIn, 
50    propText: propTextIn, 
51    imageText:svgXmlIn, 
52    templateName:templateName,
53    typeId:typeID,
54    controlNameUuid: controlNameUuid,
55    event:modelEventService,
56    deploymentId:deploymentId};
57     
58    $http.put(deployUrl,requestData)
59         .success(function(data){ 
60           deploymentId = data.deploymentId;           
61           def.resolve(data);          
62           alertService.alertMessage("Action Successful:"+uiAction,1)
63         })
64         .error(function(data){  
65         alertService.alertMessage("Action Failure:"+uiAction,2)              
66           def.reject("Save Model not successful");
67         });
68         
69       return def.promise;
70   };
71   
72   this.getASDCServices = function(){
73       
74       
75       var def = $q.defer();
76       var sets = [];
77       
78       var svcUrl = "/restservices/clds/v1/clds/sdc/services/";                
79       
80         $http.get(svcUrl)
81         .success(function(data){          
82           def.resolve(data);   
83           
84           
85         })
86         .error(function(data){                
87           def.reject("sdc Services not found");
88           
89         });
90         
91         return def.promise;
92     };
93     
94     
95 this.getASDCService = function(uuid){
96       
97       
98       var def = $q.defer();
99       var sets = [];
100       
101       var svcUrl = "/restservices/clds/v1/clds/sdc/services/" + uuid;                
102       
103         $http.get(svcUrl)
104         .success(function(data){   
105           def.resolve(data);          
106           
107         })
108         .error(function(data){                
109           def.reject("SDC service not found");
110         });
111         
112         return def.promise;
113     };
114     this.getModel = function(modelName){
115       
116       
117       var def = $q.defer();
118       var sets = [];
119       var svcUrl = "/restservices/clds/v1/clds/model/" + modelName;                
120       
121         $http.get(svcUrl)
122         .success(function(data){          
123           def.resolve(data);          
124           
125         })
126         .error(function(data){                
127           def.reject("Open Model not successful");
128         });
129         
130         return def.promise;
131     };
132     this.getSavedModel=function(){
133       
134       var def = $q.defer();
135       var sets = [];
136       
137       var svcUrl = "/restservices/clds/v1/clds/model-names";                
138       
139         $http.get(svcUrl)
140         .success(function(data){          
141           def.resolve(data);          
142           
143         })
144         .error(function(data){                
145           def.reject("Open Model not successful");
146         });
147         
148         return def.promise;
149     };
150     this.setModel = function(modelName, controlNamePrefixIn, bpmnTextIn, propTextIn){
151       
152       
153       var def = $q.defer();
154       var sets = [];
155       var svcUrl = "/restservices/clds/v1/clds/model/" + modelName;        
156         var svcRequest = {name: modelName, controlNamePrefix: controlNamePrefixIn, bpmnText: bpmnTextIn, propText: propTextIn};
157         
158       
159         $http.put(svcUrl, svcRequest)
160         .success(function(data){          
161           def.resolve(data);          
162           
163         })
164         .error(function(data){                
165           def.reject("Save Model not successful");
166         });
167         
168         return def.promise;
169     };
170     this.processAction = function(uiAction, modelName, controlNamePrefixIn, bpmnTextIn, propTextIn,svgXmlIn,templateName,typeID,deploymentId){
171       
172       
173       var def = $q.defer();
174       var sets = [];
175       
176       //console.log(svgXmlIn);
177       var svcUrl = "/restservices/clds/v1/clds/";        
178       var svcAction = uiAction.toLowerCase();
179       if ( svcAction == "save" || svcAction == "refresh" ) {
180         svcUrl = svcUrl + "model/" + modelName;
181       } else if ( svcAction == "test" ) {
182         svcUrl = svcUrl + "action/submit/" + modelName + "?test=true";
183       } else {
184           svcUrl = svcUrl + "action/" + svcAction + "/" + modelName;
185         }
186       
187       var svcRequest = {name: modelName, controlNamePrefix: controlNamePrefixIn, bpmnText: bpmnTextIn, propText: propTextIn, imageText:svgXmlIn, templateName:templateName, typeId:typeID, deploymentId:deploymentId};      
188       
189         $http.put(svcUrl, svcRequest)
190         .success(function(data){
191           def.resolve(data);   
192           alertService.alertMessage("Action Successful:"+uiAction,1)        
193           
194         })
195         .error(function(data){  
196           alertService.alertMessage("Action Failure:"+uiAction,2);
197           //def         alertService.alertMessage("Action Successful:"+uiAction,1);
198           def.reject(svcAction + " not successful");
199         });
200         
201         return def.promise;
202     };
203     this.manageAction = function(modelName,typeId,typeName){
204       var def = $q.defer();
205       var sets = [];
206
207       var config = {
208        url: "/restservices/clds/v1/clds/getDispatcherInfo",
209        method: "GET",
210        params:{model:modelName,typeId:typeId,typeName:typeName}
211      };
212        $http(config)
213         .success(function(data){          
214           def.resolve(data);          
215           
216         })
217         .error(function(data){                
218           def.reject("manage action not successful");
219         });
220         
221         return def.promise;
222
223     };
224     this.checkPermittedActionCd = function(permittedActionCd, menuText, actionCd){
225         if ( permittedActionCd.indexOf(actionCd) > -1 ) {
226           document.getElementById(menuText).classList.remove('ThisLink');
227         } else {
228           document.getElementById(menuText).classList.add('ThisLink');
229         }
230     };        
231     this.processActionResponse = function(modelName, pars){
232       
233       // populate control name (prefix and uuid here)
234         var controlNamePrefix = pars.controlNamePrefix;
235         var controlNameUuid = pars.controlNameUuid;
236         deploymentId = pars.deploymentId;
237         var modelEventService = pars.modelEventService;
238         typeID = pars.typeId;
239         
240         var headerText = "Closed Loop Modeler - " +  modelName;
241         if ( controlNameUuid != null ) {
242           var actionCd = pars.event.actionCd;
243           var actionStateCd = pars.event.actionStateCd;
244           //headerText = headerText + " [" + controlNamePrefix + controlNameUuid + "] [" + actionCd + ":" + actionStateCd + "]";
245           headerText = headerText + " [" + controlNamePrefix + controlNameUuid + "]";
246         }
247           
248       document.getElementById("modeler_name").textContent = headerText;
249       document.getElementById("templa_name").textContent = ("Template Used - " + selected_template);
250       setStatus(pars)
251       disableBPMNAddSVG(pars);
252         this.enableDisableMenuOptions(pars);
253     
254         
255     };
256     
257     this.processRefresh=function(pars){
258       typeID = pars.typeId;
259       deploymentId = pars.deploymentId;
260       setStatus(pars);
261       this.enableDisableMenuOptions(pars);
262     }
263     function setStatus(pars){
264       
265       var status = pars.status;
266       // apply color to status
267     var statusColor='white';
268         if(status.trim()==="DESIGN"){
269           statusColor='gray'
270         } else if(status.trim()==="DISTRIBUTED"){
271           statusColor='blue'
272         } else if(status.trim()==="ACTIVE"){
273           statusColor='green'
274         } else if(status.trim()==="STOPPED"){
275           statusColor='red'
276         } else if(status.trim()==="DELETING"){
277           statusColor='pink'
278         } else if(status.trim()==="ERROR"){
279           statusColor='orange'
280         } else if(status.trim()==="UNKNOWN"){
281           statusColor='blue'
282         } else{
283           statusColor=null;
284         }
285         
286
287         var statusMsg='<span style="background-color:' + statusColor + ';-moz-border-radius: 50px;  -webkit-border-radius: 50px;  border-radius: 50px;">&nbsp;&nbsp;&nbsp;'+status+'&nbsp;&nbsp;&nbsp;</span>';
288         // display status
289         if ($("#status_clds").length>=1)
290           $("#status_clds").remove();
291         $("#activity_modeler").append('<span id="status_clds" style="position: absolute;  left: 61%;top: 51px; font-size:20px;">Status: '+statusMsg+'</span>');
292
293         
294     }
295     function disableBPMNAddSVG(pars){
296       
297       var svg=pars.imageText.substring(pars.imageText.indexOf("<svg"))
298       if($("#svgContainer").length>0)
299           $("#svgContainer").remove();
300         $("#js-canvas").append("<span id=\"svgContainer\">"+svg+"</span>");
301         /* added code for height width viewBox */
302         $("#svgContainer svg").removeAttr("height");
303         $("#svgContainer svg").removeAttr('viewBox');
304         $("#svgContainer svg").removeAttr('width');
305         
306         $("#svgContainer svg").attr('width','100%');
307         $("#svgContainer svg").attr('height','100%');
308
309         $("#svgContainer").click(function(event){
310           //console.log($(event.target).parent().html())
311           //console.log($($(event.target).parent()).attr("data-element-id"))
312           var name=$($(event.target).parent()).attr("data-element-id")
313           lastElementSelected=$($(event.target).parent()).attr("data-element-id")
314           checkIfElementType(name)
315           
316         })
317         $(".bjs-container").attr("hidden","");
318     }
319     this.enableDisableMenuOptions=function(pars){
320       
321       var permittedActionCd = pars.permittedActionCd;
322       
323       //dropdown options - always true
324       document.getElementById('Open Template').classList.remove('ThisLink');
325           document.getElementById('Open CL').classList.remove('ThisLink');
326           document.getElementById('Save Template').classList.add('ThisLink');
327           document.getElementById('Template Properties').classList.add('ThisLink');
328           document.getElementById('Revert Template Changes').classList.add('ThisLink');
329           document.getElementById('Close Template').classList.add('ThisLink'); 
330                 
331       if (readOnly||readMOnly){
332         //enable model options
333                 document.getElementById('Properties CL').classList.remove('ThisLink');
334                 document.getElementById('Close Model').classList.remove('ThisLink');
335                 
336                 //disable models options
337                 document.getElementById('Create CL').classList.add('ThisLink');
338                 document.getElementById('Save CL').classList.add('ThisLink');
339         document.getElementById('Revert Model Changes').classList.add('ThisLink');                      
340           } else {
341               // enable menu options
342                   document.getElementById('Create CL').classList.remove('ThisLink');
343               document.getElementById('Save CL').classList.remove('ThisLink');
344               document.getElementById('Properties CL').classList.remove('ThisLink');
345               document.getElementById('Revert Model Changes').classList.remove('ThisLink');
346               document.getElementById('Close Model').classList.remove('ThisLink');
347               
348               
349               document.getElementById('Validation Test').classList.remove('ThisLink');
350               document.getElementById('Refresh Status').classList.remove('ThisLink');      
351               document.getElementById('Refresh ASDC').classList.remove('ThisLink');     
352           } 
353       if (readTOnly){
354                 document.getElementById('Create Template').classList.add('ThisLink');
355           } else {
356                 document.getElementById('Create Template').classList.remove('ThisLink');
357           }
358       
359                 // enable/disable menu options based on permittedActionCd list
360                 this.checkPermittedActionCd(permittedActionCd, 'Validation Test', 'TEST');
361                 this.checkPermittedActionCd(permittedActionCd, 'Submit', 'SUBMIT');
362                 this.checkPermittedActionCd(permittedActionCd, 'Resubmit', 'RESUBMIT');
363                 this.checkPermittedActionCd(permittedActionCd, 'Update', 'UPDATE');
364                 this.checkPermittedActionCd(permittedActionCd, 'Stop', 'STOP');
365                 this.checkPermittedActionCd(permittedActionCd, 'Restart', 'RESTART');
366                 this.checkPermittedActionCd(permittedActionCd, 'Delete', 'DELETE');
367                 this.checkPermittedActionCd(permittedActionCd, 'Deploy', 'DEPLOY');
368                 this.checkPermittedActionCd(permittedActionCd, 'UnDeploy', 'UNDEPLOY');
369                 
370         }
371     
372    
373     this.getASDCServices().then(function(pars){
374       
375       var services=pars.service;
376       asdc_Services=services
377     });
378     
379  }]);