You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					171 lines
				
				6.8 KiB
			
		
		
			
		
	
	
					171 lines
				
				6.8 KiB
			| 
											2 years ago
										 | /* Copyright 2005-2015 Alfresco Software, Ltd. | ||
|  |  * | ||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||
|  |  * you may not use this file except in compliance with the License. | ||
|  |  * You may obtain a copy of the License at | ||
|  |  * | ||
|  |  *      http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  |  * | ||
|  |  * Unless required by applicable law or agreed to in writing, software | ||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
|  |  * See the License for the specific language governing permissions and | ||
|  |  * limitations under the License. | ||
|  |  */ | ||
|  | 'use strict'; | ||
|  | 
 | ||
|  | // Decision Table service
 | ||
|  | angular.module('flowableModeler').service('DecisionTableService', [ '$rootScope', '$http', '$q', '$timeout', '$translate', | ||
|  |     function ($rootScope, $http, $q, $timeout, $translate) { | ||
|  | 
 | ||
|  |         var httpAsPromise = function(options) { | ||
|  |             var deferred = $q.defer(); | ||
|  |             $http(options). | ||
|  |                 success(function (response, status, headers, config) { | ||
|  |                     deferred.resolve(response); | ||
|  |                 }) | ||
|  |                 .error(function (response, status, headers, config) { | ||
|  |                     console.log('Something went wrong during http call:' + response); | ||
|  |                     deferred.reject(response); | ||
|  |                 }); | ||
|  |             return deferred.promise; | ||
|  |         }; | ||
|  | 
 | ||
|  |         this.filterDecisionTables = function(filter) { | ||
|  |             return httpAsPromise( | ||
|  |                 { | ||
|  |                     method: 'GET', | ||
|  |                     url: FLOWABLE.APP_URL.getDecisionTableModelsUrl(), | ||
|  |                     params: {filter: filter} | ||
|  |                 } | ||
|  |             ); | ||
|  |         }; | ||
|  | 
 | ||
|  |         /** | ||
|  |          * Fetches the details of a decision table. | ||
|  |          */ | ||
|  |         this.fetchDecisionTableDetails = function(modelId, historyModelId) { | ||
|  |             var url = historyModelId ? | ||
|  |                 FLOWABLE.APP_URL.getDecisionTableModelHistoryUrl(encodeURIComponent(modelId), encodeURIComponent(historyModelId)) : | ||
|  |                 FLOWABLE.APP_URL.getDecisionTableModelUrl(encodeURIComponent(modelId)); | ||
|  |             return httpAsPromise({ method: 'GET', url: url }); | ||
|  |         }; | ||
|  | 
 | ||
|  |         function cleanUpModel (decisionTableDefinition) { | ||
|  |             delete decisionTableDefinition.isEmbeddedTable; | ||
|  |             var expressions = (decisionTableDefinition.inputExpressions || []).concat(decisionTableDefinition.outputExpressions || []); | ||
|  |             if (decisionTableDefinition.rules && decisionTableDefinition.rules.length > 0) { | ||
|  |                 decisionTableDefinition.rules.forEach(function (rule) { | ||
|  |                     var headerExpressionIds = []; | ||
|  |                     expressions.forEach(function(def){ | ||
|  |                         headerExpressionIds.push(def.id); | ||
|  |                     }); | ||
|  | 
 | ||
|  |                     // Make sure that the rule has all header ids defined as attribtues
 | ||
|  |                     headerExpressionIds.forEach(function(id){ | ||
|  |                         if (!rule.hasOwnProperty(id)) { | ||
|  |                             rule[id] = ""; | ||
|  |                         } | ||
|  |                     }); | ||
|  | 
 | ||
|  |                     // Make sure that the rule does not have an attribute that is not a header id
 | ||
|  |                     delete rule.$$hashKey; | ||
|  |                     for (var id in rule) { | ||
|  |                         if (headerExpressionIds.indexOf(id) === -1) { | ||
|  |                             delete rule[id]; | ||
|  |                             delete rule.validationErrorMessages; | ||
|  |                         } | ||
|  |                     } | ||
|  | 
 | ||
|  |                 }); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         this.saveDecisionTable = function (data, name, key, description, saveCallback, errorCallback) { | ||
|  | 
 | ||
|  |             data.decisionTableRepresentation = { | ||
|  |             	name: name, | ||
|  |             	key: key | ||
|  |             }; | ||
|  | 
 | ||
|  |             if (description && description.length > 0) { | ||
|  |                 data.decisionTableRepresentation.description = description; | ||
|  |             } | ||
|  | 
 | ||
|  |             var decisionTableDefinition = angular.copy($rootScope.currentDecisionTable); | ||
|  | 
 | ||
|  |             data.decisionTableRepresentation.decisionTableDefinition = decisionTableDefinition; | ||
|  |             decisionTableDefinition.key = key; | ||
|  |             decisionTableDefinition.rules = angular.copy($rootScope.currentDecisionTableRules); | ||
|  | 
 | ||
|  |             decisionTableDefinition.forceDMN11 = data.forceDMN11; | ||
|  | 
 | ||
|  |             html2canvas(jQuery('#decision-table-editor'), { | ||
|  |                 onrendered: function (canvas) { | ||
|  |                     var scale = canvas.width / 300.0; | ||
|  | 
 | ||
|  |                     var extra_canvas = document.createElement('canvas'); | ||
|  |                     extra_canvas.setAttribute('width', 300); | ||
|  |                     extra_canvas.setAttribute('height', canvas.height / scale); | ||
|  | 
 | ||
|  |                     var ctx = extra_canvas.getContext('2d'); | ||
|  |                     ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, 300, canvas.height / scale); | ||
|  | 
 | ||
|  |                     data.decisionTableImageBase64 = extra_canvas.toDataURL('image/png'); | ||
|  | 
 | ||
|  |                     $http({ | ||
|  | 	                    method: 'PUT', | ||
|  | 	                    url: FLOWABLE.APP_URL.getDecisionTableModelUrl($rootScope.currentDecisionTable.id), | ||
|  | 	                    data: data}). | ||
|  | 	                 | ||
|  | 	                	success(function (response, status, headers, config) { | ||
|  | 
 | ||
|  |                             if (saveCallback) { | ||
|  |                                 saveCallback(); | ||
|  |                             } | ||
|  |                         }). | ||
|  |                         error(function (response, status, headers, config) { | ||
|  |                             if (errorCallback) { | ||
|  |                                 errorCallback(response); | ||
|  |                             } | ||
|  |                         }); | ||
|  |                 } | ||
|  |             }); | ||
|  |         }; | ||
|  | 
 | ||
|  |         this.getDecisionTables = function (decisionTableIds, callback) { | ||
|  | 
 | ||
|  |             if (decisionTableIds.length > 0) { | ||
|  | 
 | ||
|  |                 var decisionTableIdParams = ''; | ||
|  |                 for (var i = 0; i < decisionTableIds.length; i++) { | ||
|  |                     if (decisionTableIdParams.length > 0) { | ||
|  |                         decisionTableIdParams += '&'; | ||
|  |                     } | ||
|  |                     decisionTableIdParams += 'decisionTableId=' + decisionTableIds[i]; | ||
|  |                 } | ||
|  |                 if (decisionTableIdParams.length > 0) { | ||
|  |                     decisionTableIdParams += '&'; | ||
|  |                 } | ||
|  |                 decisionTableIdParams += 'version=' + Date.now(); | ||
|  | 
 | ||
|  |                 $http({method: 'GET', url: FLOWABLE.APP_URL.getDecisionTableModelValuesUrl(decisionTableIdParams)}). | ||
|  |                     success(function (data) { | ||
|  |                         if (callback) { | ||
|  |                             callback(data); | ||
|  |                         } | ||
|  |                     }). | ||
|  | 
 | ||
|  |                     error(function (data) { | ||
|  |                         console.log('Something went wrong when fetching decision table(s):' + JSON.stringify(data)); | ||
|  |                     }); | ||
|  |                      | ||
|  |             } else { | ||
|  |                 if (callback) { | ||
|  |                     callback(); | ||
|  |                 } | ||
|  |             } | ||
|  |         }; | ||
|  | 
 | ||
|  |     }]); |