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();
|
|
}
|
|
}
|
|
};
|
|
|
|
}]);
|
|
|