Merge branch 'develop/2.6-edge' of github.com:volodymyr-babak/thingsboard into develop/2.6-edge

This commit is contained in:
Volodymyr Babak 2020-12-15 18:32:48 +02:00
commit 773d38067b
15 changed files with 68 additions and 54 deletions

View File

@ -25,6 +25,7 @@ import org.apache.http.HttpHost;
import org.apache.http.conn.ssl.DefaultHostnameVerifier; import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.hibernate.exception.ConstraintViolationException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.Cache; import org.springframework.cache.Cache;
@ -172,7 +173,22 @@ public class EdgeServiceImpl extends AbstractEntityService implements EdgeServic
public Edge saveEdge(Edge edge) { public Edge saveEdge(Edge edge) {
log.trace("Executing saveEdge [{}]", edge); log.trace("Executing saveEdge [{}]", edge);
edgeValidator.validate(edge, Edge::getTenantId); edgeValidator.validate(edge, Edge::getTenantId);
return edgeDao.save(edge.getTenantId(), edge); Edge savedEdge;
if (!sqlDatabaseUsed) {
savedEdge = edgeDao.save(edge.getTenantId(), edge);
} else {
try {
savedEdge = edgeDao.save(edge.getTenantId(), edge);
} catch (Exception t) {
ConstraintViolationException e = extractConstraintViolationException(t).orElse(null);
if (e != null && e.getConstraintName() != null && e.getConstraintName().equalsIgnoreCase("edge_name_unq_key")) {
throw new DataValidationException("Edge with such name already exists!");
} else {
throw t;
}
}
}
return savedEdge;
} }
@Override @Override

View File

