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.impl.client.CloseableHttpClient;
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.Value;
import org.springframework.cache.Cache;
@ -172,7 +173,22 @@ public class EdgeServiceImpl extends AbstractEntityService implements EdgeServic
public Edge saveEdge(Edge edge) {
log.trace("Executing saveEdge [{}]", edge);
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

View File

@ -322,19 +322,13 @@ function AssetService($http, $q, $filter, customerService, userService) {
return deferred.promise;
}
function getEdgeAssets(edgeId, pageLink, config, type) {
function getEdgeAssets(edgeId, pageLink, config) {
var deferred = $q.defer();
var url = '/api/edge/' + edgeId + '/assets?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.idOffset)) {
url += '&offset=' + pageLink.idOffset;
}
$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);
}, function fail() {
deferred.reject();

View File

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

View File

@ -384,19 +384,13 @@ function DeviceService($http, $q, $window, $filter, userService, attributeServic
return deferred.promise;
}
function getEdgeDevices(edgeId, pageLink, config, type) {
function getEdgeDevices(edgeId, pageLink, config) {
var deferred = $q.defer();
var url = '/api/edge/' + edgeId + '/devices?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.idOffset)) {
url += '&offset=' + pageLink.idOffset;
}
$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);
}, function fail() {
deferred.reject();

View File

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

View File

@ -245,19 +245,13 @@ function EntityViewService($http, $q, $window, $filter, userService, attributeSe
return deferred.promise;
}
function getEdgeEntityViews(edgeId, pageLink, config, type) {
function getEdgeEntityViews(edgeId, pageLink, config) {
var deferred = $q.defer();
var url = '/api/edge/' + edgeId + '/entityViews?limit=' + pageLink.limit;
if (angular.isDefined(pageLink.idOffset)) {
url += '&offset=' + pageLink.idOffset;
}
$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);
}, function fail() {
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!');
break;
case types.entityType.edge:
promise = edgeService.getEdge(entityId, config);
promise = edgeService.getEdge(entityId, true, config);
break;
}
return promise;
@ -164,7 +164,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
break;
case types.entityType.edge:
promise = getEntitiesByIdsPromise(
(id) => edgeService.getEdge(id, config), entityIds);
(id) => edgeService.getEdge(id, true, config), entityIds);
break;
}
return promise;
@ -294,9 +294,9 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
break;
case types.entityType.edge:
if (user.authority === 'CUSTOMER_USER') {
promise = edgeService.getCustomerEdges(customerId, pageLink, false, config, subType);
promise = edgeService.getCustomerEdges(customerId, pageLink, false, subType, config);
} else {
promise = edgeService.getTenantEdges(pageLink, false, config, subType);
promise = edgeService.getTenantEdges(pageLink, false, subType, config);
}
break;
}
@ -960,9 +960,6 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
break;
case types.entityType.entityView:
case types.entityType.edge:
entityFieldKeys.push(types.entityField.name.keyName);
entityFieldKeys.push(types.entityField.type.keyName);
break;
case types.entityType.device:
case types.entityType.asset:
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;
}
$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);
}, function fail() {
deferred.reject();

View File

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

View File

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

View File

@ -161,7 +161,7 @@ export function EdgeController($rootScope, userService, edgeService, customerSer
if (vm.edgesScope === 'tenant') {
fetchEdgesFunction = function (pageLink, edgeType) {
return edgeService.getTenantEdges(pageLink, true, null, edgeType);
return edgeService.getTenantEdges(pageLink, true, edgeType, null);
};
deleteEdgeFunction = function (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') {
fetchEdgesFunction = function (pageLink, edgeType) {
return edgeService.getCustomerEdges(customerId, pageLink, true, null, edgeType);
return edgeService.getCustomerEdges(customerId, pageLink, true, edgeType, null);
};
deleteEdgeFunction = function (edgeId) {
return edgeService.unassignEdgeFromCustomer(edgeId);

View File

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

View File

@ -614,6 +614,16 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
}
);
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",
"edges": "Edges",
"edge-file": "Edge file",
"management": "Edge management",
"no-edges-matching": "No edges matching '{{entity}}' were found.",
"add": "Add Edge",

View File

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