Commit cd59a8d9c6c901cb8707dd908ef0426340b09001

Authored by Artem Babak
1 parent 5ef3abb0

Import edge fix

@@ -45,6 +45,7 @@ import { DataKey, Datasource, DatasourceType, KeyInfo } from '@app/shared/models @@ -45,6 +45,7 @@ import { DataKey, Datasource, DatasourceType, KeyInfo } from '@app/shared/models
45 import { UtilsService } from '@core/services/utils.service'; 45 import { UtilsService } from '@core/services/utils.service';
46 import { AliasFilterType, EntityAlias, EntityAliasFilter, EntityAliasFilterResult } from '@shared/models/alias.models'; 46 import { AliasFilterType, EntityAlias, EntityAliasFilter, EntityAliasFilterResult } from '@shared/models/alias.models';
47 import { 47 import {
  48 + EdgeImportEntityData,
48 EntitiesKeysByQuery, 49 EntitiesKeysByQuery,
49 entityFields, 50 entityFields,
50 EntityInfo, 51 EntityInfo,
@@ -76,6 +77,7 @@ import { @@ -76,6 +77,7 @@ import {
76 import { alarmFields } from '@shared/models/alarm.models'; 77 import { alarmFields } from '@shared/models/alarm.models';
77 import { EdgeService } from "@core/http/edge.service"; 78 import { EdgeService } from "@core/http/edge.service";
78 import { RuleChainType } from "@shared/models/rule-chain.models"; 79 import { RuleChainType } from "@shared/models/rule-chain.models";
  80 +import { Edge } from '@shared/models/edge.models';
79 81
80 @Injectable({ 82 @Injectable({
81 providedIn: 'root' 83 providedIn: 'root'
@@ -924,6 +926,51 @@ export class EntityService { @@ -924,6 +926,51 @@ export class EntityService {
924 926
925 public saveEntityParameters(entityType: EntityType, entityData: ImportEntityData, update: boolean, 927 public saveEntityParameters(entityType: EntityType, entityData: ImportEntityData, update: boolean,
926 config?: RequestConfig): Observable<ImportEntitiesResultInfo> { 928 config?: RequestConfig): Observable<ImportEntitiesResultInfo> {
  929 + const saveEntityObservable: Observable<BaseData<EntityId>> = this.getSaveEntityObservable(entityType, entityData, config);
  930 + return saveEntityObservable.pipe(
  931 + mergeMap((entity) => {
  932 + return this.saveEntityData(entity.id, entityData, config).pipe(
  933 + map(() => {
  934 + return { create: { entity: 1 } } as ImportEntitiesResultInfo;
  935 + }),
  936 + catchError(err => of({ error: { entity: 1 } } as ImportEntitiesResultInfo))
  937 + );
  938 + }),
  939 + catchError(err => {
  940 + if (update) {
  941 + let findEntityObservable: Observable<BaseData<EntityId>>;
  942 + switch (entityType) {
  943 + case EntityType.DEVICE:
  944 + findEntityObservable = this.deviceService.findByName(entityData.name, config);
  945 + break;
  946 + case EntityType.ASSET:
  947 + findEntityObservable = this.assetService.findByName(entityData.name, config);
  948 + break;
  949 + case EntityType.EDGE:
  950 + findEntityObservable = this.edgeService.findByName(entityData.name, config);
  951 + break;
  952 + }
  953 + return findEntityObservable.pipe(
  954 + mergeMap((entity) => {
  955 + const updateEntityTasks: Observable<any>[] = this.getUpdateEntityTasks(entityType, entityData, entity, config);
  956 + return forkJoin(updateEntityTasks).pipe(
  957 + map(() => {
  958 + return { update: { entity: 1 } } as ImportEntitiesResultInfo;
  959 + }),
  960 + catchError(updateError => of({ error: { entity: 1 } } as ImportEntitiesResultInfo))
  961 + );
  962 + }),
  963 + catchError(findErr => of({ error: { entity: 1 } } as ImportEntitiesResultInfo))
  964 + );
  965 + } else {
  966 + return of({ error: { entity: 1 } } as ImportEntitiesResultInfo);
  967 + }
  968 + })
  969 + );
  970 + }
  971 +
  972 + private getSaveEntityObservable(entityType: EntityType, entityData: ImportEntityData,
  973 + config?: RequestConfig): Observable<BaseData<EntityId>> {
927 let saveEntityObservable: Observable<BaseData<EntityId>>; 974 let saveEntityObservable: Observable<BaseData<EntityId>>;
928 switch (entityType) { 975 switch (entityType) {
929 case EntityType.DEVICE: 976 case EntityType.DEVICE:
@@ -954,70 +1001,96 @@ export class EntityService { @@ -954,70 +1001,96 @@ export class EntityService {
954 }; 1001 };
955 saveEntityObservable = this.assetService.saveAsset(asset, config); 1002 saveEntityObservable = this.assetService.saveAsset(asset, config);
956 break; 1003 break;
  1004 + case EntityType.EDGE:
  1005 + const edgeEntityData: EdgeImportEntityData = entityData as EdgeImportEntityData;
  1006 + const edge: Edge = {
  1007 + name: edgeEntityData.name,
  1008 + type: edgeEntityData.type,
  1009 + label: edgeEntityData.label,
  1010 + additionalInfo: {
  1011 + description: edgeEntityData.description
  1012 + },
  1013 + edgeLicenseKey: edgeEntityData.edgeLicenseKey,
  1014 + cloudEndpoint: edgeEntityData.cloudEndpoint,
  1015 + routingKey: edgeEntityData.routingKey,
  1016 + secret: edgeEntityData.secret
  1017 + };
  1018 + saveEntityObservable = this.edgeService.saveEdge(edge, config);
  1019 + break;
957 } 1020 }
958 - return saveEntityObservable.pipe(  
959 - mergeMap((entity) => {  
960 - return this.saveEntityData(entity.id, entityData, config).pipe(  
961 - map(() => {  
962 - return { create: { entity: 1 } } as ImportEntitiesResultInfo;  
963 - }),  
964 - catchError(err => of({ error: { entity: 1 } } as ImportEntitiesResultInfo))  
965 - );  
966 - }),  
967 - catchError(err => {  
968 - if (update) {  
969 - let findEntityObservable: Observable<BaseData<EntityId>>;  
970 - switch (entityType) { 1021 + return saveEntityObservable;
  1022 +
  1023 + }
  1024 +
  1025 + private getUpdateEntityTasks(entityType: EntityType, entityData: ImportEntityData | EdgeImportEntityData,
  1026 + entity: BaseData<EntityId>, config?: RequestConfig): Observable<any>[] {
  1027 + const tasks: Observable<any>[] = [];
  1028 + let result;
  1029 + let additionalInfo;
  1030 + switch (entityType) {
  1031 + case EntityType.EDGE:
  1032 + result = entity as Edge;
  1033 + additionalInfo = result.additionalInfo || {};
  1034 + const edgeEntityData: EdgeImportEntityData = entityData as EdgeImportEntityData;
  1035 + if (result.label !== edgeEntityData.label ||
  1036 + result.type !== edgeEntityData.type ||
  1037 + result.cloudEndpoint !== edgeEntityData.cloudEndpoint ||
  1038 + result.edgeLicenseKey !== edgeEntityData.edgeLicenseKey ||
  1039 + result.routingKey !== edgeEntityData.routingKey ||
  1040 + result.secret !== edgeEntityData.secret ||
  1041 + additionalInfo.description !== edgeEntityData.description) {
  1042 + result.type = edgeEntityData.type;
  1043 + if (edgeEntityData.label !== '') {
  1044 + result.label = edgeEntityData.label;
  1045 + }
  1046 + if (edgeEntityData.description !== '') {
  1047 + result.additionalInfo = additionalInfo;
  1048 + result.additionalInfo.description = edgeEntityData.description;
  1049 + }
  1050 + if (edgeEntityData.cloudEndpoint !== '') {
  1051 + result.cloudEndpoint = edgeEntityData.cloudEndpoint;
  1052 + }
  1053 + if (edgeEntityData.edgeLicenseKey !== '') {
  1054 + result.edgeLicenseKey = edgeEntityData.edgeLicenseKey;
  1055 + }
  1056 + if (edgeEntityData.routingKey !== '') {
  1057 + result.routingKey = edgeEntityData.routingKey;
  1058 + }
  1059 + if (edgeEntityData.cloudEndpoint !== '') {
  1060 + result.secret = edgeEntityData.secret;
  1061 + }
  1062 + tasks.push(this.edgeService.saveEdge(result, config));
  1063 + }
  1064 + tasks.push(this.saveEntityData(entity.id, edgeEntityData, config));
  1065 + break;
  1066 + case EntityType.ASSET:
  1067 + case EntityType.DEVICE:
  1068 + result = entity as (Device | Asset);
  1069 + additionalInfo = result.additionalInfo || {};
  1070 + if (result.label !== entityData.label ||
  1071 + result.type !== entityData.type ||
  1072 + additionalInfo.description !== entityData.description ||
  1073 + (result.id.entityType === EntityType.DEVICE && (additionalInfo.gateway !== entityData.gateway)) ) {
  1074 + result.label = entityData.label;
  1075 + result.type = entityData.type;
  1076 + result.additionalInfo = additionalInfo;
  1077 + result.additionalInfo.description = entityData.description;
  1078 + if (result.id.entityType === EntityType.DEVICE) {
  1079 + result.additionalInfo.gateway = entityData.gateway;
  1080 + }
  1081 + switch (result.id.entityType) {
971 case EntityType.DEVICE: 1082 case EntityType.DEVICE:
972 - findEntityObservable = this.deviceService.findByName(entityData.name, config); 1083 + tasks.push(this.deviceService.saveDevice(result, config));
973 break; 1084 break;
974 case EntityType.ASSET: 1085 case EntityType.ASSET:
975 - findEntityObservable = this.assetService.findByName(entityData.name, config); 1086 + tasks.push(this.assetService.saveAsset(result, config));
976 break; 1087 break;
977 } 1088 }
978 - return findEntityObservable.pipe(  
979 - mergeMap((entity) => {  
980 - const tasks: Observable<any>[] = [];  
981 - const result: Device & Asset = entity as (Device | Asset);  
982 - const additionalInfo = result.additionalInfo || {};  
983 - if (result.label !== entityData.label ||  
984 - result.type !== entityData.type ||  
985 - additionalInfo.description !== entityData.description ||  
986 - (result.id.entityType === EntityType.DEVICE && (additionalInfo.gateway !== entityData.gateway)) ) {  
987 - result.label = entityData.label;  
988 - result.type = entityData.type;  
989 - result.additionalInfo = additionalInfo;  
990 - result.additionalInfo.description = entityData.description;  
991 - if (result.id.entityType === EntityType.DEVICE) {  
992 - result.additionalInfo.gateway = entityData.gateway;  
993 - }  
994 - if (result.id.entityType === EntityType.DEVICE && result.deviceProfileId) {  
995 - delete result.deviceProfileId;  
996 - }  
997 - switch (result.id.entityType) {  
998 - case EntityType.DEVICE:  
999 - tasks.push(this.deviceService.saveDevice(result, config));  
1000 - break;  
1001 - case EntityType.ASSET:  
1002 - tasks.push(this.assetService.saveAsset(result, config));  
1003 - break;  
1004 - }  
1005 - }  
1006 - tasks.push(this.saveEntityData(entity.id, entityData, config));  
1007 - return forkJoin(tasks).pipe(  
1008 - map(() => {  
1009 - return { update: { entity: 1 } } as ImportEntitiesResultInfo;  
1010 - }),  
1011 - catchError(updateError => of({ error: { entity: 1 } } as ImportEntitiesResultInfo))  
1012 - );  
1013 - }),  
1014 - catchError(findErr => of({ error: { entity: 1 } } as ImportEntitiesResultInfo))  
1015 - );  
1016 - } else {  
1017 - return of({ error: { entity: 1 } } as ImportEntitiesResultInfo);  
1018 } 1089 }
1019 - })  
1020 - ); 1090 + tasks.push(this.saveEntityData(entity.id, entityData, config));
  1091 + break;
  1092 + }
  1093 + return tasks;
1021 } 1094 }
1022 1095
1023 public saveEntityData(entityId: EntityId, entityData: ImportEntityData, config?: RequestConfig): Observable<any> { 1096 public saveEntityData(entityId: EntityId, entityData: ImportEntityData, config?: RequestConfig): Observable<any> {