thingsboard-aplcache
Changes
ui/src/app/api/alias-controller.js 31(+24 -7)
ui/src/app/api/entity.service.js 106(+50 -56)
ui/src/app/api/subscription.js 27(+16 -11)
ui/src/app/components/widget.controller.js 25(+14 -11)
ui/src/app/services/item-buffer.service.js 22(+9 -13)
Details
ui/src/app/api/alias-controller.js 31(+24 -7)
diff --git a/ui/src/app/api/alias-controller.js b/ui/src/app/api/alias-controller.js
index 7794363..49eb8fe 100644
--- a/ui/src/app/api/alias-controller.js
+++ b/ui/src/app/api/alias-controller.js
@@ -96,6 +96,7 @@ export default class AliasController {
function success(aliasInfo) {
aliasCtrl.resolvedAliases[aliasId] = aliasInfo;
if (entityAlias.filter.stateEntity) {
+ aliasInfo.stateEntity = true;
aliasCtrl.resolvedAliasesToStateEntities[aliasId] =
aliasCtrl.stateController.getStateParams().entityId;
}
@@ -120,12 +121,13 @@ export default class AliasController {
function success(aliasInfo) {
datasource.aliasName = aliasInfo.alias;
if (aliasInfo.resolveMultiple) {
+ var newDatasource;
var resolvedEntities = aliasInfo.resolvedEntities;
if (resolvedEntities && resolvedEntities.length) {
var datasources = [];
for (var i=0;i<resolvedEntities.length;i++) {
var resolvedEntity = resolvedEntities[i];
- var newDatasource = angular.copy(datasource);
+ newDatasource = angular.copy(datasource);
newDatasource.entityId = resolvedEntity.id;
newDatasource.entityType = resolvedEntity.entityType;
newDatasource.entityName = resolvedEntity.name;
@@ -135,15 +137,30 @@ export default class AliasController {
}
deferred.resolve(datasources);
} else {
- deferred.reject();
+ if (aliasInfo.stateEntity) {
+ newDatasource = angular.copy(datasource);
+ newDatasource.unresolvedStateEntity = true;
+ deferred.resolve([newDatasource]);
+ } else {
+ deferred.reject();
+ }
}
} else {
var entity = aliasInfo.currentEntity;
- datasource.entityId = entity.id;
- datasource.entityType = entity.entityType;
- datasource.entityName = entity.name;
- datasource.name = entity.name;
- deferred.resolve([datasource]);
+ if (entity) {
+ datasource.entityId = entity.id;
+ datasource.entityType = entity.entityType;
+ datasource.entityName = entity.name;
+ datasource.name = entity.name;
+ deferred.resolve([datasource]);
+ } else {
+ if (aliasInfo.stateEntity) {
+ datasource.unresolvedStateEntity = true;
+ deferred.resolve([datasource]);
+ } else {
+ deferred.reject();
+ }
+ }
}
},
function fail() {
ui/src/app/api/entity.service.js 106(+50 -56)
diff --git a/ui/src/app/api/entity.service.js b/ui/src/app/api/entity.service.js
index 8c28a9b..91c8df3 100644
--- a/ui/src/app/api/entity.service.js
+++ b/ui/src/app/api/entity.service.js
@@ -29,10 +29,9 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
getEntitiesByNameFilter: getEntitiesByNameFilter,
resolveAlias: resolveAlias,
resolveAliasFilter: resolveAliasFilter,
+ checkEntityAlias: checkEntityAlias,
filterAliasByEntityTypes: filterAliasByEntityTypes,
- //processEntityAliases: processEntityAliases,
getEntityKeys: getEntityKeys,
- checkEntityAlias: checkEntityAlias,
createDatasourcesFromSubscriptionsInfo: createDatasourcesFromSubscriptionsInfo,
getRelatedEntities: getRelatedEntities,
saveRelatedEntity: saveRelatedEntity,
@@ -259,7 +258,32 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
return entitiesInfo;
}
- function resolveAliasFilter(filter, stateParams) {
+ function resolveAlias(entityAlias, stateParams) {
+ var deferred = $q.defer();
+ var filter = entityAlias.filter;
+ resolveAliasFilter(filter, stateParams, 100).then(
+ function (result) {
+ var entities = result.entities;
+ var aliasInfo = {
+ alias: entityAlias.alias,
+ resolveMultiple: filter.resolveMultiple
+ };
+ var resolvedEntities = entitiesToEntitiesInfo(entities);
+ aliasInfo.resolvedEntities = resolvedEntities;
+ aliasInfo.currentEntity = null;
+ if (aliasInfo.resolvedEntities.length) {
+ aliasInfo.currentEntity = aliasInfo.resolvedEntities[0];
+ }
+ deferred.resolve(aliasInfo);
+ },
+ function fail() {
+ deferred.reject();
+ }
+ );
+ return deferred.promise;
+ }
+
+ function resolveAliasFilter(filter, stateParams, maxItems) {
var deferred = $q.defer();
var result = {
entities: [],
@@ -299,7 +323,7 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
}
break;
case types.aliasFilterType.entityName.value:
- getEntitiesByNameFilter(filter.entityType, filter.entityNameFilter, 100).then(
+ getEntitiesByNameFilter(filter.entityType, filter.entityNameFilter, maxItems).then(
function success(entities) {
if (entities && entities.length) {
result.entities = entities;
@@ -318,31 +342,6 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
return deferred.promise;
}
- function resolveAlias(entityAlias, stateParams) {
- var deferred = $q.defer();
- var filter = entityAlias.filter;
- resolveAliasFilter(filter, stateParams).then(
- function (result) {
- var entities = result.entities;
- var aliasInfo = {
- alias: entityAlias.alias,
- resolveMultiple: filter.resolveMultiple
- };
- var resolvedEntities = entitiesToEntitiesInfo(entities);
- aliasInfo.resolvedEntities = resolvedEntities;
- aliasInfo.currentEntity = null;
- if (aliasInfo.resolvedEntities.length) {
- aliasInfo.currentEntity = aliasInfo.resolvedEntities[0];
- }
- deferred.resolve(aliasInfo);
- },
- function fail() {
- deferred.reject();
- }
- );
- return deferred.promise;
- }
-
function filterAliasByEntityTypes(entityAlias, entityTypes) {
var filter = entityAlias.filter;
switch (filter.type) {
@@ -359,6 +358,28 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
return false;
}
+ function checkEntityAlias(entityAlias) {
+ var deferred = $q.defer();
+ resolveAliasFilter(entityAlias.filter, null, 1).then(
+ function success(result) {
+ if (result.stateEntity) {
+ deferred.resolve(true);
+ } else {
+ var entities = result.entities;
+ if (entities && entities.length) {
+ deferred.resolve(true);
+ } else {
+ deferred.resolve(false);
+ }
+ }
+ },
+ function fail() {
+ deferred.resolve(false);
+ }
+ );
+ return deferred.promise;
+ }
+
/*function processEntityAlias(index, aliasIds, entityAliases, stateParams, resolution, deferred) {
if (index < aliasIds.length) {
var aliasId = aliasIds[index];
@@ -433,33 +454,6 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device
return deferred.promise;
}
- function checkEntityAlias(entityAlias) {
- var deferred = $q.defer();
- var entityType = entityAlias.entityType;
- var entityFilter = entityAlias.entityFilter;
- var promise;
- if (entityFilter.useFilter) {
- var entityNameFilter = entityFilter.entityNameFilter;
- promise = getEntitiesByNameFilter(entityType, entityNameFilter, 1);
- } else {
- var entityList = entityFilter.entityList;
- promise = getEntities(entityType, entityList);
- }
- promise.then(
- function success(entities) {
- if (entities && entities.length > 0) {
- deferred.resolve(true);
- } else {
- deferred.resolve(false);
- }
- },
- function fail() {
- deferred.resolve(false);
- }
- );
- return deferred.promise;
- }
-
function createDatasourcesFromSubscriptionsInfo(subscriptionsInfo) {
var deferred = $q.defer();
var datasources = [];
ui/src/app/api/subscription.js 27(+16 -11)
diff --git a/ui/src/app/api/subscription.js b/ui/src/app/api/subscription.js
index 471203c..dd518c7 100644
--- a/ui/src/app/api/subscription.js
+++ b/ui/src/app/api/subscription.js
@@ -125,17 +125,22 @@ export default class Subscription {
initDataSubscription() {
var deferred = this.ctx.$q.defer();
- var subscription = this;
- this.ctx.aliasController.resolveDatasources(this.datasources).then(
- function success(datasources) {
- subscription.datasources = datasources;
- subscription.configureData();
- deferred.resolve();
- },
- function fail() {
- deferred.reject();
- }
- );
+ if (!this.ctx.aliasController) {
+ this.configureData();
+ deferred.resolve();
+ } else {
+ var subscription = this;
+ this.ctx.aliasController.resolveDatasources(this.datasources).then(
+ function success(datasources) {
+ subscription.datasources = datasources;
+ subscription.configureData();
+ deferred.resolve();
+ },
+ function fail() {
+ deferred.reject();
+ }
+ );
+ }
return deferred.promise;
}
diff --git a/ui/src/app/common/dashboard-utils.service.js b/ui/src/app/common/dashboard-utils.service.js
index 51a0215..58d1dbd 100644
--- a/ui/src/app/common/dashboard-utils.service.js
+++ b/ui/src/app/common/dashboard-utils.service.js
@@ -57,6 +57,9 @@ function DashboardUtils(types, utils, timeService) {
for (aliasId in entityAliases) {
entityAlias = entityAliases[aliasId];
entityAliases[aliasId] = validateAndUpdateEntityAlias(entityAlias);
+ if (!entityAliases[aliasId].id) {
+ entityAliases[aliasId].id = aliasId;
+ }
}
}
return configuration;
@@ -202,6 +205,12 @@ function DashboardUtils(types, utils, timeService) {
states[firstStateId].root = true;
}
}
+
+ /* var datasources = {};
+ for (var widgetId in dashboard.configuration.widgets) {
+
+ }*/
+
dashboard.configuration = validateAndUpdateEntityAliases(dashboard.configuration);
if (angular.isUndefined(dashboard.configuration.timewindow)) {
ui/src/app/components/widget.controller.js 25(+14 -11)
diff --git a/ui/src/app/components/widget.controller.js b/ui/src/app/components/widget.controller.js
index 103ad13..4407381 100644
--- a/ui/src/app/components/widget.controller.js
+++ b/ui/src/app/components/widget.controller.js
@@ -38,6 +38,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q
var gridsterItemInited = false;
var subscriptionInited = false;
+ var widgetSizeDetected = false;
var cafs = {};
@@ -206,9 +207,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q
initialize().then(
function(){
- if (checkSize()) {
- onInit();
- }
+ onInit();
}
);
@@ -488,10 +487,15 @@ export default function WidgetController($scope, $timeout, $window, $element, $q
$scope.widgetErrorData = utils.processWidgetException(e);
}
- function onInit() {
- if (!widgetContext.inited &&
- subscriptionInited &&
- gridsterItemInited) {
+ function isReady() {
+ return subscriptionInited && gridsterItemInited && widgetSizeDetected;
+ }
+
+ function onInit(skipSizeCheck) {
+ if (!skipSizeCheck) {
+ checkSize();
+ }
+ if (!widgetContext.inited && isReady()) {
widgetContext.inited = true;
try {
widgetTypeInstance.onInit();
@@ -516,6 +520,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q
widgetContext.width = width;
widgetContext.height = height;
sizeChanged = true;
+ widgetSizeDetected = true;
}
}
return sizeChanged;
@@ -536,7 +541,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q
}
});
} else {
- onInit();
+ onInit(true);
}
}
}
@@ -545,9 +550,7 @@ export default function WidgetController($scope, $timeout, $window, $element, $q
if (item && item.gridster) {
widgetContext.isMobile = item.gridster.isMobile;
gridsterItemInited = true;
- if (checkSize()) {
- onInit();
- }
+ onInit();
// gridsterItemElement = $(item.$element);
//updateVisibility();
}
diff --git a/ui/src/app/dashboard/dashboard.controller.js b/ui/src/app/dashboard/dashboard.controller.js
index 4168864..7c97a94 100644
--- a/ui/src/app/dashboard/dashboard.controller.js
+++ b/ui/src/app/dashboard/dashboard.controller.js
@@ -344,6 +344,8 @@ export default function DashboardController(types, utils, dashboardUtils, widget
vm.dashboardConfiguration = vm.dashboard.configuration;
vm.dashboardCtx.dashboard = vm.dashboard;
vm.dashboardCtx.dashboardTimewindow = vm.dashboardConfiguration.timewindow;
+ vm.dashboardCtx.aliasController = new AliasController($scope, $q, $filter, utils,
+ types, entityService, vm.dashboardCtx.stateController, vm.dashboardConfiguration.entityAliases);
var parentScope = $window.parent.angular.element($window.frameElement).scope();
parentScope.$root.$broadcast('widgetEditModeInited');
parentScope.$root.$apply();
diff --git a/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js b/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js
index e5822a4..b28a46b 100644
--- a/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js
+++ b/ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js
@@ -22,7 +22,8 @@ import selectTargetLayoutTemplate from '../../dashboard/layouts/select-target-la
/* eslint-enable import/no-unresolved, import/default */
/*@ngInject*/
-export default function AddWidgetToDashboardDialogController($scope, $mdDialog, $state, $q, $document, itembuffer, dashboardService, entityId, entityType, entityName, widget) {
+export default function AddWidgetToDashboardDialogController($scope, $mdDialog, $state, $q, $document,
+ types, itembuffer, dashboardService, entityId, entityType, entityName, widget) {
var vm = this;
@@ -125,12 +126,14 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog,
targetDeviceAliases: {}
};
aliasesInfo.datasourceAliases[0] = {
- aliasName: entityName,
- entityType: entityType,
- entityFilter: {
- useFilter: false,
- entityNameFilter: '',
- entityList: [entityId]
+ id: 1,
+ alias: entityName,
+ filter: {
+ type: types.aliasFilterType.entityList.value,
+ stateEntity: false,
+ entityList: [entityId],
+ entityType: entityType,
+ resolveMultiple: false
}
};
itembuffer.addWidgetToDashboard(theDashboard, targetState, targetLayout, vm.widget, aliasesInfo, null, 48, null, -1, -1).then(
diff --git a/ui/src/app/entity/entity-filter-dialog.controller.js b/ui/src/app/entity/entity-filter-dialog.controller.js
index 2b1a30d..17a19d6 100644
--- a/ui/src/app/entity/entity-filter-dialog.controller.js
+++ b/ui/src/app/entity/entity-filter-dialog.controller.js
@@ -64,7 +64,7 @@ export default function EntityFilterDialogController($scope, $mdDialog, $q, enti
entity: null,
stateEntity: false
}
- entityService.resolveAliasFilter(vm.filter).then(
+ entityService.resolveAliasFilter(vm.filter, null, 1).then(
function success(result) {
validationResult.stateEntity = result.stateEntity;
var entities = result.entities;
diff --git a/ui/src/app/import-export/import-export.service.js b/ui/src/app/import-export/import-export.service.js
index af04687..7f7f774 100644
--- a/ui/src/app/import-export/import-export.service.js
+++ b/ui/src/app/import-export/import-export.service.js
@@ -359,30 +359,50 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
}
function prepareEntityAlias(aliasInfo) {
- var entityFilter;
- var entityType;
+ var alias;
+ var filter;
if (aliasInfo.deviceId) {
- entityFilter = {
- useFilter: false,
- entityNameFilter: '',
- entityList: [aliasInfo.deviceId]
- }
- entityType = types.entityType.device;
+ alias = aliasInfo.aliasName;
+ filter = {
+ type: types.aliasFilterType.entityList.value,
+ stateEntity: false,
+ entityType: types.entityType.device,
+ entityList: [aliasInfo.deviceId],
+ resolveMultiple: false
+ };
} else if (aliasInfo.deviceFilter) {
- entityFilter = {
- useFilter: aliasInfo.deviceFilter.useFilter,
- entityNameFilter: aliasInfo.deviceFilter.deviceNameFilter,
- entityList: aliasInfo.deviceFilter.deviceList
+ alias = aliasInfo.aliasName;
+ filter = {
+ type: aliasInfo.deviceFilter.useFilter ? types.aliasFilterType.entityName.value : types.aliasFilterType.entityList.value,
+ entityType: types.entityType.device,
+ resolveMultiple: false
+ }
+ if (filter.type == types.aliasFilterType.entityList.value) {
+ filter.stateEntity = false;
+ filter.entityList = aliasInfo.deviceFilter.deviceList
+ } else {
+ filter.entityNameFilter = aliasInfo.deviceFilter.deviceNameFilter;
+ }
+ } else if (aliasInfo.entityFilter) {
+ alias = aliasInfo.aliasName;
+ filter = {
+ type: aliasInfo.entityFilter.useFilter ? types.aliasFilterType.entityName.value : types.aliasFilterType.entityList.value,
+ entityType: aliasInfo.entityType,
+ resolveMultiple: false
+ }
+ if (filter.type == types.aliasFilterType.entityList.value) {
+ filter.stateEntity = false;
+ filter.entityList = aliasInfo.entityFilter.entityList;
+ } else {
+ filter.entityNameFilter = aliasInfo.entityFilter.entityNameFilter;
}
- entityType = types.entityType.device;
} else {
- entityFilter = aliasInfo.entityFilter;
- entityType = aliasInfo.entityType;
+ alias = aliasInfo.alias;
+ filter = aliasInfo.filter;
}
return {
- aliasName: aliasInfo.aliasName,
- entityType: entityType,
- entityFilter: entityFilter
+ alias: alias,
+ filter: filter
};
}
@@ -411,6 +431,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
for (datasourceIndex in datasourceAliases) {
datasourceAliasesMap[aliasId] = datasourceIndex;
entityAliases[aliasId] = datasourceAliases[datasourceIndex];
+ entityAliases[aliasId].id = aliasId;
aliasId++;
}
}
@@ -418,6 +439,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
for (datasourceIndex in targetDeviceAliases) {
targetDeviceAliasesMap[aliasId] = datasourceIndex;
entityAliases[aliasId] = targetDeviceAliases[datasourceIndex];
+ entityAliases[aliasId].id = aliasId;
aliasId++;
}
}
@@ -435,12 +457,10 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
var datasourceIndex;
if (datasourceAliasesMap[aliasId]) {
datasourceIndex = datasourceAliasesMap[aliasId];
- datasourceAliases[datasourceIndex].entityType = entityAlias.entityType;
- datasourceAliases[datasourceIndex].entityFilter = entityAlias.entityFilter;
+ datasourceAliases[datasourceIndex] = entityAlias;
} else if (targetDeviceAliasesMap[aliasId]) {
datasourceIndex = targetDeviceAliasesMap[aliasId];
- targetDeviceAliases[datasourceIndex].entityType = entityAlias.entityType;
- targetDeviceAliases[datasourceIndex].entityFilter = entityAlias.entityFilter;
+ targetDeviceAliases[datasourceIndex] = entityAlias;
}
}
addImportedWidget(dashboard, targetState, targetLayoutFunction, $event, widget,
@@ -622,7 +642,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
checkNextEntityAliasOrComplete(index, aliasIds, entityAliases, missingEntityAliases, deferred);
} else {
var missingEntityAlias = angular.copy(entityAlias);
- missingEntityAlias.entityFilter = null;
+ missingEntityAlias.filter = null;
missingEntityAliases[aliasId] = missingEntityAlias;
checkNextEntityAliasOrComplete(index, aliasIds, entityAliases, missingEntityAliases, deferred);
}
ui/src/app/services/item-buffer.service.js 22(+9 -13)
diff --git a/ui/src/app/services/item-buffer.service.js b/ui/src/app/services/item-buffer.service.js
index 3aa4809..309e53e 100644
--- a/ui/src/app/services/item-buffer.service.js
+++ b/ui/src/app/services/item-buffer.service.js
@@ -46,16 +46,14 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) {
aliasesInfo {
datasourceAliases: {
datasourceIndex: {
- aliasName: "...",
- entityType: "...",
- entityFilter: "..."
+ alias: "...",
+ filter: "..."
}
}
targetDeviceAliases: {
targetDeviceAliasIndex: {
- aliasName: "...",
- entityType: "...",
- entityFilter: "..."
+ alias: "...",
+ filter: "..."
}
}
....
@@ -64,9 +62,8 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) {
function prepareAliasInfo(entityAlias) {
return {
- aliasName: entityAlias.alias,
- entityType: entityAlias.entityType,
- entityFilter: entityAlias.entityFilter
+ alias: entityAlias.alias,
+ filter: entityAlias.filter
};
}
@@ -288,8 +285,7 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) {
}
function isEntityAliasEqual(alias1, alias2) {
- return alias1.entityType === alias2.entityType &&
- angular.equals(alias1.entityFilter, alias2.entityFilter);
+ return angular.equals(alias1.filter, alias2.filter);
}
function getEntityAliasId(entityAliases, aliasInfo) {
@@ -301,13 +297,13 @@ function ItemBuffer($q, bufferStore, types, utils, dashboardUtils) {
}
}
if (!newAliasId) {
- var newAliasName = createEntityAliasName(entityAliases, aliasInfo.aliasName);
+ var newAliasName = createEntityAliasName(entityAliases, aliasInfo.alias);
newAliasId = 0;
for (aliasId in entityAliases) {
newAliasId = Math.max(newAliasId, aliasId);
}
newAliasId++;
- entityAliases[newAliasId] = {alias: newAliasName, entityType: aliasInfo.entityType, entityFilter: aliasInfo.entityFilter};
+ entityAliases[newAliasId] = {id: newAliasId, alias: newAliasName, filter: aliasInfo.filter};
}
return newAliasId;
}