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.
		
		
		
		
		
			
		
			
				
					
					
						
							170 lines
						
					
					
						
							6.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							170 lines
						
					
					
						
							6.8 KiB
						
					
					
				| /* 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(); | |
|                 } | |
|             } | |
|         }; | |
| 
 | |
|     }]);
 | |
| 
 |