Added button unassignFromEdge for entities. Added findAssetsByTenantIdAndEdgeIdAndType()

This commit is contained in:
Artem Babak 2020-12-10 16:59:15 +02:00
parent 04e50696f6
commit 3ffa7e3592
17 changed files with 105 additions and 35 deletions

View File

@ -485,6 +485,7 @@ public class AssetController extends BaseController {
@PathVariable(EDGE_ID) String strEdgeId,
@RequestParam int pageSize,
@RequestParam int page,
@RequestParam(required = false) String type,
@RequestParam(required = false) String textSearch,
@RequestParam(required = false) String sortProperty,
@RequestParam(required = false) String sortOrder,
@ -496,7 +497,11 @@ public class AssetController extends BaseController {
EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
checkEdgeId(edgeId, Operation.READ);
TimePageLink pageLink = createTimePageLink(pageSize, page, textSearch, sortProperty, sortOrder, startTime, endTime);
return checkNotNull(assetService.findAssetsByTenantIdAndEdgeId(tenantId, edgeId, pageLink));
if (type != null && type.trim().length() > 0) {
return checkNotNull(assetService.findAssetsByTenantIdAndEdgeIdAndType(tenantId, edgeId, type, pageLink));
} else {
return checkNotNull(assetService.findAssetsByTenantIdAndEdgeId(tenantId, edgeId, pageLink));
}
} catch (Exception e) {
throw handleException(e);
}

View File

@ -82,4 +82,6 @@ public interface AssetService {
Asset unassignAssetFromEdge(TenantId tenantId, AssetId assetId, EdgeId edgeId);
PageData<Asset> findAssetsByTenantIdAndEdgeId(TenantId tenantId, EdgeId edgeId, TimePageLink pageLink);
PageData<Asset> findAssetsByTenantIdAndEdgeIdAndType(TenantId tenantId, EdgeId edgeId, String type, TimePageLink pageLink);
}

View File

@ -176,4 +176,15 @@ public interface AssetDao extends Dao<Asset> {
* @return the list of asset objects
*/
PageData<Asset> findAssetsByTenantIdAndEdgeId(UUID tenantId, UUID edgeId, TimePageLink pageLink);
/**
* Find assets by tenantId, edgeId, type and page link.
*
* @param tenantId the tenantId
* @param edgeId the edgeId
* @param type the type
* @param pageLink the page link
* @return the list of asset objects
*/
PageData<Asset> findAssetsByTenantIdAndEdgeIdAndType(UUID tenantId, UUID edgeId, String type, TimePageLink pageLink);
}

View File

@ -364,6 +364,16 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ
return assetDao.findAssetsByTenantIdAndEdgeId(tenantId.getId(), edgeId.getId(), pageLink);
}
@Override
public PageData<Asset> findAssetsByTenantIdAndEdgeIdAndType(TenantId tenantId, EdgeId edgeId, String type, TimePageLink pageLink) {
log.trace("Executing findAssetsByTenantIdAndEdgeIdAndType, tenantId [{}], edgeId [{}], type [{}] pageLink [{}]", tenantId, edgeId, type, pageLink);
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
validateId(edgeId, INCORRECT_EDGE_ID + edgeId);
validateString(type, "Incorrect type " + type);
validatePageLink(pageLink);
return assetDao.findAssetsByTenantIdAndEdgeIdAndType(tenantId.getId(), edgeId.getId(), type, pageLink);
}
private DataValidator<Asset> assetValidator =
new DataValidator<Asset>() {

View File

@ -132,4 +132,15 @@ public interface AssetRepository extends PagingAndSortingRepository<AssetEntity,
@Param("searchText") String searchText,
Pageable pageable);
@Query("SELECT a FROM AssetEntity a, RelationEntity re WHERE a.tenantId = :tenantId " +
"AND a.id = re.toId AND re.toType = 'ASSET' AND re.relationTypeGroup = 'EDGE' " +
"AND re.relationType = 'Contains' AND re.fromId = :edgeId AND re.fromType = 'EDGE' " +
"AND a.type = :type " +
"AND LOWER(a.searchText) LIKE LOWER(CONCAT(:searchText, '%'))")
Page<AssetEntity> findByTenantIdAndEdgeIdAndType(@Param("tenantId") UUID tenantId,
@Param("edgeId") UUID edgeId,
@Param("type") String type,
@Param("searchText") String searchText,
Pageable pageable);
}