@ -322,19 +322,13 @@ function AssetService($http, $q, $filter, customerService, userService) {
return deferred.promise; return deferred.promise;
} }
function getEdgeAssets(edgeId, pageLink, config, type) { function getEdgeAssets(edgeId, pageLink, config) {
var deferred = $q.defer(); var deferred = $q.defer();
var url = '/api/edge/' + edgeId + '/assets?limit=' + pageLink.limit; var url = '/api/edge/' + edgeId + '/assets?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.idOffset)) { if (angular.isDefined(pageLink.idOffset)) {
url += '&offset=' + pageLink.idOffset; url += '&offset=' + pageLink.idOffset;
} }
$http.get(url, config).then(function success(response) { $http.get(url, config).then(function success(response) {
if (pageLink.textSearch) {
response.data.data = $filter('filter')(response.data.data, {name: pageLink.textSearch});
}
if (angular.isDefined(type) && type.length) {
response.data.data = $filter('filter')(response.data.data, {type: type});
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function fail() { }, function fail() {
deferred.reject(); deferred.reject();

View File

@ -302,9 +302,6 @@ function DashboardService($rootScope, $http, $q, $location, $filter) {
} }
$http.get(url, config).then(function success(response) { $http.get(url, config).then(function success(response) {
response.data = prepareDashboards(response.data); response.data = prepareDashboards(response.data);
if (pageLink.textSearch) {
response.data.data = $filter('filter')(response.data.data, {title: pageLink.textSearch});
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function fail() { }, function fail() {
deferred.reject(); deferred.reject();

View File

@ -384,19 +384,13 @@ function DeviceService($http, $q, $window, $filter, userService, attributeServic
return deferred.promise; return deferred.promise;
} }
function getEdgeDevices(edgeId, pageLink, config, type) { function getEdgeDevices(edgeId, pageLink, config) {
var deferred = $q.defer(); var deferred = $q.defer();
var url = '/api/edge/' + edgeId + '/devices?limit=' + pageLink.limit; var url = '/api/edge/' + edgeId + '/devices?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.idOffset)) { if (angular.isDefined(pageLink.idOffset)) {
url += '&offset=' + pageLink.idOffset; url += '&offset=' + pageLink.idOffset;
} }
$http.get(url, config).then(function success(response) { $http.get(url, config).then(function success(response) {
if (pageLink.textSearch) {
response.data.data = $filter('filter')(response.data.data, {name: pageLink.textSearch});
}
if (angular.isDefined(type) && type.length) {
response.data.data = $filter('filter')(response.data.data, {type: type});
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function fail() { }, function fail() {
deferred.reject(); deferred.reject();

View File

@ -30,6 +30,7 @@ function EdgeService($http, $q, customerService) {
getTenantEdges: getTenantEdges, getTenantEdges: getTenantEdges,
getCustomerEdges: getCustomerEdges, getCustomerEdges: getCustomerEdges,
assignEdgeToCustomer: assignEdgeToCustomer, assignEdgeToCustomer: assignEdgeToCustomer,
findByQuery: findByQuery,
unassignEdgeFromCustomer: unassignEdgeFromCustomer, unassignEdgeFromCustomer: unassignEdgeFromCustomer,
makeEdgePublic: makeEdgePublic, makeEdgePublic: makeEdgePublic,
setRootRuleChain: setRootRuleChain, setRootRuleChain: setRootRuleChain,
@ -61,13 +62,7 @@ function EdgeService($http, $q, customerService) {
function getEdgesByIds(edgeIds, config) { function getEdgesByIds(edgeIds, config) {
var deferred = $q.defer(); var deferred = $q.defer();
var ids = ''; var ids = edgeIds.join(',');
for (var i=0;i<edgeIds.length;i++) {
if (i>0) {
ids += ',';
}
ids += edgeIds[i];
}
var url = '/api/edges?edgeIds=' + ids; var url = '/api/edges?edgeIds=' + ids;
$http.get(url, config).then(function success(response) { $http.get(url, config).then(function success(response) {
var entities = response.data; var entities = response.data;
@ -85,9 +80,13 @@ function EdgeService($http, $q, customerService) {
return deferred.promise; return deferred.promise;
} }
function getEdge(edgeId, config) { function getEdge(edgeId, ignoreErrors, config) {
var deferred = $q.defer(); var deferred = $q.defer();
var url = '/api/edge/' + edgeId; var url = '/api/edge/' + edgeId;
if (!config) {
config = {};
}
config = Object.assign(config, { ignoreErrors: ignoreErrors });
$http.get(url, config).then(function success(response) { $http.get(url, config).then(function success(response) {
deferred.resolve(response.data); deferred.resolve(response.data);
}, function fail(response) { }, function fail(response) {
@ -129,7 +128,7 @@ function EdgeService($http, $q, customerService) {
return deferred.promise; return deferred.promise;
} }
function getTenantEdges(pageLink, applyCustomersInfo, config, type) { function getTenantEdges(pageLink, applyCustomersInfo, type, config) {
var deferred = $q.defer(); var deferred = $q.defer();
var url = '/api/tenant/edges?limit=' + pageLink.limit; var url = '/api/tenant/edges?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.textSearch)) { if (angular.isDefined(pageLink.textSearch)) {
@ -164,7 +163,7 @@ function EdgeService($http, $q, customerService) {
return deferred.promise; return deferred.promise;
} }
function getCustomerEdges(customerId, pageLink, applyCustomersInfo, config, type) { function getCustomerEdges(customerId, pageLink, applyCustomersInfo, type, config) {
var deferred = $q.defer(); var deferred = $q.defer();
var url = '/api/customer/' + customerId + '/edges?limit=' + pageLink.limit; var url = '/api/customer/' + customerId + '/edges?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.textSearch)) { if (angular.isDefined(pageLink.textSearch)) {
@ -200,6 +199,21 @@ function EdgeService($http, $q, customerService) {
return deferred.promise; return deferred.promise;
} }
function findByQuery(query, ignoreErrors, config) {
var deferred = $q.defer();
var url = '/api/edges';
if (!config) {
config = {};
}
config = Object.assign(config, { ignoreErrors: ignoreErrors });
$http.post(url, query, config).then(function success(response) {
deferred.resolve(response.data);
}, function fail() {
deferred.reject();
});
return deferred.promise;
}
function assignEdgeToCustomer(customerId, edgeId) { function assignEdgeToCustomer(customerId, edgeId) {
var deferred = $q.defer(); var deferred = $q.defer();
var url = '/api/customer/' + customerId + '/edge/' + edgeId; var url = '/api/customer/' + customerId + '/edge/' + edgeId;

View File

@ -245,19 +245,13 @@ function EntityViewService($http, $q, $window, $filter, userService, attributeSe
return deferred.promise; return deferred.promise;
} }
function getEdgeEntityViews(edgeId, pageLink, config, type) { function getEdgeEntityViews(edgeId, pageLink, config) {
var deferred = $q.defer(); var deferred = $q.defer();
var url = '/api/edge/' + edgeId + '/entityViews?limit=' + pageLink.limit; var url = '/api/edge/' + edgeId + '/entityViews?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.idOffset)) { if (angular.isDefined(pageLink.idOffset)) {
url += '&offset=' + pageLink.idOffset; url += '&offset=' + pageLink.idOffset;
} }
$http.get(url, config).then(function success(response) { $http.get(url, config).then(function success(response) {
if (pageLink.textSearch) {
response.data.data = $filter('filter')(response.data.data, {name: pageLink.textSearch});
}
if (angular.isDefined(type) && type.length) {
response.data.data = $filter('filter')(response.data.data, {type: type});
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function fail() { }, function fail() {
deferred.reject(); deferred.reject();

View File

@ -78,7 +78,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
$log.error('Get Alarm Entity is not implemented!'); $log.error('Get Alarm Entity is not implemented!');
break; break;
case types.entityType.edge: case types.entityType.edge:
promise = edgeService.getEdge(entityId, config); promise = edgeService.getEdge(entityId, true, config);
break; break;
} }
return promise; return promise;
@ -164,7 +164,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
break; break;
case types.entityType.edge: case types.entityType.edge:
promise = getEntitiesByIdsPromise( promise = getEntitiesByIdsPromise(
(id) => edgeService.getEdge(id, config), entityIds); (id) => edgeService.getEdge(id, true, config), entityIds);
break; break;
} }
return promise; return promise;
@ -294,9 +294,9 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
break; break;
case types.entityType.edge: case types.entityType.edge:
if (user.authority === 'CUSTOMER_USER') { if (user.authority === 'CUSTOMER_USER') {
promise = edgeService.getCustomerEdges(customerId, pageLink, false, config, subType); promise = edgeService.getCustomerEdges(customerId, pageLink, false, subType, config);
} else { } else {
promise = edgeService.getTenantEdges(pageLink, false, config, subType); promise = edgeService.getTenantEdges(pageLink, false, subType, config);
} }
break; break;
} }
@ -960,9 +960,6 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
break; break;
case types.entityType.entityView: case types.entityType.entityView:
case types.entityType.edge: case types.entityType.edge:
entityFieldKeys.push(types.entityField.name.keyName);
entityFieldKeys.push(types.entityField.type.keyName);
break;
case types.entityType.device: case types.entityType.device:
case types.entityType.asset: case types.entityType.asset:
entityFieldKeys.push(types.entityField.name.keyName); entityFieldKeys.push(types.entityField.name.keyName);

View File

@ -321,9 +321,6 @@ function RuleChainService($http, $q, $filter, $ocLazyLoad, $translate, types, co
url += '&offset=' + pageLink.idOffset; url += '&offset=' + pageLink.idOffset;
} }
$http.get(url, config).then(function success(response) { $http.get(url, config).then(function success(response) {
if (pageLink.textSearch) {
response.data.data = $filter('filter')(response.data.data, {title: pageLink.textSearch});
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function fail() { }, function fail() {
deferred.reject(); deferred.reject();

View File

@ -324,8 +324,8 @@ export function AssetController($rootScope, userService, assetService, customerS
vm.assetGridConfig.addItemActions = []; vm.assetGridConfig.addItemActions = [];
} else if (vm.assetsScope === 'edge') { } else if (vm.assetsScope === 'edge') {
fetchAssetsFunction = function (pageLink, assetType) { fetchAssetsFunction = function (pageLink) {
return assetService.getEdgeAssets(edgeId, pageLink, null, assetType); return assetService.getEdgeAssets(edgeId, pageLink, null);
}; };
deleteAssetFunction = function (assetId) { deleteAssetFunction = function (assetId) {
return assetService.unassignAssetFromEdge(edgeId, assetId); return assetService.unassignAssetFromEdge(edgeId, assetId);

View File

@ -357,8 +357,8 @@ export function DeviceController($rootScope, userService, deviceService, custome
vm.deviceGridConfig.addItemActions = []; vm.deviceGridConfig.addItemActions = [];
} else if (vm.devicesScope === 'edge') { } else if (vm.devicesScope === 'edge') {
fetchDevicesFunction = function (pageLink, deviceType) { fetchDevicesFunction = function (pageLink) {
return deviceService.getEdgeDevices(edgeId, pageLink, null, deviceType); return deviceService.getEdgeDevices(edgeId, pageLink, null);
}; };
deleteDeviceFunction = function (deviceId) { deleteDeviceFunction = function (deviceId) {
return deviceService.unassignDeviceFromEdge(edgeId, deviceId); return deviceService.unassignDeviceFromEdge(edgeId, deviceId);

View File

@ -161,7 +161,7 @@ export function EdgeController($rootScope, userService, edgeService, customerSer
if (vm.edgesScope === 'tenant') { if (vm.edgesScope === 'tenant') {
fetchEdgesFunction = function (pageLink, edgeType) { fetchEdgesFunction = function (pageLink, edgeType) {
return edgeService.getTenantEdges(pageLink, true, null, edgeType); return edgeService.getTenantEdges(pageLink, true, edgeType, null);
}; };
deleteEdgeFunction = function (edgeId) { deleteEdgeFunction = function (edgeId) {
return edgeService.deleteEdge(edgeId); return edgeService.deleteEdge(edgeId);
@ -337,7 +337,7 @@ export function EdgeController($rootScope, userService, edgeService, customerSer
} else if (vm.edgesScope === 'customer' || vm.edgesScope === 'customer_user') { } else if (vm.edgesScope === 'customer' || vm.edgesScope === 'customer_user') {
fetchEdgesFunction = function (pageLink, edgeType) { fetchEdgesFunction = function (pageLink, edgeType) {
return edgeService.getCustomerEdges(customerId, pageLink, true, null, edgeType); return edgeService.getCustomerEdges(customerId, pageLink, true, edgeType, null);
}; };
deleteEdgeFunction = function (edgeId) { deleteEdgeFunction = function (edgeId) {
return edgeService.unassignEdgeFromCustomer(edgeId); return edgeService.unassignEdgeFromCustomer(edgeId);

View File

@ -285,8 +285,8 @@ export function EntityViewController($rootScope, userService, entityViewService,
vm.entityViewGridConfig.addItemAction = {}; vm.entityViewGridConfig.addItemAction = {};
} }
} else if (vm.entityViewsScope === 'edge') { } else if (vm.entityViewsScope === 'edge') {
fetchEntityViewsFunction = function (pageLink, entityViewType) { fetchEntityViewsFunction = function (pageLink) {
return entityViewService.getEdgeEntityViews(edgeId, pageLink, null, entityViewType); return entityViewService.getEdgeEntityViews(edgeId, pageLink, null);
}; };
deleteEntityViewFunction = function (entityViewId) { deleteEntityViewFunction = function (entityViewId) {
return entityViewService.unassignEntityViewFromEdge(edgeId, entityViewId); return entityViewService.unassignEntityViewFromEdge(edgeId, entityViewId);

View File

@ -614,6 +614,16 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
} }
); );
return deferred.promise; return deferred.promise;
case types.entityType.edge:
openImportDialogCSV($event, entityType, 'edge.import', 'edge.edge-file').then(
function success() {
deferred.resolve();
},
function fail() {
deferred.reject();
}
);
return deferred.promise;
} }
} }

View File

@ -765,6 +765,7 @@
"edge": { "edge": {
"edge": "Edge", "edge": "Edge",
"edges": "Edges", "edges": "Edges",
"edge-file": "Edge file",
"management": "Edge management", "management": "Edge management",
"no-edges-matching": "No edges matching '{{entity}}' were found.", "no-edges-matching": "No edges matching '{{entity}}' were found.",
"add": "Add Edge", "add": "Add Edge",

View File

@ -107,7 +107,7 @@ export default function RuleChainsController(ruleChainService, userService, impo
var deleteRuleChainFunction = null; var deleteRuleChainFunction = null;
if (edgeId) { if (edgeId) {
edgeService.getEdge(edgeId).then( edgeService.getEdge(edgeId, true, null).then(
function success(edge) { function success(edge) {
vm.edge = edge; vm.edge = edge;
} }