Improvement to the Rule Chain diff
This commit is contained in:
parent
493b8f2f7b
commit
2dad98b2f7
@ -86,7 +86,6 @@ public abstract class BaseEntityImportService<I extends EntityId, E extends Expo
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public EntityImportResult<E> importEntity(EntitiesImportCtx ctx, D exportData) throws ThingsboardException {
|
public EntityImportResult<E> importEntity(EntitiesImportCtx ctx, D exportData) throws ThingsboardException {
|
||||||
// TbStopWatch sw = TbStopWatch.create("find");
|
|
||||||
EntityImportResult<E> importResult = new EntityImportResult<>();
|
EntityImportResult<E> importResult = new EntityImportResult<>();
|
||||||
importResult.setEntityType(getEntityType());
|
importResult.setEntityType(getEntityType());
|
||||||
IdProvider idProvider = new IdProvider(ctx, importResult);
|
IdProvider idProvider = new IdProvider(ctx, importResult);
|
||||||
@ -107,10 +106,9 @@ public abstract class BaseEntityImportService<I extends EntityId, E extends Expo
|
|||||||
|
|
||||||
E prepared = prepare(ctx, entity, existingEntity, exportData, idProvider);
|
E prepared = prepare(ctx, entity, existingEntity, exportData, idProvider);
|
||||||
|
|
||||||
boolean saveOrUpdate = existingEntity == null || compare(prepared, existingEntity);
|
boolean saveOrUpdate = existingEntity == null || compare(ctx, exportData, prepared, existingEntity);
|
||||||
|
|
||||||
if (saveOrUpdate) {
|
if (saveOrUpdate) {
|
||||||
// sw.startNew("prepareAndSave");
|
|
||||||
E savedEntity = saveOrUpdate(ctx, prepared, exportData, idProvider);
|
E savedEntity = saveOrUpdate(ctx, prepared, exportData, idProvider);
|
||||||
boolean created = existingEntity == null;
|
boolean created = existingEntity == null;
|
||||||
importResult.setCreated(created);
|
importResult.setCreated(created);
|
||||||
@ -123,14 +121,8 @@ public abstract class BaseEntityImportService<I extends EntityId, E extends Expo
|
|||||||
importResult.setUpdatedRelatedEntities(updateRelatedEntitiesIfUnmodified(ctx, prepared, exportData, idProvider));
|
importResult.setUpdatedRelatedEntities(updateRelatedEntitiesIfUnmodified(ctx, prepared, exportData, idProvider));
|
||||||
}
|
}
|
||||||
|
|
||||||
// sw.startNew("afterSaved");
|
|
||||||
processAfterSaved(ctx, importResult, exportData, idProvider);
|
processAfterSaved(ctx, importResult, exportData, idProvider);
|
||||||
|
|
||||||
// sw.stop();
|
|
||||||
// for (var task : sw.getTaskInfo()) {
|
|
||||||
// log.info("[{}][{}] Executed: {} in {}ms", exportData.getEntityType(), exportData.getEntity().getId(), task.getTaskName(), task.getTimeMillis());
|
|
||||||
// }
|
|
||||||
// log.info("[{}][{}] Total time: {}ms", exportData.getEntityType(), exportData.getEntity().getId(), sw.getTotalTimeMillis());
|
|
||||||
return importResult;
|
return importResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,16 +137,16 @@ public abstract class BaseEntityImportService<I extends EntityId, E extends Expo
|
|||||||
|
|
||||||
protected abstract E prepare(EntitiesImportCtx ctx, E entity, E oldEntity, D exportData, IdProvider idProvider);
|
protected abstract E prepare(EntitiesImportCtx ctx, E entity, E oldEntity, D exportData, IdProvider idProvider);
|
||||||
|
|
||||||
protected boolean compare(E prepared, E existing) {
|
protected boolean compare(EntitiesImportCtx ctx, D exportData, E prepared, E existing) {
|
||||||
var newCopy = deepCopy(prepared);
|
var newCopy = deepCopy(prepared);
|
||||||
var existingCopy = deepCopy(existing);
|
var existingCopy = deepCopy(existing);
|
||||||
cleanupForComparison(newCopy);
|
cleanupForComparison(newCopy);
|
||||||
cleanupForComparison(existingCopy);
|
cleanupForComparison(existingCopy);
|
||||||
var result = !newCopy.equals(existingCopy);
|
var result = !newCopy.equals(existingCopy);
|
||||||
if (result) {
|
if (result) {
|
||||||
log.info("[{}] Found update.", prepared.getId());
|
log.debug("[{}] Found update.", prepared.getId());
|
||||||
log.info("[{}] From: {}", prepared.getId(), newCopy);
|
log.debug("[{}] From: {}", prepared.getId(), newCopy);
|
||||||
log.info("[{}] To: {}", prepared.getId(), existingCopy);
|
log.debug("[{}] To: {}", prepared.getId(), existingCopy);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,6 +87,7 @@ public class RuleChainImportService extends BaseEntityImportService<RuleChainId,
|
|||||||
.forEach(ruleChainConnectionInfo -> {
|
.forEach(ruleChainConnectionInfo -> {
|
||||||
ruleChainConnectionInfo.setTargetRuleChainId(idProvider.getInternalId(ruleChainConnectionInfo.getTargetRuleChainId(), false));
|
ruleChainConnectionInfo.setTargetRuleChainId(idProvider.getInternalId(ruleChainConnectionInfo.getTargetRuleChainId(), false));
|
||||||
});
|
});
|
||||||
|
//TODO: lookup rule node id based on external rule node id.
|
||||||
ruleChain.setFirstRuleNodeId(null);
|
ruleChain.setFirstRuleNodeId(null);
|
||||||
return ruleChain;
|
return ruleChain;
|
||||||
}
|
}
|
||||||
@ -100,10 +101,14 @@ public class RuleChainImportService extends BaseEntityImportService<RuleChainId,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean compare(RuleChain prepared, RuleChain existing) {
|
protected boolean compare(EntitiesImportCtx ctx, RuleChainExportData exportData, RuleChain prepared, RuleChain existing) {
|
||||||
//Always update, since we don't fetch the metadata.
|
boolean different = super.compare(ctx, exportData, prepared, existing);
|
||||||
//TODO: improve and fetch the metadata of existing entity.
|
if (!different) {
|
||||||
return true;
|
RuleChainMetaData newMD = exportData.getMetaData();
|
||||||
|
RuleChainMetaData existingMD = ruleChainService.loadRuleChainMetaData(ctx.getTenantId(), prepared.getId());
|
||||||
|
different = newMD.equals(existingMD);
|
||||||
|
}
|
||||||
|
return different;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user