· 6 years ago · Jan 28, 2020, 01:30 PM
1// this is the configuration manager module for the EDM that will handle all the configurations related to :
2// PIPELINES , SMART BLOCKS , BUILDING BLOCKS
3
4//edm specific
5iago.edm.classes.Modules.prototype.ConfigManager = function(configManagerOptions) {
6 var sandbox = iago.edm.sandbox;
7 var templateFactory = sandbox.templateFactory;
8 var modules = iago.edm.sandbox.modules;
9 var self = this;
10 var _ParsedFileColumnsInfo = "ParsedFileColumnsInfo";
11 var graphManager = null;
12 var _blockInfo = null;
13 var _blockGetConfigTimestamp = null;
14 var _itemTypes = {
15 Pipeline: "Pipeline",
16 Block: "Block"
17 };
18 // a timestamp
19 var _blockConfigOpenedAt = null;
20 var memory = sandbox.memory;
21
22 var advanceConfiguration = {
23 maxParallelInstances: 0,
24 useOptimization: false
25 };
26 var _advancedConfigKey = "_advancedEdmConfiguration";
27 var exceptionDataJSON = null;
28 var _options = {};
29 var GetRenderContainer = function(containerType) {
30 //Fixed
31 var graphManager = modules.Manager.GraphManager;
32 switch(containerType){
33 case "variable":
34 //not needed variables have different calling
35 break;
36 case "tab":
37 return $('[edm-control="configContainer"]');
38 break;
39 case "block":
40 default:
41 return $('[edm-control="configContainer"]');
42 break;
43 }
44
45 }
46
47 var apis = {
48 getRecentConfigurations: "/edm-rest-manager/GetRecentConfigurations",
49 getPipelineConfigurations: "/edm-rest-manager/GetPipelineConfigurations"
50 };
51
52 var _cache = {
53 blockConfigurations: {}
54 };
55
56 var _graphIdGlobal = null;
57
58 var helper = new iago.edm.classes.Modules.prototype.ConfigManager.Extensions.HelperClass();
59 var schedulerHelper = new iago.edm.classes.Modules.prototype.ConfigManager.Extensions.SchedulerConfig();
60 var generalInfoHelper = new iago.edm.classes.Modules.prototype.ConfigManager.Extensions.GeneralInfo();
61 var AuditHistoryHelper = new iago.edm.classes.Modules.prototype.ConfigManager.Extensions.AuditHistory();
62 var PrivilegeManager = iago.edm.sandbox.externalUtilities.PrivilegeManager;
63 var BlockExceptionHelper = new iago.edm.classes.Modules.prototype.ConfigManager.Extensions.BlockException();
64
65 var _blockVariablesToAppend = null;
66
67 var _functions = (function() {
68 var self1 = self;
69 var _lastSavedTime = moment();
70 var _renderContainer;
71
72 var _configAPI = (function() {
73
74 var _setHeaderLabel = function(label) {
75 $('[edm-section="configLabel"]').html(label);
76 };
77
78 var appendVariables = function(config) {
79 if (!config) {
80 config = {};
81 }
82 return config;
83 /****Variables Removed From Block*/
84 if (config) {
85
86 if (!config["_extraInfo_"]) {
87 config["_extraInfo_"] = {
88 "Variables": _blockVariablesToAppend
89 }
90 } else {
91 config["_extraInfo_"]["Variables"] = _blockVariablesToAppend;
92 }
93
94 }
95 return config;
96 };
97
98 var appendExceptions = function(config, CheckedData) {
99 if (!config) {
100 config = {};
101 return config;
102 }
103
104 if (config) {
105 if (!config["_extraInfo_"]) {
106 config["_extraInfo_"] = {
107 "Exception": CheckedData
108 }
109 } else {
110 config["_extraInfo_"]["Exception"] = CheckedData;
111 }
112
113 }
114 return config;
115 };
116
117 var getBlockConfiguration = function(blockInstanceId) {
118 if (_blockInfo.isTemp) {
119 return $.when(null);
120 }
121 // caching disabled
122 //if (_cache.blockConfigurations[blockInstanceId]) {
123 // return $.when(_cache.blockConfigurations[blockInstanceId]);
124 // //return _cache.blockConfigurations[blockInstanceId];
125 //}
126 // api for getting block config
127
128 return $.ajax({
129 type: 'POST',
130 contentType: "application/json; charset=utf-8",
131 url: iago.polarisServiceBaseUrl + "/edm-rest-manager/GetConfig",
132 data: blockInstanceId,
133 dataType: "json",
134 processData: true
135 })
136 }
137
138
139 var getExceptionManagerConfiguration = function(blockInstanceId) {
140 if (_blockInfo.isTemp) {
141 return $.when(null);
142 }
143 // caching disabled
144 //if (_cache.blockConfigurations[blockInstanceId]) {
145 // return $.when(_cache.blockConfigurations[blockInstanceId]);
146 // //return _cache.blockConfigurations[blockInstanceId];
147 //}
148 // api for getting block config
149
150 return $.ajax({
151 type: 'POST',
152 contentType: "application/json; charset=utf-8",
153 url: iago.polarisServiceBaseUrl + "/edm-rest-manager/GetConfig",
154 data: blockInstanceId,
155 dataType: "json",
156 processData: true
157 })
158 }
159
160 var _blockConfigSaveWarningAction = function(blockInstanceId, config) {
161
162 $("[edm-save-config-button=\"btnYes\"]").unbind('click').bind('click', function() {
163 _updateBlockConfig(blockInstanceId, config, true);
164 _afterUpdateBlockConfig(blockInstanceId, config);
165 bootbox.hideAll();
166 });
167
168 $("[edm-save-config-button=\"btnNo\"]").unbind('click').bind('click', function() {
169 bootbox.hideAll();
170 });
171
172 }
173
174 var _afterUpdateBlockConfig = function(blockInstanceId, config) {
175 $("[item-type=block][block-instance-id=" + blockInstanceId + "]").removeClass("unconfiguredBlock");
176 var configForGrowl = {
177 offset: {
178 x: 20,
179 y: 20
180 },
181 allow_dismiss: true,
182 animate: {
183 enter: 'animated fadeIn',
184 exit: 'animated fadeOut'
185 },
186 type: "success",
187 delay: 3500
188 };
189 $.growl("<span class='glyphicon glyphicon-floppy-disk'></span><span style='margin-left:10px;'>Configurations Saved!</span>", configForGrowl);
190 // add config to cache after the block save hit is completed
191 _cache.blockConfigurations[blockInstanceId] = config;
192
193 };
194
195 var _updateBlockConfig = function(blockInstanceId, config, fromOverride) {
196
197 if (helper.wasBlockSavedRecently(_lastSavedTime)) {
198 return false;
199 } else {
200 _lastSavedTime = moment();
201 }
202 // api for seting block config
203 var _lastSavedConfig = null;
204 if (advanceConfiguration.maxParallelInstances == 0)
205 advanceConfiguration.maxParallelInstances = -1;
206 config[_advancedConfigKey] = advanceConfiguration;
207
208 var _exceptionInfo = null;
209 if (_blockInfo.isTemp) {
210 alert("Please save the graph first !");
211 return;
212 }
213 var metaList = deployedapp.instance.GetEDMMetaList();
214 var gInfo = graphManager.getGraphInfo(_graphIdGlobal);
215
216 // Proceed with Block Config Save if pipeline is locked.
217 var ConcurrencyMngr = iago.edm.sandbox.modules.ManageConcurrency;
218 if (!ConcurrencyMngr.IsBlockSaveConfigAllowed(_graphIdGlobal)) {
219 return;
220 }
221
222 var openedGraph = graphManager.getOpenGraphs();
223
224 /*Below code while updating config keep _extraInfo*/
225 $.when(getBlockConfiguration(blockInstanceId)).then(function(data) { //TBD: timestamp ?
226 if (!_.isEmpty(data)) {
227 _lastSavedConfig = data;
228 _lastSavedConfig = JSON.parse(_lastSavedConfig);
229 if (_lastSavedConfig["_extraInfo_"] != undefined) {
230 if (_lastSavedConfig["_extraInfo_"]["Exception"] != undefined)
231 _exceptionInfo = _lastSavedConfig["_extraInfo_"]["Exception"];
232 }
233 if (!config["_extraInfo_"]) {
234 config["_extraInfo_"] = {
235 "Exception": _exceptionInfo
236 }
237 } else {
238 if (config["_extraInfo_"]["Exception"] == null) {
239 config["_extraInfo_"]["Exception"] = _exceptionInfo;
240 }
241 }
242 } else {
243 exceptionDataJSON = memory.getFromSharedMemory("blockExceptions.exceptionDataJSON");
244 if (exceptionDataJSON) {
245 var d = {
246 Data: null
247 };
248 if (!config["_extraInfo_"]) {
249 config["_extraInfo_"] = {
250 "Exception": _exceptionInfo
251 }
252 if (config["_extraInfo_"]["Exception"] == null) {
253 d.Data = _.where(exceptionDataJSON.Data, {
254 "Block": _blockInfo.blockId
255 });
256 //var ID = [];
257 var DefaultSeverity = [];
258 //Pushing to array ID to pass rowID to RAD API to checked the specified rows
259 _.each(d.Data, function(key, value) {
260 //if (key.Include == true) {
261 // ID.push(key._ID);
262 //}
263 DefaultSeverity.push(key.Severity);
264 });
265
266
267 var dt;
268
269 for (var c = 0; c < d.Data.length; c++) {
270 d.Data[c]["RowIndex"] = "" + c + "";
271 d.Data[c]["Severity"] = DefaultSeverity[c];
272 }
273 }
274 d = d.Data;
275 CheckedData = JSON.stringify(d);
276 config = appendExceptions(config, CheckedData)
277 }
278 } else {
279
280 $.ajax({
281 type: 'GET',
282 url: iago.baseUrl + '/PConfigFiles/EDMBlockConfig/blockExceptions.json',
283 dataType: 'json',
284 success: function(data) {
285 // do ajax call
286 //var response = "asdsada";
287 memory.setInSharedMemory("blockExceptions.exceptionDataJSON", data);
288 exceptionDataJSON = memory.getFromSharedMemory("blockExceptions.exceptionDataJSON");
289 var d = {
290 Data: null
291 };
292 if (!config["_extraInfo_"]) {
293 config["_extraInfo_"] = {
294 "Exception": _exceptionInfo
295 }
296 if (config["_extraInfo_"]["Exception"] == null) {
297 d.Data = _.where(exceptionDataJSON.Data, {
298 "Block": _blockInfo.blockId
299 });
300 //var ID = [];
301 var DefaultSeverity = [];
302 //Pushing to array ID to pass rowID to RAD API to checked the specified rows
303 _.each(d.Data, function(key, value) {
304 //if (key.Include == true) {
305 // ID.push(key._ID);
306 //}
307 DefaultSeverity.push(key.Severity);
308 });
309
310
311 var dt;
312
313 for (var c = 0; c < d.Data.length; c++) {
314 d.Data[c]["RowIndex"] = "" + c + "";
315 d.Data[c]["Severity"] = DefaultSeverity[c];
316 }
317 }
318 d = d.Data;
319 CheckedData = JSON.stringify(d);
320 config = appendExceptions(config, CheckedData)
321 }
322 }
323 });
324
325 }
326
327
328 }
329
330
331
332 config = appendVariables(config);
333
334
335 helper.GlobalMeta.Update(blockInstanceId, config, metaList, gInfo, openedGraph);
336 var obj = {
337 blockInstanceId: blockInstanceId,
338 config: JSON.stringify(config),
339 "__timestamp": _blockGetConfigTimestamp,
340 "fromOverride": fromOverride ? fromOverride : false
341 };
342 if (helper.isBlockConfigIntellisenseOK(obj, blockInstanceId, _renderContainer) == false) {
343 return false;
344 }
345
346 $.ajax({
347 type: 'POST',
348 contentType: "application/json; charset=utf-8",
349 url: iago.polarisServiceBaseUrl + "/edm-rest-manager/SaveConfig",
350 data: JSON.stringify(obj),
351 dataType: "json",
352 processData: true
353 }).then(function(data) {
354 var result = JSON.tryParse(data);
355 // result.message = "warning";
356 if (result && result.message != undefined) {
357 if (result.message === "warning") {
358 var $bootBox = bootbox.dialog({
359 message: $('[edm-section="BlockSaveWarningContainer"]').html(),
360 title: 'Warning',
361 onEscape: true,
362 draggable: true,
363 className: "Delete-Container"
364 });
365 _blockConfigSaveWarningAction(blockInstanceId, config);
366
367 } else if (result.message === "success") {
368 _blockGetConfigTimestamp = moment().format(iago.isoDateFormat);
369 _afterUpdateBlockConfig(blockInstanceId);
370 }
371 } else {
372 var configForGrowl = {
373 offset: {
374 x: 20,
375 y: 20
376 },
377 allow_dismiss: true,
378 animate: {
379 enter: 'animated fadeIn',
380 exit: 'animated fadeOut'
381 },
382 type: "danger",
383 delay: 3500
384 };
385 $.growl("<span class='glyphicon glyphicon-floppy-disk'></span><span style='margin-left:10px;'>Save Configuration Failed!</span>", configForGrowl);
386 console.error("Save Configuration Failed! : " + error);
387 }
388 });
389 });
390 }
391
392 var _getRecentConfigurations = function(blockId) {
393 return sandbox.utils.callService(apis.getRecentConfigurations, blockId);
394 };
395 var _updateBlockAncestry = function(obj) {
396 var graphObj = graphManager.getGraphInfo(obj.PipeId);
397 var blocks = graphObj.blocks;
398 var blockIds = [];
399 var pipeIds = [];
400 obj.BlockIds.forEach(function(b, ind) {
401 var block = _.findWhere(blocks, {
402 "blockInstanceId": b
403 });
404 if (block.itemType == "block") {
405 blockIds.push(b);
406 } else {
407 pipeIds.push(b);
408 }
409 });
410 return obj;
411 }
412 var _getParentBlockConfiguration = function(_graphId, _blockInstanceId) {
413 var _parentBlockIds = graphManager.getParentBlockIds(_graphId, _blockInstanceId);
414 // _parentBlockIds = ["416", "264", "388"]; //FIXME : parent block config not avaialble so hard coded
415 _parentBlockIds.push(_blockInstanceId);
416
417 var input = {
418 BlockIds: _parentBlockIds,
419 PipeId: _graphId
420 }
421 input = _updateBlockAncestry(input);
422 return sandbox.utils.callService(apis.getPipelineConfigurations, input);
423 }
424
425 var _setConfigContainerWidth = function(width) {
426 $(_renderContainer).width(width);
427 };
428
429 var _enableIntellisense = function(extraConfig, _options, currentDefaultConfiguration, blockInfo) {
430
431 //default configuration - for assistance in creating the self
432 //only block intellisense is enables deom here
433 var parentBlokIds = graphManager.getParentBlockIds(_graphIdGlobal, blockInfo.blockInstanceId, "block");
434 parentBlokIds = parentBlokIds.map(function(item) {
435 return Number(item)
436 });
437 var $elements = $(_renderContainer).find("[edm-widget='intellisense']");
438 /* temp testing code*/
439 var _atr = [];
440 if (extraConfig != undefined) {
441 for (var key in extraConfig) {
442 if (extraConfig.hasOwnProperty(key)) {
443 _atr.push($("#" + key));
444 }
445 }
446 $elements = _atr;
447 }
448
449 var callback;
450 var filter;
451 for (var i = 0; i < $elements.length; i++) {
452
453 filter = $($elements[i]).attr("edm-intellisense-filter");
454 filter = filter != undefined ? filter : $.noop;
455 var id = $($elements[i]).attr("id");
456 if (extraConfig != undefined) {
457 callback = extraConfig[id] != undefined ? extraConfig[id] : $.noop;
458 } else {
459 callback = $.noop;
460 }
461 var getFilteredObjects = function(obj) {
462 var metaList = deployedapp.instance.GetEDMMetaList();
463 var flag = false;
464 var filterObj = {};
465 for (var i = 0; i < metaList.length; i++) {
466 if (obj[metaList[i]] != undefined) {
467 filterObj[metaList[i]] = obj[metaList[i]];
468 }
469 }
470 return filterObj;
471 }
472 var config;
473 try {
474 config = JSON.parse(JSON.stringify(_options.ParentBlockConfigs));
475 } catch (ex) {
476 config = _options.ParentBlockConfigs;
477 }
478 if (filter != $.noop && config != undefined) {
479 var ConfigDict = config.ConfigDictionary;
480 var temp = {};
481 var multipleMeta = false;
482 $.each(ConfigDict, function(ind, obj) {
483 // these language keywords wont exist in the framework
484 // discudss and move them to the ideal location
485
486 temp[ind] = getFilteredObjects(obj);
487 /* if (obj[_ParsedFileColumnsInfo].length > 1) {
488 multipleMeta = true;
489 }*/
490 multipleMeta = true;
491 /*} else {
492 delete config.Mapping[ind]
493 }*/
494 if (Object.keys(temp[ind]).length == 0) {
495 delete config.Mapping[ind];
496 }
497 });
498
499 config.ConfigDictionary = temp;
500 } else
501 if (config == undefined) {
502 config = {};
503 config.ConfigDictionary = {};
504 config.Mapping = {};
505 }
506 var currentGraph = graphManager.getGraphInfo(_graphIdGlobal);
507 var openedGraph = graphManager.getOpenGraphs();
508 var pipeLabel = openedGraph[_graphIdGlobal]["graphName"];
509 if (currentDefaultConfiguration == null || typeof currentDefaultConfiguration === 'string' || currentDefaultConfiguration instanceof String) {} else {
510 if (Object.keys(currentDefaultConfiguration).length > 0) {
511 // add these to the
512
513 config.ConfigDictionary[blockInfo.blockInstanceId] = {};
514
515 for (var k in currentDefaultConfiguration) {
516 config.ConfigDictionary[blockInfo.blockInstanceId][k] = currentDefaultConfiguration[k];
517 }
518 }
519 // add the label to config.Mapping
520 config.Mapping[_blockInfo.blockInstanceId] = _blockInfo.blockLabel;
521 }
522
523 /* if ($($elements[i]).data() != undefined && $($elements[i]).data().iagoWidgetIntellisense != undefined) {
524 $($elements[i]).intellisense("destroy");
525
526 //was needed when variable intellisense was within block , commented on 27 march 2017
527 }*/
528
529 $($elements[i]).intellisense({
530 "data": config.ConfigDictionary,
531 "mapping": config.Mapping,
532 "callback": callback,
533 "filter": filter,
534 "multipleMeta": multipleMeta,
535 "GlobalMeta": helper.GlobalMeta.GetShareableMeta(currentGraph, openedGraph),
536 "Graph": openedGraph,
537 "CurrentGraph": currentGraph,
538 "CurrentBlock": _blockInfo.blockInstanceId,
539 "extraInfo": {
540 "PipeLabels": {
541 [_graphIdGlobal]: pipeLabel
542 }
543 },
544 "parentBlockIds": parentBlokIds || []
545 });
546
547 }
548 }
549 var _getIntellisenseValue = function(elementId,box=undefined) {
550 /* if(box!=undefined){
551 _renderContainer=box;
552 }*/
553 var element = $(box).find($("#" + elementId));
554 var val;
555 try {
556 val = $(element).intellisense("GetValue");
557 return val;
558 } catch (err) {
559 val = $(element).val();
560 return val;
561 }
562 }
563
564 var _setIntellisenseValue = function(elementId, value,box) {
565 /* if(box!=undefined){
566 _renderContainer=box;
567 }*/
568 var element = $(box).find($("#" + elementId));
569 var val;
570 try {
571 $(element).intellisense("SetValue", value);
572 } catch (err) {
573 /*if (Object.prototype.toString.call(value) == "[object Object]") {
574 $("#" + elementId).val("");
575 } else
576 if (value.toString().indexOf("__") == -1) {
577 $("#" + elementId).val(value);
578 } else {
579 $("#" + elementId).val("");
580 }*/
581 if (value != undefined) {
582 $(element).val(value);
583 } else {
584 $(element).val("");
585 }
586 }
587 }
588
589 var OpenBootBox = function() {}
590 var _UpdateAllGlobalMetaVariables = function(PipeData) {
591 $.map(PipeData.ClickedPipeVariables, function(variableList, graphid) {
592 PipeData.ClickedPipeVariables[graphid] = _MassageGETVariableList(variableList)
593 _UpdateGlobalMetaVariables(graphid, PipeData.ClickedPipeVariables[graphid])
594 })
595 $.map(PipeData.DroppedPipeVariables, function(variableList, graphid) {
596 PipeData.DroppedPipeVariables[graphid] = _MassageGETVariableList(variableList)
597 _UpdateGlobalMetaVariables(graphid, PipeData.DroppedPipeVariables[graphid])
598 })
599 }
600 var _UpdateGlobalMetaVariables = function(_graphId, variableList) {
601 var variablesSaved = {};
602 variableList.forEach(function(item, index) {
603 variablesSaved[item.VariableName] = item.VariableValue;
604 })
605
606 helper.GlobalMeta.UpdatePipeVariables(_graphId, variablesSaved);
607 }
608 var _MassageGETVariableList = function(VarList) {
609 var _List = [];
610 for (var i = 0; i < VarList.length; i++) {
611 var temp = {};
612 temp["VariableName"] = VarList[i]["variable_name"];
613 temp["VariableType"] = VarList[i]["variable_data_type_id"];
614 temp["VariableValue"] = VarList[i]["variable_value"];
615 temp["VariableId"] = VarList[i]["variable_id"];
616 temp["PipelineId"] = VarList[i]["pipeline_id"];
617 temp["VariableFormat"] = VarList[i]["variable_format"];
618 temp["OverRideId"] = VarList[i]["override_id"];
619 temp["OverridePipeId"] = VarList[i]["overriding_pipeline_id"];
620 temp["OverrideVariable"] = VarList[i]["override_variable"];
621 _List.push(temp);
622 }
623 return _List;
624 }
625 var _MassageVariablesList = function(VarList) {
626 var _List = [];
627 for (var i = 0; i < VarList.length; i++) {
628 var temp = {};
629 temp["pipeline_id"] = VarList[i]["PipelineId"];
630 temp["variable_name"] = VarList[i]["VariableName"];
631 temp["variable_data_type_id"] = VarList[i]["VariableType"];
632 temp["variable_value"] = VarList[i]["VariableValue"];
633 temp["variable_id"] = VarList[i]["VariableId"];
634 temp["variable_format"] = VarList[i]["VariableFormat"];
635 temp["override_id"] = VarList[i]["OverRideId"];
636 temp["overriding_pipeline_id"] = VarList[i]["OverridePipeId"];
637 temp["override_variable"] = VarList[i]["OverrideVariable"];
638 _List.push(temp);
639 }
640 return _List;
641 }
642 var _SaveVariables = function(_graphId, VariablesList, params, extra = {}) {
643
644 var SaveGraph = function() {
645
646 sandbox.broadcast(['SaveGraph'], {
647 graphId: _graphId,
648 graphName: graphs[_graphId].graphName
649 });
650 }
651
652 if (params.VariablesLocation == "Self") {
653 var param = {
654 "pipeline_id": _graphId,
655 "variables": VariablesList
656 }
657 //TODO enter url and match class properties
658 var URL = "/CommonServices/SavePipelineVariables";
659 $.when(iago.utils.callService(URL, param)).then(function(response) {
660 //variable saved event broadcast send Variablelist as paramter
661
662 response = JSON.parse(response);
663 if (response.message == "Variables Saved") {
664 sandbox.broadcast(['SaveAdhocVariables'], {
665 graphId: _graphId,
666 variableList: VariablesList
667 });
668
669 SaveGraph();
670 //this will close the box once everythng done
671 extra["closebox"]();
672 }
673 });
674 } else {
675 var param = {
676 "pipeline_id": VariablesList[0]["overriding_pipeline_id"],
677 "variables": VariablesList
678 }
679 //TODO enter url and match class properties
680 var URL = "/CommonServices/SavePipelineVariablesOverride";
681 $.when(iago.utils.callService(URL, param)).then(function(response) {
682 console.log(response);
683 var res = JSON.parse(response);
684 if (res.status.toLowerCase() == "success") {
685 SaveGraph();
686 //this will close the box once everythng done
687 extra["closebox"]();
688
689 } else {
690 var height = Number($(window).height() - 100);
691 var config = {
692
693 offset: {
694 x: 20,
695 y: height
696 },
697 allow_dismiss: false,
698 animate: {
699 enter: 'animated fadeIn',
700 exit: 'animated fadeOut'
701 },
702 type: "warning",
703 delay: 3000
704 }
705 $.growl("<span class='glyphicon glyphicon-warning-sign'></span><span style='margin-left:10px;'>Error occured on server !</span>", config);
706 }
707
708 });
709 }
710 }
711 var _UpdateVariableValue = function(param) {
712 try {
713 var val = param.varVal;
714 var _graphId = iago.edm.sandbox.modules.TabControl.getSelectedTab("UniquelyIdentifiableTabControlId").tabId;
715 var gInfo = graphManager.getGraphInfo(_graphId);
716 var varPipeId = val.substring(2, val.indexOf("."));
717 var varName = val.substring(val.indexOf(".") + 1, val.length);
718 var varList = [];
719 param.GraphId = _graphId;
720 if (varPipeId == _graphId) {
721 varList = gInfo["VariableList"];
722 _.where(varList, {
723 "variable_name": varName
724 })[0]["variable_value"] = "";
725 param["pipeline_id"] = _graphId;
726 param["variables"] = varList;
727 helper.Variables.UpdateVariableValue(param);
728 }
729
730 } catch (ex) {
731 console.error("GCG variable Could not be updated");
732 }
733 }
734 var _CheckForDuplicateVariableNames = function(VariablesList) {
735 var VariableNameList = _.map(VariablesList, function(obj) {
736 return obj.VariableName
737 });
738
739 return (new Set(VariableNameList)).size === VariableNameList.length;
740 }
741 var _MakeVariables = function(params) {
742 var _graphId = iago.edm.sandbox.modules.TabControl.getSelectedTab("UniquelyIdentifiableTabControlId").tabId;
743 var modules = iago.edm.sandbox.modules;
744 var graphManager = modules.Manager.GraphManager;
745 var gInfo = graphManager.getGraphInfo(_graphId);
746 var currentGraph = gInfo;
747 var GlobalMeta = helper.GlobalMeta.Get(_graphId);
748 _UpdateAllGlobalMetaVariables(params.PipeData);
749 var configAPI = _functions.configAPI();
750 var HTML = '<div id="variableSection" class="left-shadow-overlay variableSection"></div>';
751
752 var box = bootbox.dialog({
753 message: HTML,
754 className: "GlobalVariableBox", //,
755 });
756
757 var _variableBox = $(".GlobalVariableBox");
758 $.when(helper.Variables.GetSystemVariable()).then(function() {
759 helper.enableVariables(params.VariablesList, _variableBox, {
760 bindWidget: _BindWidget,
761 getValue: _GetVariableValue,
762 setValue: _SetVariableValue
763 },
764 function(variablesSaved, action) {
765 var closeBox = function() {
766 if (action != "remove") {
767 bootbox.hideAll();
768 // box.hide();
769 }
770 }
771 if (!_CheckForDuplicateVariableNames(variablesSaved)) {
772 //show message
773 var Pipetext = $(".variableTitle").text();
774
775 $(".variableTitle").text("Cannot have same variable names");
776
777 setTimeout(function() {
778 $(".variableTitle").text(Pipetext);
779 }, 3000);
780 return;
781
782 }
783
784 // bootbox.hideAll();closeBox
785
786 _UpdateGlobalMetaVariables(_graphId, variablesSaved);
787
788 VariablesList = _MassageVariablesList(variablesSaved);
789 var ex = {};
790 ex["closebox"] = closeBox;
791 _SaveVariables(_graphId, VariablesList, params, ex);
792 //
793 }, params);
794 });
795
796
797 function _BindWidget(obj) {
798 var type = obj.VarType || obj.type;
799 var $row = obj.row;
800 var $element = $($row).find(".variableValue");
801 switch (type) {
802 case "DateTime":
803 {
804 $($row).find(".variableValue").remove();
805 $($row).find(".variableFormat").remove();
806 var varValue = $('<div>', {
807 type: 'text',
808 class: 'variableValue',
809 'id': iago.edm.sandbox.utils.generateUUID()
810 });
811 var varFormat = $('<input>', {
812 type: 'text',
813 class: 'variableFormat',
814 placeholder: "Enter Format"
815 })
816 $(varFormat).insertAfter($($row).find(".variableType"));
817 $(varValue).insertAfter($($row).find(".variableFormat"));
818 var opt = {
819 controlFormat: 'AsOfDate',
820 displayFormat: 'MMM DD,YYYY hh:mm A',
821 startDate: moment(new Date()).format(iago.isoDateFormat),
822 enableTimePicker: true,
823 isOptional: true
824 }
825 $element = $($row).find(".variableValue");
826 $($element).CustomDateControl(opt);
827 }
828 break;
829 case "Config":
830 var BlockConfigs = params.PipeData.BlockConfigs
831 var openedGraph = graphManager.getOpenGraphs();
832 $($element).intellisense({
833 "data": BlockConfigs.ConfigDictionary,
834 "mapping": BlockConfigs.Mapping,
835 "callback": $.noop,
836 "filter": $.noop,
837 "multipleMeta": undefined,
838 "GlobalMeta": helper.GlobalMeta.GetShareableMeta(currentGraph, openedGraph),
839 "Graph": openedGraph,
840 "CurrentGraph": currentGraph,
841 "extraInfo": {
842 "PipeLabels": params.PipeData.PipeLabelMapping,
843 //this is for block configs to open when
844 //variable is set from the source pipe variable block
845 //from pipe to pipe block variables transfer
846 "Source": "pipe"
847 }
848 });
849 break;
850 default:
851 break;
852 }
853 }
854
855 function _GetVariableValue(obj) {
856 var $row = obj.row;
857 var type = $($row).find(".variableType").val();
858 var element = $($row).find(".variableValue");
859 var result;
860 switch (type) {
861 case "DateTime":
862 result = $(element).CustomDateControl("getValue")
863 break
864 case "Config":
865 result = _getIntellisenseValue($(element).attr("id"),_variableBox);
866 break
867 default:
868 result = $(element).val();
869 break
870 }
871 //if intellisense _getIntellisenseValue
872 //if date time $(element).CustomDateControl("getValue");
873 // else normal value
874 return result;
875
876 }
877
878 function _SetVariableValue(obj) {
879 var $row = obj.row;
880 var type = $($row).find(".variableType").val();
881 var element = $($row).find(".variableValue");
882
883 switch (type) {
884 case "DateTime":
885 $(element).CustomDateControl("setValue", obj.VariableData.VariableValue);
886 $($row).find(".variableFormat").val(obj.VariableData.VariableFormat);
887 break
888 case "Config":
889 _setIntellisenseValue($(element).attr("id"), obj.VariableData.VariableValue,_variableBox);
890 break;
891 default:
892 $(element).val(obj.VariableData.VariableValue);
893 break
894 }
895 }
896
897
898 }
899
900 var _getBlockObjects = function() {
901
902 var _blockKeys = {
903 "Is_Custom": true,
904 "ExtractColumnName": "",
905 "ColumnName": "",
906 "Is_Primary": false,
907 "Is_Picked": true,
908 "Precision": 0,
909 "DefaultValue": "",
910 "HasDefaultColumn": "",
911 "Scale": 0,
912 "ColumnType": "string",
913 "Index": 0,
914 "Is_Unique": false,
915 "Is_Mandatory": false,
916 "Is_Lookup": false,
917 "Is_Key": false,
918 "Format": "",
919 "DummyRow": "",
920 "PII": false,
921 "UniqueGroupValue": "",
922 "Is_Header": false
923 }
924 return _blockKeys;
925 }
926
927 return {
928 setHeaderLabel: _setHeaderLabel,
929 headerTabHeaderContainer: $('[edm-section="configHeaderTabHeader"]'),
930 getBlockConfiguration: getBlockConfiguration,
931 getBlockObjectInfo: _getBlockObjects,
932 updateConfig: _updateBlockConfig,
933 getRecentConfigurations: _getRecentConfigurations,
934 getParentBlockConfiguration: _getParentBlockConfiguration,
935 setConfigBoxWidth: _setConfigContainerWidth,
936 enableIntellisense: _enableIntellisense,
937 updateGlobalMeta: helper.GlobalMeta.Update,
938 MakeVariables: _MakeVariables,
939 UpdateVariableValue: _UpdateVariableValue
940 };
941
942 });
943
944 var _init = function(options) {
945 _renderContainer = options.container;
946 var _blockInstanceId = options.blockInstanceId;
947 var _blockId = options.blockId;
948 };
949
950 var _bindRenderingContainer = function(options) {
951 var _container = options.container;
952 _renderContainer = _container;
953 };
954
955 var _openConfigForBlock = function(_graphId, _blockInstanceId, _blockId, itemType = "pipeline") {
956 advanceConfiguration = {
957 maxParallelInstances: 0,
958 useOptimization: false
959 };
960 var _self = this;
961
962 var _currentBlockEmptyConfig = null;
963
964 var configAPI = _functions.configAPI();
965 _blockInfo = graphManager.getBlockInfo(_graphId, _blockInstanceId);
966
967 var _parentBlockIds = graphManager.getParentBlockIds(_graphId, _blockInstanceId, itemType);
968 var _parentBlockId = "null";
969 var enableIntellisense = function(config) {
970
971 configAPI.enableIntellisense(config, _options, _currentBlockEmptyConfig, _blockInfo);
972 }
973 var enableRecentConfig = function(setter) {
974 var data = _options.blockConfiguration.recentConfigs;
975 if (data == null)
976 return null;
977 _blockInfo;
978 var element = GetRenderContainer({"containerType":"block"});//$(_renderContainer); //.find("#RecentConfigSuggetion #RecentConfigBox");
979 helper.enableRecentConfig(data, setter, element);
980 }
981
982 var getIntellisenseValue = function(elementId,containerId=null) {
983 var element;
984 if(containerId!=null)
985 {
986 element = $("#"+containerId).find($("#" + elementId));
987 }
988 else
989 {
990 element = $(_renderContainer).find($("#" + elementId));
991 }
992 var val;
993 try {
994 val = $(element).intellisense("GetValue");
995 return val;
996 } catch (err) {
997 val = $(element).val();
998 return val;
999 }
1000 }
1001 var setIntellisenseValue = function(elementId, value, blockPortId) {
1002 if (value == undefined) {
1003 value = "";
1004 }
1005 if (blockPortId != undefined && blockPortId != null)
1006 value = "$pvcs$__" + blockPortId + "$pvce$";
1007 var $element = $(_renderContainer).find($("#" + elementId));
1008 try {
1009 $($element).intellisense("SetValue", value);
1010 } catch (err) {
1011 if ($($element).val() == "") {
1012 $($element).attr("edm-intellisense-set", "true");
1013 }
1014 $($element).keyup(function() {
1015 if ($(this).val() == "") {
1016 $(this).attr("edm-intellisense-set", "true");
1017 } else {
1018 $(this).attr("edm-intellisense-set", "false");
1019 }
1020 })
1021 if (Object.prototype.toString.call(value) == "[object Object]") {
1022 $($element).val("");
1023 } else
1024 if (value.toString().indexOf("__") == -1) {
1025 $($element).val(value);
1026 } else {
1027 $($element).val("");
1028 }
1029 }
1030 }
1031
1032 var changeIntellisense = function(elementId, callback) {
1033 var $element = $(_renderContainer).find($("#" + elementId));
1034 $($element).intellisense("onChange", callback);
1035 }
1036 var isIntellisenseSelected = function(elementId) {
1037 var isValid = true;
1038 var $element = $(_renderContainer).find($("#" + elementId));
1039 try {
1040 var val = $($element).intellisense("GetValue");
1041 var valType = $($element).intellisense("GetFillType", val);
1042 if (valType == "StaticValue") {
1043 isValid = false;
1044 }
1045 } catch (err) {
1046 isValid = false;
1047 console.log("Value in the " + elementId + " is not selected from widget " + err)
1048 }
1049 return isValid;
1050 };
1051 var getIntellisenseEvaluatedValue = function(elementId) {
1052 var $element = $(_renderContainer).find($("#" + elementId));
1053 var val;
1054 try {
1055 val = $($element).intellisense("GetExpression");
1056 return val;
1057 } catch (err) {
1058 val = $($element).val();
1059 return val;
1060 }
1061 }
1062 if (_blockInfo.itemType == "pipeline") {
1063 (function() {
1064 var $pipeEl = $("[block-id=" + _blockInstanceId + "]").closest('[item-type]');
1065 var _graphId = $pipeEl.attr('block-id');
1066 graphManager.openVariableScreen({
1067 "VariablesLocation": "DroppedPipe",
1068 "Pipe_Id": _graphId
1069 });
1070 })();
1071 return;
1072 /*(function () { //Commented to enable variable thing
1073
1074 var $pipeEl = $(_self).closest('[item-type]');
1075
1076 var _graphRunIdOfSubPipeline = $pipeEl.attr('pipeline-run-id');
1077 var _graphId = $pipeEl.attr('block-id');
1078
1079 sandbox.broadcast(['graphManager.openPipeInExceptionMode'], {
1080 graphRunId : _graphRunIdOfSubPipeline,
1081 graphId : _graphId
1082 });
1083
1084 })();
1085 return;*/
1086 }
1087
1088
1089 if (self[_blockId]) {
1090
1091 // GET BLOCKS OWN Configuration
1092 configAPI.getBlockConfiguration(_blockInstanceId).then(function(blockConfgData) {
1093
1094 blockConfgData = JSON.tryParse(blockConfgData);
1095 //advanceConfiguration = null;
1096 if (blockConfgData != null && blockConfgData[_advancedConfigKey] != null) {
1097 advanceConfiguration = blockConfgData[_advancedConfigKey];
1098 }
1099
1100 _options = {
1101 blockInfo: graphManager.getBlockInfo(_graphId, _blockInstanceId),
1102 blockApi: {
1103 setBlockLabel: function(label) {
1104 $('[graph-id="' + _graphId + '"][block-instance-id="' + _blockInstanceId + '"]').find('[edm-control=blockLabel]').text(label.trim());
1105 },
1106 getMyPortInfo: function() {
1107 return sandbox.modules.Manager.GraphManager.getMyPortInfo(_graphId, _blockInstanceId);
1108 },
1109 getParsedFileColumnInfoObject: configAPI.getBlockObjectInfo
1110 },
1111 getTemplate: PrivilegeManager.GetEDMTemplate,
1112 applyPrivilegeOnDOM: PrivilegeManager.ApplyPrivilegeOnDOM,
1113 graphInfo: {
1114 graphId: _graphId
1115 },
1116 blockConfiguration: {
1117 update: configAPI.updateConfig,
1118 config: null,
1119
1120 // this could be unnecessary
1121 getBlockConfig: configAPI.getBlockConfiguration,
1122
1123 recentConfigs: null,
1124 commons: {
1125 schedulerConfigRenderer: schedulerHelper.renderSchedulerConfig({
1126 blockInstanceId: _blockInstanceId
1127 }).renderer,
1128 generalInfoRenderer: generalInfoHelper.renderGeneralInfo(_blockInfo, _graphId, advanceConfiguration).renderer,
1129 AuditHistoryRenderer: AuditHistoryHelper.renderAuditHistory(_blockInfo, _graphId).renderer,
1130 exceptionRenderer: BlockExceptionHelper.renderBlockException(_blockInfo, _graphId).renderer //blockExceptionHelper.renderBlockException(_blockInfo, _graphId).renderer
1131 }
1132
1133 },
1134 intellisense: {
1135 enable: enableIntellisense,
1136 getValue: getIntellisenseValue,
1137 getSelectionExpression: getIntellisenseEvaluatedValue,
1138 setValue: setIntellisenseValue,
1139 onChange: changeIntellisense,
1140 isSelection: isIntellisenseSelected,
1141 setCurrentConfig: function(currentConfig) {
1142 _currentBlockEmptyConfig = currentConfig
1143 }
1144 },
1145 enableRecentConfig: enableRecentConfig,
1146 renderContainer: $(_renderContainer).find('[edm-section="configContainerBody"]'),
1147 sandbox: {
1148 header: {
1149 setHeaderLabel: configAPI.setHeaderLabel,
1150 headerTabHeaderContainer: configAPI.headerTabHeaderContainer
1151 }
1152 },
1153 variableOperations: {
1154 "update": configAPI.UpdateVariableValue
1155 }
1156 };
1157 if (_parentBlockIds.length > 0) {
1158 _parentBlockId = _parentBlockIds[0];
1159 // var _temp[_parentBlockIds[0]];
1160 _options.parentBlocks = {};
1161 _options.parentBlocks[_parentBlockId] = {
1162 config: null
1163 }
1164 }
1165
1166 var _openConfigScreen = function() {
1167
1168 /* helper.enableVariables(_blockVariablesToAppend, _renderContainer, {
1169 enableIntellisense : enableIntellisense,
1170 getIntellisenseValue : getIntellisenseValue,
1171 setIntellisenseValue : setIntellisenseValue
1172 }, function (variablesSaved) {
1173 _blockVariablesToAppend = variablesSaved;
1174 // enableIntellisense();
1175 });*/
1176 // var _renderContainer=GetRenderContainer({"containerType":"block"});
1177 //debugger;
1178 _renderContainer=GetRenderContainer({"containerType":"block"});
1179 $(_renderContainer).find("#RecentConfigSuggetion").addClass("goHide");
1180 new self[_blockId]().init(_options);
1181 helper.scrollBlock(_blockInstanceId, true);
1182 // Set the effect type
1183 var effect = 'slide';
1184
1185 // Set the options for the effect type chosen
1186 var options = {
1187 direction: 'right'
1188 };
1189
1190 // Set the duration (default: 400 milliseconds)
1191 var duration = 500;
1192
1193 // $(_renderContainer).toggle(effect, options, duration);
1194 $(_renderContainer).toggle();
1195 var _Conf = _options.blockConfiguration.config || {};
1196 helper.isBlockConfigIntellisenseOK(_Conf, _blockInstanceId, _renderContainer);
1197 $('[edm-section="closeConfiguration"]').unbind('click').bind('click', function() {
1198 helper.scrollBlock(_blockInstanceId, false);
1199 $(_renderContainer).find('[edm-section="configContainerBody"]').html('')
1200 // $(_renderContainer).toggle(effect, options, duration);
1201 $(_renderContainer).toggle();
1202 });
1203 if($('[edm-control="footerMenu"]').find('[edm-section="RestoreTabActions"]').is(':visible')){
1204 $('[edm-control="footerMenu"]').find('[edm-section="RestoreTabActions"]').find('[edm-button="RestorePipeline"]').removeAttr('disabled');
1205 $('[edm-control="footerMenu"]').find('[edm-section="RestoreTabActions"]').find('[edm-button="CancelRestore"]').removeAttr('disabled');
1206 $('.Delete-Container').find('[edm-button="btnNo"]').removeAttr('disabled');
1207 $('.Delete-Container').find('[edm-button="btnYes"]').removeAttr('disabled');
1208 }
1209
1210 };
1211
1212 (function() {
1213
1214
1215
1216 // helper.enableVariables(_blockVariablesToAppend, _renderContainer, { enableIntellisense: enableIntellisense, getIntellisenseValue: getIntellisenseValue, setIntellisenseValue: setIntellisenseValue }, function (variablesSaved) {
1217 // _blockVariablesToAppend = variablesSaved;
1218 // enableIntellisense();
1219 // });
1220
1221 // GET BLOCKS Recent Configuration
1222 configAPI.getRecentConfigurations(_blockId).then(function(recentConfigData) {
1223
1224 _blockGetConfigTimestamp = blockConfgData ? blockConfgData["__timestamp"] || null : null;
1225
1226
1227
1228 //adding the block instance id to cache
1229 _cache.blockConfigurations[_blockInstanceId] = blockConfgData;
1230
1231 var _recentConfigData = JSON.tryParse(recentConfigData);
1232
1233 if (blockConfgData && blockConfgData["_extraInfo_"] && blockConfgData["_extraInfo_"]["Variables"]) {
1234 _blockVariablesToAppend = blockConfgData["_extraInfo_"]["Variables"];
1235 if (Array.isArray(_blockVariablesToAppend)) { //Fall back for array to object
1236 _blockVariablesToAppend = {};
1237 }
1238
1239 } else {
1240 _blockVariablesToAppend = {};
1241 }
1242
1243 var _op = _options;
1244 if (_op && _op.blockConfiguration) {
1245
1246 _op.blockConfiguration.config = JSON.tryParse(blockConfgData);
1247 _op.blockConfiguration.recentConfigs = _recentConfigData;
1248 }
1249
1250 if (_parentBlockIds.length > 0) {
1251 // fix this single api call into n asyn calls for every parent block
1252 configAPI.getParentBlockConfiguration(_graphId, _blockInstanceId).then(function(parentConfig) {
1253 // apply parent config
1254 _options.ParentBlockConfigs = JSON.tryParse(parentConfig);
1255 _openConfigScreen();
1256
1257 });
1258 } else {
1259
1260 _openConfigScreen();
1261 }
1262 });
1263
1264
1265 })();
1266
1267 });
1268
1269 } // if ender
1270
1271
1272 };
1273 var _strapConfigOpener = function(el) {
1274
1275 // TODO : ugly fix the closure assignment of the graph manager
1276 modules = iago.edm.sandbox.modules;
1277 graphManager = modules.Manager.GraphManager
1278 //graphManager = modules.Manager.GraphManagerNew;
1279 if (_renderContainer == undefined) {
1280 _renderContainer = GetRenderContainer({"containerType":"block"});
1281 }
1282 var self2 = self;
1283 var container = _renderContainer;
1284
1285 //bind the flat menu to open when the block is clicked
1286 var isconfigItemCLicked = false;
1287 var elToBindWithFlatMenu = ($(el).first('.flatMenu') || $(el).find('.flatMenu'));
1288 var DELAY = 200,
1289 clicks = 0,
1290 timer = null;
1291 $(elToBindWithFlatMenu).unbind('click').bind('click', function() {
1292 clicks++;
1293 var parentThis = this;
1294 var _graphId = $(this).attr("graph-id");
1295 var _blockInstanceId = $(this).attr("block-instance-id");
1296 var itemType = $(this).attr("item-type");
1297 var _blockId = $(this).attr('block-id');
1298 if (typeof _graphId !== 'undefined') {
1299 _graphIdGlobal = _graphId;
1300
1301 }
1302 var _privilege = iago.extensions.pipelinePrivilegeObj;
1303 //var priv = _privilege.CheckIfPrivilegeAppliedOnPipeId(_blockInstanceId);
1304 if(_privilege.CheckIfPrivilegeAppliedOnPipe(_blockInstanceId)){
1305 return;
1306 }
1307 //var _blockInstanceId = flatMenuSection.attr("block-instance-id");
1308 if (clicks === 1) {
1309 timer = setTimeout(function() {
1310 //single click
1311
1312 // if (isconfigItemCLicked)
1313 // {
1314 //
1315 // }
1316
1317 var h = helper;
1318
1319 var _itemTypeClickedOn = $(el).attr('item-type');
1320 var showEye = 'inline';
1321 var showBar = 'inline';
1322 if (_itemTypeClickedOn.toLowerCase() == _itemTypes.Pipeline.toLowerCase()) {
1323 // show them
1324 } else if (_itemTypeClickedOn.toLowerCase() == _itemTypes.Block.toLowerCase()) {
1325 showEye = 'none';
1326 showBar = 'none';
1327 }
1328
1329 var isFlatMenuOpen = $(el).find('[edm-control="flatMenu"]');
1330 //find the flat menu section in the el
1331 var flatMenuSection = ($(el).find('[edm-section="flatMenu"]') || $(this).first('[edm-section="flatMenu"]'));
1332 var tempGraphId = flatMenuSection.attr('graph-id');
1333
1334 //var _blockInstanceId = flatMenuSection.attr("block-instance-id");
1335
1336 var gInfo = graphManager.getGraphInfo(tempGraphId);
1337 var isGraphRunning = gInfo.state === 'running';
1338 var displayRunningPipelineActions = (isGraphRunning) ? 'inline' : 'none';
1339
1340 var _isPipelineRunnning = (function() {
1341
1342 if (gInfo["RunMessages"] && gInfo["RunMessages"]["blockMessages"] && gInfo["RunMessages"]["blockMessages"][_blockInstanceId]) {
1343 return 'inline';
1344 } else {
1345 return 'none';
1346 }
1347 });
1348
1349 $('[edm-control="flatMenu"]').remove();
1350
1351 if (isFlatMenuOpen.length == 0) {
1352 $(flatMenuSection).html('<div edm-control="flatMenu" style="text-align: center; height: 27px;' +
1353 'position: absolute; top: -6px; width: 150px; left: -15px; background-color: rgb(255, 255, 255); z-index: 0; border: 1px solid rgb(223, 223, 223); border-radius: 5px;">' +
1354 '<span style="display:' + 'none' + ';" class="glyphicon glyphicon-pause flatMenuOption" toggle="tooltip" title="Running Pipeline Action"></span><span style="display:' + showEye /*displayRunningPipelineActions*/ + ';" class="glyphicon glyphicon-eye-open flatMenuOption" toggle="tooltip" title="Preview Block" edm-control="previewBlockData">' +
1355 '</span> <span edm-control="showPipelineExceptionSummary" title="Exception Summary" class="fa fa-bars flatMenuOption" toggle="tooltip" title="Exception Summary" style="display:' + showBar /*displayRunningPipelineActions*/ + ';"></span> <span edm-control="downloadFileBtn" toggle="tooltip" title="Download File" class="glyphicon glyphicon-download-alt flatMenuOption">' +
1356 '</span><span edm-control="copyBlock" class="fa fa-copy flatMenuOption" toggle="tooltip" title="Copy Block"></span>' +
1357 '<span edm-control="deleteItem" privilege_name="Edit EDM Pipe" control_id="Delete_Item" class="glyphicon glyphicon-trash flatMenuOption" toggle="tooltip" title="Delete Block"></span>' +
1358 '<span edm-control="configOpener" class="glyphicon glyphicon-cog flatMenuOption" toggle="tooltip" title="Show Config"></span><span class="fa fa-circle flatMenuOption" edm-control="blockDebugger" aria-hidden="true"></span> </div>');
1359 }
1360 flatMenuSection = PrivilegeManager.ApplyPrivilegeOnDOM(flatMenuSection);
1361 // check for concurrency
1362 sandbox.broadcast(['deleteBlock.Reset'], {
1363 pipelineId: _graphId
1364 });
1365
1366 if ($(elToBindWithFlatMenu).attr('block-id') === 'CsMarginFileExtractorBlock' && isGraphRunning) {
1367 $('[edm-control="downloadFileBtn"]').css({
1368 'display': 'inline-block'
1369 });
1370 } else {
1371 $('[edm-control="downloadFileBtn"]').css({
1372 'display': 'none'
1373 });
1374 }
1375 $('[edm-control="downloadFileBtn"]').unbind('click').bind('click', function() {
1376 window.location.href = iago.baseUrl + "/Modules/EDM/MarginDetails.csv";
1377 });
1378
1379 //TODO // this going inside and then parents is overhead
1380 //var _graphId=$(parentThis).attr('graph-id');
1381 //var _graphId = $(this).attr('graph-id'); // $(flatMenuSection).closest('[graph-id]').attr('graph-id')
1382 ///$(flatMenuSection).find('[edm-control="configOpener"]').parents('[edm-section="flatMenu"]').attr('graph-id');
1383
1384
1385 //_graphIdGlobal = _graphId;
1386
1387 var _blockId = $(flatMenuSection).find('[edm-control="configOpener"]').parents('[edm-section="flatMenu"]').attr('block-id');
1388 var _blockInstanceId = $(flatMenuSection).find('[edm-control="configOpener"]').parents('[edm-section="flatMenu"]').attr('block-instance-id');
1389
1390 $('[edm-control="previewBlockData"]').click(function() {
1391
1392 // check item type
1393
1394 var _itemType = $(this).closest('[item-type]').attr('item-type');
1395 if (_itemType && _itemType.trim() != "" && _itemType.trim() == "pipeline") {
1396
1397 var $pipeEl = $(this).closest('[item-type]');
1398
1399 var _graphRunIdOfSubPipeline = $pipeEl.attr('pipeline-run-id');
1400 var _graphId = $pipeEl.attr('block-id');
1401
1402 sandbox.broadcast(['graphManager.openPipeInExceptionMode'], {
1403 graphRunId: _graphRunIdOfSubPipeline,
1404 graphId: _graphId
1405 });
1406
1407 //graphRunHelper.openPipeInExceptionMode(_graphId, _graphRunIdOfSubPipeline);
1408 } else {
1409 sandbox.broadcast(['previewBlockData'], {
1410 graphInfo: gInfo,
1411 blockInfo: graphManager.getBlockInfo(_graphId, _blockInstanceId)
1412 });
1413 sandbox.broadcast(['configManager.showBlockLevelMessages'], {
1414 blockInstanceId: _blockInstanceId,
1415 graphId: _graphId
1416 });
1417 }
1418 });
1419
1420 $('[edm-control="showPipelineExceptionSummary"]').click(function(event) {
1421
1422 // this will scroll down to bottom of the screen and show the hierarchial pipeline exception summary
1423
1424 var _itemType = $(this).closest('[item-type]').attr('item-type');
1425 if (_itemType && _itemType.trim() != "" && _itemType.trim() == "pipeline") {
1426
1427 var $pipeEl = $(this).closest('[item-type]');
1428
1429 var _graphRunIdOfSubPipeline = $pipeEl.attr('pipeline-run-id');
1430 var _graphId = $pipeEl.attr('block-id');
1431
1432 var _pipeLabel = $pipeEl.find('[edm-control="blockLabel"]').text().trim();
1433
1434 sandbox.broadcast(['openPipelineExceptionSummary'], {
1435 graphInfo: null,
1436 blockInfo: null,
1437 pipelineRunId: _graphRunIdOfSubPipeline,
1438 pipelineName: _pipeLabel,
1439 pipelineId: _graphId,
1440 scrollTo: true
1441 });
1442
1443 }
1444 event.stopPropagation();
1445 });
1446
1447 // DELETE
1448 $('[edm-control="deleteItem"]').click(function() {
1449 var $bootBox = bootbox.dialog({
1450 message: $('[edm-section="DeleteContentContainer"]').html(),
1451 title: 'Confirmation',
1452 onEscape: true,
1453 draggable: true,
1454 className: "Delete-Container"
1455 });
1456 UIfunctions._deleteBlock();
1457
1458 /// who should delete me - tab control or the graph manmager or the config handler . take design suggesstion
1459
1460 // get the plumb instance ffrom the graph managere
1461 //var _plumbManagerTemp = graphs[_graphId].plumbInstance;--
1462
1463 //var a = $(elToBindWithFlatMenu);--
1464 //_plumbManagerTemp.remove(a[0]);--
1465 // _plumbManagerTemp.remove(a);
1466 // jsPlumb.select({ source: a }).detachAll();
1467 // jsPlumb.select({ target: a }).detach();
1468 //_plumbManagerTemp.hide(a[0], true);
1469 //$(elToBindWithFlatMenu).hide();
1470 //_plumbManagerTemp.repaintEverything();--
1471 });
1472 $('[edm-control="copyBlock"]').click(function(event) {
1473
1474 var BlockDiv = $(event.target).parents("[item-type=block]");
1475 var GraphId = $(BlockDiv).attr("graph-id");
1476 //BlockDiv.push(GraphId);
1477 sandbox.broadcast(['CopySelectedBlocks'], {
1478 SingleBlock: BlockDiv,
1479 copyGraphId: GraphId
1480 });
1481
1482 // UIfunctions._copyBlock(BlockDiv);
1483 });
1484
1485 var UIfunctions = {
1486
1487 _deleteBlock: function() {
1488 $('[edm-section="DeleteFooter"]').find('[edm-button="btnYes"]').on('click', function() {
1489 sandbox.broadcast(['deleteItemFromGraph'], {
1490 graphInfo: gInfo,
1491 blockInfo: graphManager.getBlockInfo(_graphId, _blockInstanceId)
1492 });
1493 sandbox.broadcast(['SaveGraph'], {
1494 graphId: _graphId,
1495 graphName: graphs[_graphId].graphName
1496 });
1497
1498 var _plumbManagerTemp = graphs[_graphId].plumbInstance;
1499 var a = $(elToBindWithFlatMenu);
1500
1501 _plumbManagerTemp.remove(a[0]);
1502 _plumbManagerTemp.repaintEverything();
1503 bootbox.hideAll();
1504 });
1505
1506 $('[edm-section="DeleteFooter"]').find('[edm-button="btnNo"]').on('click', function() {
1507 bootbox.hideAll();
1508 });
1509 }
1510
1511 };
1512
1513
1514 // bind the config opener
1515 $(flatMenuSection).find('[edm-control="configOpener"]').unbind('click').bind('click', function() {
1516 var itemType = $(this).closest("[item-type]").attr("item-type");
1517 _openConfigForBlock(_graphId, _blockInstanceId, _blockId, itemType);
1518 });
1519
1520 // debugger
1521 $(flatMenuSection).find('[edm-control="blockDebugger"]').unbind('click').bind('click', function() {
1522
1523 /*
1524 This will show the bell icon when debugger is set or removed
1525 */
1526
1527 if ($(this).parents("[item-type='block']").find(".debugBell").css("display") == "none") {
1528
1529 $(this).parents("[item-type='block']").find(".debugBell").css("display", "block");
1530
1531 } else {
1532 $(this).parents("[item-type='block']").find(".debugBell").css("display", "none");
1533 }
1534
1535 sandbox.broadcast(["blockDebugClick"], {
1536 pipelineId: _graphId,
1537 blockInstanceId: _blockInstanceId
1538 });
1539 })
1540
1541
1542 //end
1543 clicks = 0;
1544 }, DELAY);
1545 } else {
1546
1547 clearTimeout(timer);
1548 if (itemType === "pipeline" && clicks % 2 == 0) {
1549 clicks = 0;
1550 return;
1551 }
1552 _openConfigForBlock(_graphId, _blockInstanceId, _blockId, itemType);
1553
1554 clicks = 0;
1555 }
1556 })
1557 .bind('dblclick', function(e) {
1558 e.preventDefault();
1559 });
1560
1561 };
1562
1563 return {
1564 init: _init,
1565 strapConfigOpener: _strapConfigOpener,
1566 bindRenderingContainer: _bindRenderingContainer,
1567 configAPI: _configAPI,
1568 configHelper: helper
1569 };
1570
1571 })();
1572
1573 (function subscribe() {
1574
1575 sandbox.subscribe(['tabControl.tabContentAdded'], function(data) {
1576 _functions.strapConfigOpener(data.el);
1577 });
1578
1579 sandbox.subscribe(['bindContainer'], function(data) {
1580 _functions.bindRenderingContainer(data);
1581 });
1582
1583
1584
1585 })();
1586
1587 (function() {
1588
1589 if (!JSON.tryParse) {
1590 JSON.tryParse = function(s) {
1591 var _res = s;
1592 try {
1593 _res = JSON.parse(s);
1594 return _res;
1595 } catch (e) {
1596 return _res;
1597 }
1598 }
1599 }
1600 })();
1601
1602 return {
1603 ConfigApi: _functions.configAPI(),
1604 MetaHelper: _functions.configHelper
1605
1606 }
1607
1608};
1609
1610iago.edm.blocks = iago.edm.classes.Modules.prototype.ConfigManager.prototype;
1611iago.edm.classes.Modules.prototype.ConfigManager.Extensions = [];