Commit 773d38067bf1082ac8832607f1fa24962b92ae34

Authored by Volodymyr Babak
2 parents 59c55fb2 004d8a7d

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

... ... @@ -25,6 +25,7 @@ import org.apache.http.HttpHost;
25 25 import org.apache.http.conn.ssl.DefaultHostnameVerifier;
26 26 import org.apache.http.impl.client.CloseableHttpClient;
27 27 import org.apache.http.impl.client.HttpClients;
  28 +import org.hibernate.exception.ConstraintViolationException;
28 29 import org.springframework.beans.factory.annotation.Autowired;
29 30 import org.springframework.beans.factory.annotation.Value;
30 31 import org.springframework.cache.Cache;
... ... @@ -172,7 +173,22 @@ public class EdgeServiceImpl extends AbstractEntityService implements EdgeServic
172 173 public Edge saveEdge(Edge edge) {
173 174 log.trace("Executing saveEdge [{}]", edge);
174 175 edgeValidator.validate(edge, Edge::getTenantId);
175   - return edgeDao.save(edge.getTenantId(), edge);
  176 + Edge savedEdge;
  177 + if (!sqlDatabaseUsed) {
  178 + savedEdge = edgeDao.save(edge.getTenantId(), edge);
  179 + } else {
  180 + try {
  181 + savedEdge = edgeDao.save(edge.getTenantId(), edge);
  182 + } catch (Exception t) {
  183 + ConstraintViolationException e = extractConstraintViolationException(t).orElse(null);
  184 + if (e != null && e.getConstraintName() != null && e.getConstraintName().equalsIgnoreCase("edge_name_unq_key")) {
  185 + throw new DataValidationException("Edge with such name already exists!");
  186 + } else {
  187 + throw t;
  188 + }
  189 + }
  190 + }
  191 + return savedEdge;
176 192 }
177 193
178 194 @Override
... ...
... ... @@ -322,19 +322,13 @@ function AssetService($http, $q, $filter, customerService, userService) {
322 322 return deferred.promise;
323 323 }
324 324
325   - function getEdgeAssets(edgeId, pageLink, config, type) {
  325 + function getEdgeAssets(edgeId, pageLink, config) {
326 326 var deferred = $q.defer();
327 327 var url = '/api/edge/' + edgeId + '/assets?limit=' + pageLink.limit;
328 328 if (angular.isDefined(pageLink.idOffset)) {
329 329 url += '&offset=' + pageLink.idOffset;
330 330 }
331 331 $http.get(url, config).then(function success(response) {
332   - if (pageLink.textSearch) {
333   - response.data.data = $filter('filter')(response.data.data, {name: pageLink.textSearch});
334   - }
335   - if (angular.isDefined(type) && type.length) {
336   - response.data.data = $filter('filter')(response.data.data, {type: type});
337   - }
338 332 deferred.resolve(response.data);
339 333 }, function fail() {
340 334 deferred.reject();
... ...
... ... @@ -302,9 +302,6 @@ function DashboardService($rootScope, $http, $q, $location, $filter) {
302 302 }
303 303 $http.get(url, config).then(function success(response) {
304 304 response.data = prepareDashboards(response.data);
305   - if (pageLink.textSearch) {
306   - response.data.data = $filter('filter')(response.data.data, {title: pageLink.textSearch});
307   - }
308 305 deferred.resolve(response.data);
309 306 }, function fail() {
310 307 deferred.reject();
... ...
... ... @@ -384,19 +384,13 @@ function DeviceService($http, $q, $window, $filter, userService, attributeServic
384 384 return deferred.promise;
385 385 }
386 386
387   - function getEdgeDevices(edgeId, pageLink, config, type) {
  387 + function getEdgeDevices(edgeId, pageLink, config) {
388 388 var deferred = $q.defer();
389 389 var url = '/api/edge/' + edgeId + '/devices?limit=' + pageLink.limit;
390 390 if (angular.isDefined(pageLink.idOffset)) {
391 391 url += '&offset=' + pageLink.idOffset;
392 392 }
393 393 $http.get(url, config).then(function success(response) {
394   - if (pageLink.textSearch) {
395   - response.data.data = $filter('filter')(response.data.data, {name: pageLink.textSearch});
396   - }
397   - if (angular.isDefined(type) && type.length) {
398   - response.data.data = $filter('filter')(response.data.data, {type: type});
399   - }
400 394 deferred.resolve(response.data);
401 395 }, function fail() {
402 396 deferred.reject();
... ...
... ... @@ -30,6 +30,7 @@ function EdgeService($http, $q, customerService) {
30 30 getTenantEdges: getTenantEdges,
31 31 getCustomerEdges: getCustomerEdges,
32 32 assignEdgeToCustomer: assignEdgeToCustomer,
  33 + findByQuery: findByQuery,
33 34 unassignEdgeFromCustomer: unassignEdgeFromCustomer,
34 35 makeEdgePublic: makeEdgePublic,
35 36 setRootRuleChain: setRootRuleChain,
... ... @@ -61,13 +62,7 @@ function EdgeService($http, $q, customerService) {
61 62
62 63 function getEdgesByIds(edgeIds, config) {
63 64 var deferred = $q.defer();
64   - var ids = '';
65   - for (var i=0;i<edgeIds.length;i++) {
66   - if (i>0) {
67   - ids += ',';
68   - }
69   - ids += edgeIds[i];
70   - }
  65 + var ids = edgeIds.join(',');
71 66 var url = '/api/edges?edgeIds=' + ids;
72 67 $http.get(url, config).then(function success(response) {
73 68 var entities = response.data;
... ... @@ -85,9 +80,13 @@ function EdgeService($http, $q, customerService) {
85 80 return deferred.promise;
86 81 }
87 82
88   - function getEdge(edgeId, config) {
  83 + function getEdge(edgeId, ignoreErrors, config) {
89 84 var deferred = $q.defer();
90 85 var url = '/api/edge/' + edgeId;
  86 + if (!config) {
  87 + config = {};
  88 + }
  89 + config = Object.assign(config, { ignoreErrors: ignoreErrors });
91 90 $http.get(url, config).then(function success(response) {
92 91 deferred.resolve(response.data);
93 92 }, function fail(response) {
... ... @@ -129,7 +128,7 @@ function EdgeService($http, $q, customerService) {
129 128 return deferred.promise;
130 129 }
131 130
132   - function getTenantEdges(pageLink, applyCustomersInfo, config, type) {
  131 + function getTenantEdges(pageLink, applyCustomersInfo, type, config) {
133 132 var deferred = $q.defer();
134 133 var url = '/api/tenant/edges?limit=' + pageLink.limit;
135 134 if (angular.isDefined(pageLink.textSearch)) {
... ... @@ -164,7 +163,7 @@ function EdgeService($http, $q, customerService) {
164 163 return deferred.promise;
165 164 }
166 165
167   - function getCustomerEdges(customerId, pageLink, applyCustomersInfo, config, type) {
  166 + function getCustomerEdges(customerId, pageLink, applyCustomersInfo, type, config) {
168 167 var deferred = $q.defer();
169 168 var url = '/api/customer/' + customerId + '/edges?limit=' + pageLink.limit;
170 169 if (angular.isDefined(pageLink.textSearch)) {
... ... @@ -200,6 +199,21 @@ function EdgeService($http, $q, customerService) {
200 199 return deferred.promise;
201 200 }
202 201
  202 + function findByQuery(query, ignoreErrors, config) {
  203 + var deferred = $q.defer();
  204 + var url = '/api/edges';
  205 + if (!config) {
  206 + config = {};
  207 + }
  208 + config = Object.assign(config, { ignoreErrors: ignoreErrors });
  209 + $http.post(url, query, config).then(function success(response) {
  210 + deferred.resolve(response.data);
  211 + }, function fail() {
  212 + deferred.reject();
  213 + });
  214 + return deferred.promise;
  215 + }
  216 +
203 217 function assignEdgeToCustomer(customerId, edgeId) {
204 218 var deferred = $q.defer();
205 219 var url = '/api/customer/' + customerId + '/edge/' + edgeId;
... ...
... ... @@ -245,19 +245,13 @@ function EntityViewService($http, $q, $window, $filter, userService, attributeSe
245 245 return deferred.promise;
246 246 }
247 247
248   - function getEdgeEntityViews(edgeId, pageLink, config, type) {
  248 + function getEdgeEntityViews(edgeId, pageLink, config) {
249 249 var deferred = $q.defer();
250 250 var url = '/api/edge/' + edgeId + '/entityViews?limit=' + pageLink.limit;
251 251 if (angular.isDefined(pageLink.idOffset)) {
252 252 url += '&offset=' + pageLink.idOffset;
253 253 }
254 254 $http.get(url, config).then(function success(response) {
255   - if (pageLink.textSearch) {
256   - response.data.data = $filter('filter')(response.data.data, {name: pageLink.textSearch});
257   - }
258   - if (angular.isDefined(type) && type.length) {
259   - response.data.data = $filter('filter')(response.data.data, {type: type});
260   - }
261 255 deferred.resolve(response.data);
262 256 }, function fail() {
263 257 deferred.reject();
... ...
... ... @@ -78,7 +78,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
78 78 $log.error('Get Alarm Entity is not implemented!');
79 79 break;
80 80 case types.entityType.edge:
81   - promise = edgeService.getEdge(entityId, config);
  81 + promise = edgeService.getEdge(entityId, true, config);
82 82 break;
83 83 }
84 84 return promise;
... ... @@ -164,7 +164,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
164 164 break;
165 165 case types.entityType.edge:
166 166 promise = getEntitiesByIdsPromise(
167   - (id) => edgeService.getEdge(id, config), entityIds);
  167 + (id) => edgeService.getEdge(id, true, config), entityIds);
168 168 break;
169 169 }
170 170 return promise;
... ... @@ -294,9 +294,9 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
294 294 break;
295 295 case types.entityType.edge:
296 296 if (user.authority === 'CUSTOMER_USER') {
297   - promise = edgeService.getCustomerEdges(customerId, pageLink, false, config, subType);
  297 + promise = edgeService.getCustomerEdges(customerId, pageLink, false, subType, config);
298 298 } else {
299   - promise = edgeService.getTenantEdges(pageLink, false, config, subType);
  299 + promise = edgeService.getTenantEdges(pageLink, false, subType, config);
300 300 }
301 301 break;
302 302 }
... ... @@ -960,9 +960,6 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
960 960 break;
961 961 case types.entityType.entityView:
962 962 case types.entityType.edge:
963   - entityFieldKeys.push(types.entityField.name.keyName);
964   - entityFieldKeys.push(types.entityField.type.keyName);
965   - break;
966 963 case types.entityType.device:
967 964 case types.entityType.asset:
968 965 entityFieldKeys.push(types.entityField.name.keyName);
... ...
... ... @@ -321,9 +321,6 @@ function RuleChainService($http, $q, $filter, $ocLazyLoad, $translate, types, co
321 321 url += '&offset=' + pageLink.idOffset;
322 322 }
323 323 $http.get(url, config).then(function success(response) {
324   - if (pageLink.textSearch) {
325   - response.data.data = $filter('filter')(response.data.data, {title: pageLink.textSearch});
326   - }
327 324 deferred.resolve(response.data);
328 325 }, function fail() {
329 326 deferred.reject();
... ...
... ... @@ -324,8 +324,8 @@ export function AssetController($rootScope, userService, assetService, customerS
324 324 vm.assetGridConfig.addItemActions = [];
325 325
326 326 } else if (vm.assetsScope === 'edge') {
327   - fetchAssetsFunction = function (pageLink, assetType) {
328   - return assetService.getEdgeAssets(edgeId, pageLink, null, assetType);
  327 + fetchAssetsFunction = function (pageLink) {
  328 + return assetService.getEdgeAssets(edgeId, pageLink, null);
329 329 };
330 330 deleteAssetFunction = function (assetId) {
331 331 return assetService.unassignAssetFromEdge(edgeId, assetId);
... ...
... ... @@ -357,8 +357,8 @@ export function DeviceController($rootScope, userService, deviceService, custome
357 357 vm.deviceGridConfig.addItemActions = [];
358 358
359 359 } else if (vm.devicesScope === 'edge') {
360   - fetchDevicesFunction = function (pageLink, deviceType) {
361   - return deviceService.getEdgeDevices(edgeId, pageLink, null, deviceType);
  360 + fetchDevicesFunction = function (pageLink) {
  361 + return deviceService.getEdgeDevices(edgeId, pageLink, null);
362 362 };
363 363 deleteDeviceFunction = function (deviceId) {
364 364 return deviceService.unassignDeviceFromEdge(edgeId, deviceId);
... ...
... ... @@ -161,7 +161,7 @@ export function EdgeController($rootScope, userService, edgeService, customerSer
161 161
162 162 if (vm.edgesScope === 'tenant') {
163 163 fetchEdgesFunction = function (pageLink, edgeType) {
164   - return edgeService.getTenantEdges(pageLink, true, null, edgeType);
  164 + return edgeService.getTenantEdges(pageLink, true, edgeType, null);
165 165 };
166 166 deleteEdgeFunction = function (edgeId) {
167 167 return edgeService.deleteEdge(edgeId);
... ... @@ -337,7 +337,7 @@ export function EdgeController($rootScope, userService, edgeService, customerSer
337 337
338 338 } else if (vm.edgesScope === 'customer' || vm.edgesScope === 'customer_user') {
339 339 fetchEdgesFunction = function (pageLink, edgeType) {
340   - return edgeService.getCustomerEdges(customerId, pageLink, true, null, edgeType);
  340 + return edgeService.getCustomerEdges(customerId, pageLink, true, edgeType, null);
341 341 };
342 342 deleteEdgeFunction = function (edgeId) {
343 343 return edgeService.unassignEdgeFromCustomer(edgeId);
... ...
... ... @@ -285,8 +285,8 @@ export function EntityViewController($rootScope, userService, entityViewService,
285 285 vm.entityViewGridConfig.addItemAction = {};
286 286 }
287 287 } else if (vm.entityViewsScope === 'edge') {
288   - fetchEntityViewsFunction = function (pageLink, entityViewType) {
289   - return entityViewService.getEdgeEntityViews(edgeId, pageLink, null, entityViewType);
  288 + fetchEntityViewsFunction = function (pageLink) {
  289 + return entityViewService.getEdgeEntityViews(edgeId, pageLink, null);
290 290 };
291 291 deleteEntityViewFunction = function (entityViewId) {
292 292 return entityViewService.unassignEntityViewFromEdge(edgeId, entityViewId);
... ...
... ... @@ -614,6 +614,16 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
614 614 }
615 615 );
616 616 return deferred.promise;
  617 + case types.entityType.edge:
  618 + openImportDialogCSV($event, entityType, 'edge.import', 'edge.edge-file').then(
  619 + function success() {
  620 + deferred.resolve();
  621 + },
  622 + function fail() {
  623 + deferred.reject();
  624 + }
  625 + );
  626 + return deferred.promise;
617 627 }
618 628
619 629 }
... ...
... ... @@ -765,6 +765,7 @@
765 765 "edge": {
766 766 "edge": "Edge",
767 767 "edges": "Edges",
  768 + "edge-file": "Edge file",
768 769 "management": "Edge management",
769 770 "no-edges-matching": "No edges matching '{{entity}}' were found.",
770 771 "add": "Add Edge",
... ...
... ... @@ -107,7 +107,7 @@ export default function RuleChainsController(ruleChainService, userService, impo
107 107 var deleteRuleChainFunction = null;
108 108
109 109 if (edgeId) {
110   - edgeService.getEdge(edgeId).then(
  110 + edgeService.getEdge(edgeId, true, null).then(
111 111 function success(edge) {
112 112 vm.edge = edge;
113 113 }
... ...