Sort order and diff fixes
This commit is contained in:
parent
09402f40ac
commit
59325226ac
@ -328,16 +328,17 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
|
||||
EntityId externalId = ((ExportableEntity<EntityId>) entity).getExternalId();
|
||||
if (externalId == null) externalId = entityId;
|
||||
|
||||
EntityExportData<?> currentVersion = exportImportService.exportEntity(user, entityId, EntityExportSettings.builder()
|
||||
.exportRelations(true)
|
||||
.exportAttributes(true)
|
||||
.build());
|
||||
return transformAsync(gitServiceQueue.getEntity(user.getTenantId(), versionId, externalId),
|
||||
otherVersion -> transform(gitServiceQueue.getContentsDiff(user.getTenantId(),
|
||||
JacksonUtil.toPrettyString(currentVersion),
|
||||
JacksonUtil.toPrettyString(otherVersion)), rawDiff -> {
|
||||
return new EntityDataDiff(currentVersion, otherVersion, rawDiff);
|
||||
}, MoreExecutors.directExecutor()), MoreExecutors.directExecutor());
|
||||
otherVersion -> {
|
||||
EntityExportData<?> currentVersion = exportImportService.exportEntity(user, entityId, EntityExportSettings.builder()
|
||||
.exportRelations(otherVersion.getRelations() != null)
|
||||
.exportAttributes(otherVersion.getAttributes() != null)
|
||||
.build());
|
||||
return transform(gitServiceQueue.getContentsDiff(user.getTenantId(),
|
||||
JacksonUtil.toPrettyString(currentVersion.sort()),
|
||||
JacksonUtil.toPrettyString(otherVersion.sort())),
|
||||
rawDiff -> new EntityDataDiff(currentVersion, otherVersion, rawDiff), MoreExecutors.directExecutor());
|
||||
}, MoreExecutors.directExecutor());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -109,7 +109,7 @@ public class DefaultGitVersionControlQueueService implements GitVersionControlQu
|
||||
SettableFuture<Void> future = SettableFuture.create();
|
||||
|
||||
String path = getRelativePath(entityData.getEntityType(), entityData.getEntity().getId());
|
||||
String entityDataJson = JacksonUtil.toPrettyString(entityData);
|
||||
String entityDataJson = JacksonUtil.toPrettyString(entityData.sort());
|
||||
|
||||
registerAndSend(commit, builder -> builder.setCommitRequest(
|
||||
buildCommitRequest(commit).setAddMsg(
|
||||
@ -130,7 +130,7 @@ public class DefaultGitVersionControlQueueService implements GitVersionControlQu
|
||||
buildCommitRequest(commit).setDeleteMsg(
|
||||
TransportProtos.DeleteMsg.newBuilder().setRelativePath(path).build()
|
||||
).build()
|
||||
).build(), wrap(commit.getFuture(), null));
|
||||
).build(), wrap(future, null));
|
||||
|
||||
return future;
|
||||
}
|
||||
|
||||
@ -28,6 +28,8 @@ import org.thingsboard.server.common.data.id.EntityId;
|
||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||
import org.thingsboard.server.common.data.sync.JsonTbEntity;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -41,6 +43,15 @@ import java.util.Map;
|
||||
@Data
|
||||
public class EntityExportData<E extends ExportableEntity<? extends EntityId>> {
|
||||
|
||||
public static final Comparator<EntityRelation> relationsComparator = Comparator
|
||||
.comparing(EntityRelation::getFrom, Comparator.comparing(EntityId::getId))
|
||||
.thenComparing(EntityRelation::getTo, Comparator.comparing(EntityId::getId))
|
||||
.thenComparing(EntityRelation::getTypeGroup)
|
||||
.thenComparing(EntityRelation::getType);
|
||||
|
||||
public static final Comparator<AttributeExportData> attrComparator = Comparator
|
||||
.comparing(AttributeExportData::getKey).thenComparing(AttributeExportData::getLastUpdateTs);
|
||||
|
||||
@JsonTbEntity
|
||||
private E entity;
|
||||
private EntityType entityType;
|
||||
@ -48,4 +59,14 @@ public class EntityExportData<E extends ExportableEntity<? extends EntityId>> {
|
||||
private List<EntityRelation> relations;
|
||||
private Map<String, List<AttributeExportData>> attributes;
|
||||
|
||||
public EntityExportData<E> sort() {
|
||||
if (relations != null && !relations.isEmpty()) {
|
||||
relations.sort(relationsComparator);
|
||||
}
|
||||
if (attributes != null && !attributes.isEmpty()) {
|
||||
attributes.values().forEach(list -> list.sort(attrComparator));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -18,8 +18,10 @@ package org.thingsboard.common.util;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.MapperFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.databind.json.JsonMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -31,8 +33,10 @@ import java.util.Arrays;
|
||||
public class JacksonUtil {
|
||||
|
||||
public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
||||
public static final ObjectMapper PRETTY_JSON_MAPPER = new ObjectMapper()
|
||||
.enable(SerializationFeature.INDENT_OUTPUT);
|
||||
public static final ObjectMapper PRETTY_SORTED_JSON_MAPPER = JsonMapper.builder().enable(SerializationFeature.INDENT_OUTPUT)
|
||||
.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true)
|
||||
.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
|
||||
.build();
|
||||
|
||||
public static <T> T convertValue(Object fromValue, Class<T> toValueType) {
|
||||
try {
|
||||
@ -99,7 +103,7 @@ public class JacksonUtil {
|
||||
|
||||
public static String toPrettyString(Object o) {
|
||||
try {
|
||||
return PRETTY_JSON_MAPPER.writeValueAsString(o);
|
||||
return PRETTY_SORTED_JSON_MAPPER.writeValueAsString(o);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user