thingsboard/ui/src/app/api/rule-chain.service.js

303 lines
10 KiB
JavaScript
Raw Normal View History

2018-03-14 20:43:56 +02:00
/*
2019-02-01 16:39:33 +02:00
* Copyright © 2016-2019 The Thingsboard Authors
2018-03-14 20:43:56 +02:00
*
* 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.
*/
export default angular.module('thingsboard.api.ruleChain', [])
.factory('ruleChainService', RuleChainService).name;
/*@ngInject*/
2018-03-28 11:03:11 +03:00
function RuleChainService($http, $q, $filter, $ocLazyLoad, $translate, types, componentDescriptorService) {
2018-03-21 14:56:16 +02:00
var ruleNodeComponents = null;
2018-03-14 20:43:56 +02:00
var service = {
getRuleChains: getRuleChains,
getRuleChain: getRuleChain,
saveRuleChain: saveRuleChain,
2018-05-15 17:47:00 +03:00
setRootRuleChain: setRootRuleChain,
2018-03-14 20:43:56 +02:00
deleteRuleChain: deleteRuleChain,
getRuleChainMetaData: getRuleChainMetaData,
2018-03-21 14:56:16 +02:00
saveRuleChainMetaData: saveRuleChainMetaData,
getRuleNodeComponents: getRuleNodeComponents,
getRuleNodeComponentByClazz: getRuleNodeComponentByClazz,
2018-03-21 14:56:16 +02:00
getRuleNodeSupportedLinks: getRuleNodeSupportedLinks,
2018-06-18 14:33:50 +03:00
ruleNodeAllowCustomLinks: ruleNodeAllowCustomLinks,
2018-04-05 20:57:09 +03:00
resolveTargetRuleChains: resolveTargetRuleChains,
testScript: testScript,
getLatestRuleNodeDebugInput: getLatestRuleNodeDebugInput
2018-03-14 20:43:56 +02:00
};
return service;
2018-05-15 17:47:00 +03:00
function getRuleChains (pageLink, config) {
2018-03-14 20:43:56 +02:00
var deferred = $q.defer();
2018-05-15 17:47:00 +03:00
var url = '/api/ruleChains?limit=' + pageLink.limit;
2018-03-14 20:43:56 +02:00
if (angular.isDefined(pageLink.textSearch)) {
url += '&textSearch=' + pageLink.textSearch;
}
if (angular.isDefined(pageLink.idOffset)) {
url += '&idOffset=' + pageLink.idOffset;
}
if (angular.isDefined(pageLink.textOffset)) {
url += '&textOffset=' + pageLink.textOffset;
}
$http.get(url, config).then(function success(response) {
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
2018-05-15 17:47:00 +03:00
function getRuleChain(ruleChainId, config) {
2018-03-14 20:43:56 +02:00
var deferred = $q.defer();
2018-05-15 17:47:00 +03:00
var url = '/api/ruleChain/' + ruleChainId;
2018-03-14 20:43:56 +02:00
$http.get(url, config).then(function success(response) {
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
2018-05-15 17:47:00 +03:00
function saveRuleChain(ruleChain) {
2018-03-14 20:43:56 +02:00
var deferred = $q.defer();
2018-05-15 17:47:00 +03:00
var url = '/api/ruleChain';
$http.post(url, ruleChain).then(function success(response) {
2018-03-14 20:43:56 +02:00
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
2018-05-15 17:47:00 +03:00
function setRootRuleChain(ruleChainId) {
2018-03-14 20:43:56 +02:00
var deferred = $q.defer();
2018-05-15 17:47:00 +03:00
var url = '/api/ruleChain/' + ruleChainId + '/root';
$http.post(url).then(function success(response) {
2018-03-14 20:43:56 +02:00
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
function deleteRuleChain(ruleChainId) {
var deferred = $q.defer();
var url = '/api/ruleChain/' + ruleChainId;
$http.delete(url).then(function success() {
deferred.resolve();
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
function getRuleChainMetaData(ruleChainId, config) {
var deferred = $q.defer();
var url = '/api/ruleChain/' + ruleChainId + '/metadata';
$http.get(url, config).then(function success(response) {
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
function saveRuleChainMetaData(ruleChainMetaData) {
var deferred = $q.defer();
var url = '/api/ruleChain/metadata';
$http.post(url, ruleChainMetaData).then(function success(response) {
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
2018-03-23 10:41:29 +02:00
function getRuleNodeSupportedLinks(component) {
var relationTypes = component.configurationDescriptor.nodeDefinition.relationTypes;
2018-06-18 14:33:50 +03:00
var linkLabels = {};
2018-03-23 10:41:29 +02:00
for (var i=0;i<relationTypes.length;i++) {
2018-06-18 14:33:50 +03:00
var label = relationTypes[i];
linkLabels[label] = {
name: label,
value: label
};
2018-03-23 10:41:29 +02:00
}
return linkLabels;
2018-03-21 14:56:16 +02:00
}
2018-06-18 14:33:50 +03:00
function ruleNodeAllowCustomLinks(component) {
return component.configurationDescriptor.nodeDefinition.customRelations;
}
function getRuleNodeComponents() {
2018-03-21 14:56:16 +02:00
var deferred = $q.defer();
if (ruleNodeComponents) {
deferred.resolve(ruleNodeComponents);
2018-03-21 14:56:16 +02:00
} else {
loadRuleNodeComponents().then(
(components) => {
2018-03-28 11:03:11 +03:00
resolveRuleNodeComponentsUiResources(components).then(
(components) => {
ruleNodeComponents = components;
ruleNodeComponents.push(
types.ruleChainNodeComponent
);
2018-05-09 10:14:41 +03:00
ruleNodeComponents.sort(
(comp1, comp2) => {
var result = comp1.type.localeCompare(comp2.type);
if (result == 0) {
result = comp1.name.localeCompare(comp2.name);
}
return result;
}
);
2018-03-28 11:03:11 +03:00
deferred.resolve(ruleNodeComponents);
},
() => {
deferred.reject();
}
2018-03-21 14:56:16 +02:00
);
},
() => {
deferred.reject();
}
);
}
return deferred.promise;
}
2018-03-28 11:03:11 +03:00
function resolveRuleNodeComponentsUiResources(components) {
var deferred = $q.defer();
var tasks = [];
for (var i=0;i<components.length;i++) {
var component = components[i];
tasks.push(resolveRuleNodeComponentUiResources(component));
}
$q.all(tasks).then(
(components) => {
deferred.resolve(components);
},
() => {
deferred.resolve(components);
}
);
return deferred.promise;
}
function resolveRuleNodeComponentUiResources(component) {
var deferred = $q.defer();
var uiResources = component.configurationDescriptor.nodeDefinition.uiResources;
if (uiResources && uiResources.length) {
var tasks = [];
for (var i=0;i<uiResources.length;i++) {
var uiResource = uiResources[i];
tasks.push($ocLazyLoad.load(uiResource));
}
$q.all(tasks).then(
() => {
deferred.resolve(component);
},
() => {
component.configurationDescriptor.nodeDefinition.uiResourceLoadError = $translate.instant('rulenode.ui-resources-load-error');
deferred.resolve(component);
}
)
} else {
deferred.resolve(component);
}
return deferred.promise;
}
function getRuleNodeComponentByClazz(clazz) {
var res = $filter('filter')(ruleNodeComponents, {clazz: clazz}, true);
2018-03-21 14:56:16 +02:00
if (res && res.length) {
return res[0];
2018-03-21 14:56:16 +02:00
}
2018-06-18 14:33:50 +03:00
var unknownComponent = angular.copy(types.unknownNodeComponent);
unknownComponent.clazz = clazz;
unknownComponent.configurationDescriptor.nodeDefinition.details = "Unknown Rule Node class: " + clazz;
return unknownComponent;
2018-03-21 14:56:16 +02:00
}
function resolveTargetRuleChains(ruleChainConnections) {
var deferred = $q.defer();
if (ruleChainConnections && ruleChainConnections.length) {
var tasks = [];
for (var i = 0; i < ruleChainConnections.length; i++) {
2018-04-02 15:45:48 +03:00
tasks.push(resolveRuleChain(ruleChainConnections[i].targetRuleChainId.id));
2018-03-21 14:56:16 +02:00
}
$q.all(tasks).then(
(ruleChains) => {
var ruleChainsMap = {};
for (var i = 0; i < ruleChains.length; i++) {
ruleChainsMap[ruleChains[i].id.id] = ruleChains[i];
}
deferred.resolve(ruleChainsMap);
},
() => {
deferred.reject();
}
);
} else {
deferred.resolve({});
}
return deferred.promise;
}
2018-04-02 15:45:48 +03:00
function resolveRuleChain(ruleChainId) {
var deferred = $q.defer();
getRuleChain(ruleChainId, {ignoreErrors: true}).then(
(ruleChain) => {
deferred.resolve(ruleChain);
},
() => {
deferred.resolve({
id: {id: ruleChainId, entityType: types.entityType.rulechain}
});
}
);
return deferred.promise;
}
function loadRuleNodeComponents() {
return componentDescriptorService.getComponentDescriptorsByTypes(types.ruleNodeTypeComponentTypes);
2018-03-21 14:56:16 +02:00
}
2018-04-05 20:57:09 +03:00
function testScript(inputParams) {
var deferred = $q.defer();
var url = '/api/ruleChain/testScript';
$http.post(url, inputParams).then(function success(response) {
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
2018-03-21 14:56:16 +02:00
function getLatestRuleNodeDebugInput(ruleNodeId) {
var deferred = $q.defer();
var url = '/api/ruleNode/' + ruleNodeId + '/debugIn';
$http.get(url).then(function success(response) {
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
2018-03-14 20:43:56 +02:00
}