View File

@ -196,4 +196,16 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im
Objects.toString(pageLink.getTextSearch(), ""),
DaoUtil.toPageable(pageLink)));
}
@Override
public PageData<Asset> findAssetsByTenantIdAndEdgeIdAndType(UUID tenantId, UUID edgeId, String type, TimePageLink pageLink) {
log.debug("Try to find assets by tenantId [{}], edgeId [{}], type [{}] and pageLink [{}]", tenantId, edgeId, type, pageLink);
return DaoUtil.toPageData(assetRepository
.findByTenantIdAndEdgeIdAndType(
tenantId,
edgeId,
type,
Objects.toString(pageLink.getTextSearch(), ""),
DaoUtil.toPageable(pageLink)));
}
}

View File

@ -99,7 +99,7 @@ export class AssetService {
return this.http.delete(`/api/edge/${edgeId}/asset/${assetId}`, defaultHttpOptionsFromConfig(config));
}
public getEdgeAssets(edgeId, pageLink: PageLink, type: string = '',
public getEdgeAssets(edgeId: string, pageLink: PageLink, type: string = '',
config?: RequestConfig): Observable<PageData<AssetInfo>> {
return this.http.get<PageData<AssetInfo>>(`/api/edge/${edgeId}/assets${pageLink.toQuery()}&type=${type}`,
defaultHttpOptionsFromConfig(config));

View File

@ -34,6 +34,12 @@
[fxShow]="!isEdit && (assetScope === 'customer' || assetScope === 'tenant') && isAssignedToCustomer(entity)">
{{ (entity?.customerIsPublic ? 'asset.make-private' : 'asset.unassign-from-customer') | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'unassignFromEdge')"
[fxShow]="!isEdit && assetScope === 'edge'">
{{ 'edge.unassign-from-edge' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'delete')"

View File

@ -466,6 +466,9 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse
case 'unassignFromCustomer':
this.unassignFromCustomer(action.event, action.entity);
return true;
case 'unassignFromEdge':
this.unassignFromEdge(action.event, action.entity);
return true;
}
return false;
}

View File

@ -53,6 +53,12 @@
[fxShow]="!isEdit && dashboardScope === 'customer' && !isCurrentPublicCustomer(entity)">
{{ 'dashboard.unassign-from-customer' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'unassignFromEdge')"
[fxShow]="!isEdit && dashboardScope === 'edge'">
{{ 'edge.unassign-from-edge' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'delete')"

View File

@ -543,6 +543,9 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
case 'unassignFromCustomer':
this.unassignFromCustomer(action.event, action.entity, this.config.componentsData.customerId);
return true;
case 'unassignFromEdge':
this.unassignFromEdge(action.event, action.entity);
return true;
}
return false;
}
@ -572,7 +575,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
$event.stopPropagation();
}
this.dialogService.confirm(
this.translate.instant('dashboard.unassign-dashboard-from-edge-title', {dashboardName: dashboard.name}),
this.translate.instant('dashboard.unassign-dashboard-title', {dashboardTitle: dashboard.title}),
this.translate.instant('dashboard.unassign-dashboard-from-edge-text'),
this.translate.instant('action.no'),
this.translate.instant('action.yes'),

View File

@ -40,6 +40,12 @@
[fxShow]="!isEdit">
{{ (deviceScope === 'customer_user' ? 'device.view-credentials' : 'device.manage-credentials') | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'unassignFromEdge')"
[fxShow]="!isEdit && deviceScope === 'edge'">
{{ 'edge.unassign-from-edge' | translate }}
</button>
<button mat-raised-button color="primary" fxFlex.xs
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'delete')"

View File

@ -519,6 +519,9 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
case 'unassignFromCustomer':
this.unassignFromCustomer(action.event, action.entity);
return true;
case 'unassignFromEdge':
this.unassignFromEdge(action.event, action.entity);
return true;
case 'manageCredentials':
this.manageCredentials(action.event, action.entity);
return true;

View File

@ -34,6 +34,12 @@
[fxShow]="!isEdit && (entityViewScope === 'customer' || entityViewScope === 'tenant') && isAssignedToCustomer(entity)">
{{ (entity?.customerIsPublic ? 'entity-view.make-private' : 'entity-view.unassign-from-customer') | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'unassignFromEdge')"
[fxShow]="!isEdit && entityViewScope === 'edge'">
{{ 'edge.unassign-from-edge' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'delete')"

View File

@ -441,6 +441,9 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
case 'unassignFromCustomer':
this.unassignFromCustomer(action.event, action.entity);
return true;
case 'unassignFromEdge':
this.unassignFromEdge(action.event, action.entity);
return true;
}
return false;
}

View File

@ -31,21 +31,21 @@
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'setRoot')"
[fxShow]="!isEdit && !entity?.root && !isEdgeRuleChainScope()">
{{'rulechain.set-root' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'setRoot')"
[fxShow]="!isEdit && isEdgeRuleChainScope() && !isRootRuleChain()">
[fxShow]="!isEdit && !entity?.root && ruleChainScope === 'tenant'">
{{'rulechain.set-root' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'setDefaultRoot')"
[fxShow]="!isEdit && !entity?.root && isEdgesRuleChainScope()">
[fxShow]="!isEdit && !entity?.root && ruleChainScope === 'edges'">
{{'rulechain.set-default-root-edge' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'setRoot')"
[fxShow]="!isEdit && !isRootRuleChain() && ruleChainScope === 'edge'">
{{'rulechain.set-root' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'delete')"

View File

@ -31,6 +31,8 @@ import { EntityTableConfig } from '@home/models/entity/entities-table-config.mod
})
export class RuleChainComponent extends EntityComponent<RuleChain> {
ruleChainScope: 'tenant' | 'edges' | 'edge';
constructor(protected store: Store<AppState>,
protected translate: TranslateService,
@Inject('entity') protected entityValue: RuleChain,
@ -39,6 +41,11 @@ export class RuleChainComponent extends EntityComponent<RuleChain> {
super(store, fb, entityValue, entitiesTableConfigValue);
}
ngOnInit() {
this.ruleChainScope = this.entitiesTableConfig.componentsData.ruleChainScope;
super.ngOnInit();
}
hideDelete() {
if (this.entitiesTableConfig) {
return !this.entitiesTableConfig.deleteEnabled(this.entity);
@ -79,30 +86,6 @@ export class RuleChainComponent extends EntityComponent<RuleChain> {
}));
}
isTenantRuleChainScope() {
if (this.entitiesTableConfig) {
return this.entitiesTableConfig.componentsData.ruleChainScope == 'tenant';
} else {
return false;
}
}
isEdgesRuleChainScope() {
if (this.entitiesTableConfig) {
return this.entitiesTableConfig.componentsData.ruleChainScope == 'edges';
} else {
return false;
}
}
isEdgeRuleChainScope() {
if (this.entitiesTableConfig) {
return this.entitiesTableConfig.componentsData.ruleChainScope == 'edge';
} else {
return false;
}
}
isRootRuleChain() {
if (this.entitiesTableConfig && this.entityValue) {
return this.entitiesTableConfig.componentsData.rootRuleChainId == this.entityValue.id.id;