diff --git a/src/main/java/org/openepics/names/rest/controller/VerificationController.java b/src/main/java/org/openepics/names/rest/controller/VerificationController.java index 5dab1f70895f2cbc92795ea2b16655711432110b..8419962dc60d4bd7147d87de0755db9c371207a5 100644 --- a/src/main/java/org/openepics/names/rest/controller/VerificationController.java +++ b/src/main/java/org/openepics/names/rest/controller/VerificationController.java @@ -47,12 +47,14 @@ import org.openepics.names.repository.model.DeviceGroup; import org.openepics.names.repository.model.DeviceType; import org.openepics.names.repository.model.Discipline; import org.openepics.names.repository.model.Name; +import org.openepics.names.repository.model.Structure; import org.openepics.names.repository.model.Subsystem; import org.openepics.names.repository.model.System; import org.openepics.names.repository.model.SystemGroup; import org.openepics.names.repository.old.IDeviceRevisionRepository; import org.openepics.names.repository.old.INamePartRevisionRepository; import org.openepics.names.util.HolderIRepositories; +import org.openepics.names.util.ValidateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.GetMapping; @@ -116,8 +118,8 @@ import io.swagger.v3.oas.annotations.Hidden; * Note * <ul> * <li>log statements and output are technical and implementation-like, and meant to give detailed information</li> - * <li>after migration has been done and verified, this part of REST API no longer holds any function and may be removed. - * As a suggestion, this may done in the second release of the software.</li> + * <li>after migration has been done and verified, this part of REST API no longer holds any function and may be removed + * together with related code not used elsewhere. As a suggestion, this may done in the second release of the software.</li> * </ul> * * <p> @@ -199,32 +201,10 @@ public class VerificationController { // all entries ok // no entry nok - // check - // check entry by entry - // each attribute as expected - // ---------- - // to check parent uuid - // ---------- - // date may be in different format for different objects, to be formatted before being compared - // ---------- - // e.g. - // system.id = namepartrevision.id - // system.version = namepartrevision.version - // system.uuid = namepartrevision.namepart_id (namepart.id --> namepart.uuid) - // ( system.parent_uuid = namepartrevision.parent_id (namepart.id --> namepart.uuid) ) - // system.name = namepartrevision.name - // system.mnemonic = namepartrevision.mnemonic - // system.mnemonic_equivalence = namepartrevision.mnemoniceqclass - // system.description = namepartrevision.description - // system.status = namepartrevision.status - // system.latest = true if id = get max id for uuid (consider status, but not PENDING) - // system.deleted = namepartrevision.deleted - // system.requested = namepartrevision.requestdate - // system.requested_by = namepartrevision.requestedby_id (useraccount.id --> useraccount.username) - // system.requested_comment = namepartrevision.requestercomment - // system.processed = namepartrevision.processdate - // system.processed_by = namepartrevision.processedby_id (useraccount.id --> useraccount.username) - // system.processed_comment = namepartrevision.processorcomment + // e.g. if there has been usage of new database tables (new entries) before verification, there are more rows in those tables + // which means new and more ids than in old database tables + // which means those new ids don't exist in old database tables + // --> retrieval of device revisions for those ids will give null StringBuilder reportHtml = new StringBuilder(); @@ -336,37 +316,9 @@ public class VerificationController { for (SystemGroup systemGroup : systemGroups) { namePartRevision = mapIdNamePartRevision.get(systemGroup.getId()); - check = namePartRevision != null; - - check = check && systemGroup.getId().equals(namePartRevision.getId()); - check = check && systemGroup.getVersion().equals(namePartRevision.getVersion()); - check = check && systemGroup.getUuid().equals(namePartRevision.getNamePart().getUuid()); - - // no parent uuid for system group - check = check && StringUtils.equals(systemGroup.getName(), namePartRevision.getName()); - check = check && StringUtils.equals(systemGroup.getMnemonic(), namePartRevision.getMnemonic()); - check = check && StringUtils.equals(systemGroup.getMnemonicEquivalence(), namePartRevision.getMnemonicEqClass()); - check = check && StringUtils.equals(systemGroup.getDescription(), namePartRevision.getDescription()); - check = check && ((systemGroup.getStatus() == null && namePartRevision.getStatus() == null) - || (systemGroup.getStatus().name().equals(namePartRevision.getStatus().name()))); - - // latest - // true if id = get max id for uuid - // special rules for pending, not consider pending - check = check && systemGroup.isLatest() == systemGroup.getId().equals(mapUuidMaxIdSystemGroup.get(systemGroup.getUuid())); - check = check && systemGroup.isDeleted() == namePartRevision.isDeleted(); - - // date may be in different format for different objects, to be formatted before being compared - check = check && ((systemGroup.getRequested() == null && namePartRevision.getRequestDate() == null) - || StringUtils.equals(SDF.format(systemGroup.getRequested()), SDF.format(namePartRevision.getRequestDate()))); - check = check && (systemGroup.getRequestedBy() == null && namePartRevision.getRequestedBy() == null - || StringUtils.equals(systemGroup.getRequestedBy(), namePartRevision.getRequestedBy().getUsername())); - check = check && StringUtils.equals(systemGroup.getRequestedComment(), namePartRevision.getRequesterComment()); - check = check && ((systemGroup.getProcessed() == null && namePartRevision.getProcessDate() == null) - || StringUtils.equals(SDF.format(systemGroup.getProcessed()), SDF.format(namePartRevision.getProcessDate()))); - check = check && (systemGroup.getProcessedBy() == null && namePartRevision.getProcessedBy() == null - || StringUtils.equals(systemGroup.getProcessedBy(), namePartRevision.getProcessedBy().getUsername())); - check = check && StringUtils.equals(systemGroup.getProcessedComment(), namePartRevision.getProcessorComment()); + // no check for parent uuid + check = namePartRevision != null + && equals(systemGroup, namePartRevision, mapUuidMaxIdSystemGroup); // add to count if (check) { @@ -384,38 +336,9 @@ public class VerificationController { for (System system : systems) { namePartRevision = mapIdNamePartRevision.get(system.getId()); - check = namePartRevision != null; - - check = check && system.getId().equals(namePartRevision.getId()); - check = check && system.getVersion().equals(namePartRevision.getVersion()); - check = check && system.getUuid().equals(namePartRevision.getNamePart().getUuid()); - - // parent uuid - check = check && system.getParentUuid().equals(namePartRevision.getParent().getUuid()); - check = check && StringUtils.equals(system.getName(), namePartRevision.getName()); - check = check && StringUtils.equals(system.getMnemonic(), namePartRevision.getMnemonic()); - check = check && StringUtils.equals(system.getMnemonicEquivalence(), namePartRevision.getMnemonicEqClass()); - check = check && StringUtils.equals(system.getDescription(), namePartRevision.getDescription()); - check = check && ((system.getStatus() == null && namePartRevision.getStatus() == null) - || (system.getStatus().name().equals(namePartRevision.getStatus().name()))); - - // latest - // true if id = get max id for uuid - // special rules for pending, not consider pending - check = check && system.isLatest() == system.getId().equals(mapUuidMaxIdSystem.get(system.getUuid())); - check = check && system.isDeleted() == namePartRevision.isDeleted(); - - // date may be in different format for different objects, to be formatted before being compared - check = check && ((system.getRequested() == null && namePartRevision.getRequestDate() == null) - || StringUtils.equals(SDF.format(system.getRequested()), SDF.format(namePartRevision.getRequestDate()))); - check = check && (system.getRequestedBy() == null && namePartRevision.getRequestedBy() == null - || StringUtils.equals(system.getRequestedBy(), namePartRevision.getRequestedBy().getUsername())); - check = check && StringUtils.equals(system.getRequestedComment(), namePartRevision.getRequesterComment()); - check = check && ((system.getProcessed() == null && namePartRevision.getProcessDate() == null) - || StringUtils.equals(SDF.format(system.getProcessed()), SDF.format(namePartRevision.getProcessDate()))); - check = check && (system.getProcessedBy() == null && namePartRevision.getProcessedBy() == null - || StringUtils.equals(system.getProcessedBy(), namePartRevision.getProcessedBy().getUsername())); - check = check && StringUtils.equals(system.getProcessedComment(), namePartRevision.getProcessorComment()); + check = namePartRevision != null + && equals(system, namePartRevision, mapUuidMaxIdSystem) + && system.getParentUuid().equals(namePartRevision.getParent().getUuid()); // add to count if (check) { @@ -433,38 +356,9 @@ public class VerificationController { for (Subsystem subsystem : subsystems) { namePartRevision = mapIdNamePartRevision.get(subsystem.getId()); - check = namePartRevision != null; - - check = check && subsystem.getId().equals(namePartRevision.getId()); - check = check && subsystem.getVersion().equals(namePartRevision.getVersion()); - check = check && subsystem.getUuid().equals(namePartRevision.getNamePart().getUuid()); - - // parent uuid - check = check && subsystem.getParentUuid().equals(namePartRevision.getParent().getUuid()); - check = check && StringUtils.equals(subsystem.getName(), namePartRevision.getName()); - check = check && StringUtils.equals(subsystem.getMnemonic(), namePartRevision.getMnemonic()); - check = check && StringUtils.equals(subsystem.getMnemonicEquivalence(), namePartRevision.getMnemonicEqClass()); - check = check && StringUtils.equals(subsystem.getDescription(), namePartRevision.getDescription()); - check = check && ((subsystem.getStatus() == null && namePartRevision.getStatus() == null) - || (subsystem.getStatus().name().equals(namePartRevision.getStatus().name()))); - - // latest - // true if id = get max id for uuid - // special rules for pending, not consider pending - check = check && subsystem.isLatest() == subsystem.getId().equals(mapUuidMaxIdSubsystem.get(subsystem.getUuid())); - check = check && subsystem.isDeleted() == namePartRevision.isDeleted(); - - // date may be in different format for different objects, to be formatted before being compared - check = check && ((subsystem.getRequested() == null && namePartRevision.getRequestDate() == null) - || StringUtils.equals(SDF.format(subsystem.getRequested()), SDF.format(namePartRevision.getRequestDate()))); - check = check && (subsystem.getRequestedBy() == null && namePartRevision.getRequestedBy() == null - || StringUtils.equals(subsystem.getRequestedBy(), namePartRevision.getRequestedBy().getUsername())); - check = check && StringUtils.equals(subsystem.getRequestedComment(), namePartRevision.getRequesterComment()); - check = check && ((subsystem.getProcessed() == null && namePartRevision.getProcessDate() == null) - || StringUtils.equals(SDF.format(subsystem.getProcessed()), SDF.format(namePartRevision.getProcessDate()))); - check = check && (subsystem.getProcessedBy() == null && namePartRevision.getProcessedBy() == null - || StringUtils.equals(subsystem.getProcessedBy(), namePartRevision.getProcessedBy().getUsername())); - check = check && StringUtils.equals(subsystem.getProcessedComment(), namePartRevision.getProcessorComment()); + check = namePartRevision != null + && equals(subsystem, namePartRevision, mapUuidMaxIdSubsystem) + && subsystem.getParentUuid().equals(namePartRevision.getParent().getUuid()); // add to count if (check) { @@ -482,37 +376,9 @@ public class VerificationController { for (Discipline discipline : disciplines) { namePartRevision = mapIdNamePartRevision.get(discipline.getId()); - check = namePartRevision != null; - - check = check && discipline.getId().equals(namePartRevision.getId()); - check = check && discipline.getVersion().equals(namePartRevision.getVersion()); - check = check && discipline.getUuid().equals(namePartRevision.getNamePart().getUuid()); - - // no parent uuid for discipline - check = check && StringUtils.equals(discipline.getName(), namePartRevision.getName()); - check = check && StringUtils.equals(discipline.getMnemonic(), namePartRevision.getMnemonic()); - check = check && StringUtils.equals(discipline.getMnemonicEquivalence(), namePartRevision.getMnemonicEqClass()); - check = check && StringUtils.equals(discipline.getDescription(), namePartRevision.getDescription()); - check = check && ((discipline.getStatus() == null && namePartRevision.getStatus() == null) - || (discipline.getStatus().name().equals(namePartRevision.getStatus().name()))); - - // latest - // true if id = get max id for uuid - // special rules for pending, not consider pending - check = check && discipline.isLatest() == discipline.getId().equals(mapUuidMaxIdDiscipline.get(discipline.getUuid())); - check = check && discipline.isDeleted() == namePartRevision.isDeleted(); - - // date may be in different format for different objects, to be formatted before being compared - check = check && ((discipline.getRequested() == null && namePartRevision.getRequestDate() == null) - || StringUtils.equals(SDF.format(discipline.getRequested()), SDF.format(namePartRevision.getRequestDate()))); - check = check && (discipline.getRequestedBy() == null && namePartRevision.getRequestedBy() == null - || StringUtils.equals(discipline.getRequestedBy(), namePartRevision.getRequestedBy().getUsername())); - check = check && StringUtils.equals(discipline.getRequestedComment(), namePartRevision.getRequesterComment()); - check = check && ((discipline.getProcessed() == null && namePartRevision.getProcessDate() == null) - || StringUtils.equals(SDF.format(discipline.getProcessed()), SDF.format(namePartRevision.getProcessDate()))); - check = check && (discipline.getProcessedBy() == null && namePartRevision.getProcessedBy() == null - || StringUtils.equals(discipline.getProcessedBy(), namePartRevision.getProcessedBy().getUsername())); - check = check && StringUtils.equals(discipline.getProcessedComment(), namePartRevision.getProcessorComment()); + // no check for parent uuid + check = namePartRevision != null + && equals(discipline, namePartRevision, mapUuidMaxIdDiscipline); // add to count if (check) { @@ -530,38 +396,9 @@ public class VerificationController { for (DeviceGroup deviceGroup : deviceGroups) { namePartRevision = mapIdNamePartRevision.get(deviceGroup.getId()); - check = namePartRevision != null; - - check = check && deviceGroup.getId().equals(namePartRevision.getId()); - check = check && deviceGroup.getVersion().equals(namePartRevision.getVersion()); - check = check && deviceGroup.getUuid().equals(namePartRevision.getNamePart().getUuid()); - - // parent uuid - check = check && deviceGroup.getParentUuid().equals(namePartRevision.getParent().getUuid()); - check = check && StringUtils.equals(deviceGroup.getName(), namePartRevision.getName()); - check = check && StringUtils.equals(deviceGroup.getMnemonic(), namePartRevision.getMnemonic()); - check = check && StringUtils.equals(deviceGroup.getMnemonicEquivalence(), namePartRevision.getMnemonicEqClass()); - check = check && StringUtils.equals(deviceGroup.getDescription(), namePartRevision.getDescription()); - check = check && ((deviceGroup.getStatus() == null && namePartRevision.getStatus() == null) - || (deviceGroup.getStatus().name().equals(namePartRevision.getStatus().name()))); - - // latest - // true if id = get max id for uuid - // special rules for pending, not consider pending - check = check && deviceGroup.isLatest() == deviceGroup.getId().equals(mapUuidMaxIdDeviceGroup.get(deviceGroup.getUuid())); - check = check && deviceGroup.isDeleted() == namePartRevision.isDeleted(); - - // date may be in different format for different objects, to be formatted before being compared - check = check && ((deviceGroup.getRequested() == null && namePartRevision.getRequestDate() == null) - || StringUtils.equals(SDF.format(deviceGroup.getRequested()), SDF.format(namePartRevision.getRequestDate()))); - check = check && (deviceGroup.getRequestedBy() == null && namePartRevision.getRequestedBy() == null - || StringUtils.equals(deviceGroup.getRequestedBy(), namePartRevision.getRequestedBy().getUsername())); - check = check && StringUtils.equals(deviceGroup.getRequestedComment(), namePartRevision.getRequesterComment()); - check = check && ((deviceGroup.getProcessed() == null && namePartRevision.getProcessDate() == null) - || StringUtils.equals(SDF.format(deviceGroup.getProcessed()), SDF.format(namePartRevision.getProcessDate()))); - check = check && (deviceGroup.getProcessedBy() == null && namePartRevision.getProcessedBy() == null - || StringUtils.equals(deviceGroup.getProcessedBy(), namePartRevision.getProcessedBy().getUsername())); - check = check && StringUtils.equals(deviceGroup.getProcessedComment(), namePartRevision.getProcessorComment()); + check = namePartRevision != null + && equals(deviceGroup, namePartRevision, mapUuidMaxIdDeviceGroup) + && deviceGroup.getParentUuid().equals(namePartRevision.getParent().getUuid()); // add to count if (check) { @@ -579,38 +416,9 @@ public class VerificationController { for (DeviceType deviceType : deviceTypes) { namePartRevision = mapIdNamePartRevision.get(deviceType.getId()); - check = namePartRevision != null; - - check = check && deviceType.getId().equals(namePartRevision.getId()); - check = check && deviceType.getVersion().equals(namePartRevision.getVersion()); - check = check && deviceType.getUuid().equals(namePartRevision.getNamePart().getUuid()); - - // parent uuid - check = check && deviceType.getParentUuid().equals(namePartRevision.getParent().getUuid()); - check = check && StringUtils.equals(deviceType.getName(), namePartRevision.getName()); - check = check && StringUtils.equals(deviceType.getMnemonic(), namePartRevision.getMnemonic()); - check = check && StringUtils.equals(deviceType.getMnemonicEquivalence(), namePartRevision.getMnemonicEqClass()); - check = check && StringUtils.equals(deviceType.getDescription(), namePartRevision.getDescription()); - check = check && ((deviceType.getStatus() == null && namePartRevision.getStatus() == null) - || (deviceType.getStatus().name().equals(namePartRevision.getStatus().name()))); - - // latest - // true if id = get max id for uuid - // special rules for pending, not consider pending - check = check && deviceType.isLatest() == deviceType.getId().equals(mapUuidMaxIdDeviceType.get(deviceType.getUuid())); - check = check && deviceType.isDeleted() == namePartRevision.isDeleted(); - - // date may be in different format for different objects, to be formatted before being compared - check = check && ((deviceType.getRequested() == null && namePartRevision.getRequestDate() == null) - || StringUtils.equals(SDF.format(deviceType.getRequested()), SDF.format(namePartRevision.getRequestDate()))); - check = check && (deviceType.getRequestedBy() == null && namePartRevision.getRequestedBy() == null - || StringUtils.equals(deviceType.getRequestedBy(), namePartRevision.getRequestedBy().getUsername())); - check = check && StringUtils.equals(deviceType.getRequestedComment(), namePartRevision.getRequesterComment()); - check = check && ((deviceType.getProcessed() == null && namePartRevision.getProcessDate() == null) - || StringUtils.equals(SDF.format(deviceType.getProcessed()), SDF.format(namePartRevision.getProcessDate()))); - check = check && (deviceType.getProcessedBy() == null && namePartRevision.getProcessedBy() == null - || StringUtils.equals(deviceType.getProcessedBy(), namePartRevision.getProcessedBy().getUsername())); - check = check && StringUtils.equals(deviceType.getProcessedComment(), namePartRevision.getProcessorComment()); + check = namePartRevision != null + && equals(deviceType, namePartRevision, mapUuidMaxIdDeviceType) + && deviceType.getParentUuid().equals(namePartRevision.getParent().getUuid()); // add to count if (check) { @@ -661,35 +469,10 @@ public class VerificationController { // all entries ok // no entry nok - // check - // check entry by entry - // each attribute as expected - // ---------- - // to check 1st, 2nd, 3rd parent to determine if systemgroup, system or subsystem - // otherwise not clear how to make sure if it is supposed to be systemgroup and not system, subsystem and vice versa - // ---------- - // date may be in different format for different objects, to be formatted before being compared - // ---------- - // name.id = devicerevision.id - // name.version = devicerevision.version - // name.uuid = devicerevision.device_id (device.id --> device.uuid) - // name.namepartrevision_systemgroup_uuid = devicerevision.section_id (namepart.id --> namepart.uuid - // name.namepartrevision_system_uuid = devicerevision.section_id (namepart.id --> namepart.uuid - // name.namepartrevision_subsystem_uuid = devicerevision.section_id (namepart.id --> namepart.uuid - // name.namepartrevision_devicetype_uuid = devicerevision.devicetype_id (namepart.id --> namepart.uuid - // name.instance_index = devicerevision.instanceindex - // name.convention_name = devicerevision.conventionname - // name.convention_name_equivalence = devicerevision.conventionnameeqclass - // name.description = devicerevision.additionalinfo - // name.status = null - // name.latest = true if id = get max id for uuid (not consider status) - // name.deleted = devicerevision.deleted - // name.requested = devicerevision.requestdate - // name.requested_by = devicerevision.requestedby_id (useraccount.id --> useraccount.username) - // name.requested_comment = null - // name.processed = null - // name.processed_by = null - // name.processed_comment = devicerevision.processorcomment + // e.g. if there has been usage of new database tables (new entries) before verification, there are more rows in those tables + // which means new and more ids than in old database tables + // which means those new ids don't exist in old database tables + // --> retrieval of device revisions for those ids will give null StringBuilder reportHtml = new StringBuilder(); @@ -747,70 +530,10 @@ public class VerificationController { DeviceRevision deviceRevision = null; try { for (Name name : names) { - // e.g. if there has been usage of new database tables (new entries) before verification, there are more rows in those tables - // which means new and more ids than in old database tables - // which means those new ids don't exist in old database tables - // --> retrieval of device revisions for those ids will give null - deviceRevision = mapIdDeviceRevision.get(name.getId()); - check = deviceRevision != null; - if (check) { - check = check && name.getId().equals(deviceRevision.getId()); - check = check && name.getVersion().equals(deviceRevision.getVersion()); - check = check && name.getUuid().equals(deviceRevision.getDevice().getUuid()); - - // to check 1st, 2nd, 3rd parent to determine if systemgroup, system or subsystem - // otherwise not clear how to make sure if it is supposed to be systemgroup and not system, subsystem and vice versa - NamePartRevision parent1 = deviceRevision.getSection() != null - ? mapUuidNamePartRevision.get(deviceRevision.getSection().getUuid()) - : null; - NamePartRevision parent2 = parent1 != null && parent1.getParent() != null - ? mapUuidNamePartRevision.get(parent1.getParent().getUuid()) - : null; - NamePartRevision parent3 = parent2 != null && parent2.getParent() != null - ? mapUuidNamePartRevision.get(parent2.getParent().getUuid()) - : null; - // parent 1 but not parent 2, 3 - system group - // parent 1, 2 but not parent 3 - system - // parent 1, 2, 3 - subsystem - // else nok - UUID systemGroupUuid = name.getSystemGroupUuid(); - UUID systemUuid = name.getSystemUuid(); - UUID subsystemUuid = name.getSubsystemUuid(); - UUID sectionUuid = deviceRevision.getSection().getUuid(); - if (parent1 != null && parent2 == null && parent3 == null) { - check = check && sectionUuid.equals(systemGroupUuid) && systemUuid == null && subsystemUuid == null; - } else if (parent1 != null && parent2 != null && parent3 == null) { - check = check && sectionUuid.equals(systemUuid) && systemGroupUuid == null && subsystemUuid == null; - } else if (parent1 != null && parent2 != null && parent3 != null) { - check = check && sectionUuid.equals(subsystemUuid) && systemGroupUuid == null && systemUuid == null; - } else { - check = false; - } - - check = check && ((name.getDeviceTypeUuid() == null && deviceRevision.getDeviceType() == null) - || (name.getDeviceTypeUuid().equals(deviceRevision.getDeviceType().getUuid()))); - check = check && StringUtils.equals(name.getInstanceIndex(), deviceRevision.getInstanceIndex()); - check = check && StringUtils.equals(name.getConventionName(), deviceRevision.getConventionName()); - check = check && StringUtils.equals(name.getConventionNameEquivalence(), deviceRevision.getConventionNameEqClass()); - check = check && StringUtils.equals(name.getDescription(), deviceRevision.getAdditionalInfo()); - check = check && name.getStatus() == null; - - // latest - // true if id = get max id for uuid - check = check && name.isLatest() == name.getId().equals(mapUuidMaxIdName.get(name.getUuid())); - check = check && name.isDeleted() == deviceRevision.isDeleted(); - - // date may be in different format for different objects, to be formatted before being compared - check = check && ((name.getRequested() == null && deviceRevision.getRequestDate() == null) - || StringUtils.equals(SDF.format(name.getRequested()), SDF.format(deviceRevision.getRequestDate()))); - check = check && StringUtils.equals(name.getRequestedBy(), deviceRevision.getRequestedBy().getUsername()); - check = check && name.getRequestedComment() == null; - check = check && name.getProcessed() == null; - check = check && name.getProcessedBy() == null; - check = check && StringUtils.equals(name.getProcessedComment(), deviceRevision.getProcessorComment()); - } + check = deviceRevision != null + && equals(name, deviceRevision, mapUuidMaxIdName, mapUuidNamePartRevision); // add to count if (check) { @@ -1104,4 +827,180 @@ public class VerificationController { } } + /** + * Utility method to compare Structure with NamePartRevision. + * No check for parent uuid in this method. + * + * @param structure structure + * @param namePartRevision name part revision + * @param mapUuidMaxId map with max id for APPROVED entry in line of uuid for structure + * @return + */ + private boolean equals(Structure structure, NamePartRevision namePartRevision, HashMap<UUID, Long> mapUuidMaxId) { + // check + // check entry by entry + // each attribute as expected + // ---------- + // to check parent uuid + // ---------- + // date may be in different format for different objects, to be formatted before being compared + // ---------- + // e.g. + // system.id = namepartrevision.id + // system.version = namepartrevision.version + // system.uuid = namepartrevision.namepart_id (namepart.id --> namepart.uuid) + // ( system.parent_uuid = namepartrevision.parent_id (namepart.id --> namepart.uuid) ) + // system.name = namepartrevision.name + // system.mnemonic = namepartrevision.mnemonic + // system.mnemonic_equivalence = namepartrevision.mnemoniceqclass + // system.description = namepartrevision.description + // system.status = namepartrevision.status + // system.latest = true if id = get max id for uuid (consider status, but not PENDING) + // system.deleted = namepartrevision.deleted + // system.requested = namepartrevision.requestdate + // system.requested_by = namepartrevision.requestedby_id (useraccount.id --> useraccount.username) + // system.requested_comment = namepartrevision.requestercomment + // system.processed = namepartrevision.processdate + // system.processed_by = namepartrevision.processedby_id (useraccount.id --> useraccount.username) + // system.processed_comment = namepartrevision.processorcomment + + if (ValidateUtil.isAnyNull(structure, namePartRevision, mapUuidMaxId)) { + return false; + } + + boolean check = structure.getId().equals(namePartRevision.getId()); + check = check && structure.getVersion().equals(namePartRevision.getVersion()); + check = check && structure.getUuid().equals(namePartRevision.getNamePart().getUuid()); + + // no check for parent uuid in this method + check = check && StringUtils.equals(structure.getName(), namePartRevision.getName()); + check = check && StringUtils.equals(structure.getMnemonic(), namePartRevision.getMnemonic()); + check = check && StringUtils.equals(structure.getMnemonicEquivalence(), namePartRevision.getMnemonicEqClass()); + check = check && StringUtils.equals(structure.getDescription(), namePartRevision.getDescription()); + check = check && ((structure.getStatus() == null && namePartRevision.getStatus() == null) + || (structure.getStatus().name().equals(namePartRevision.getStatus().name()))); + + // latest + // true if id = get max id for uuid + // special rules for pending, not consider pending + check = check && structure.isLatest() == structure.getId().equals(mapUuidMaxId.get(structure.getUuid())); + check = check && structure.isDeleted() == namePartRevision.isDeleted(); + + // date may be in different format for different objects, to be formatted before being compared + check = check && ((structure.getRequested() == null && namePartRevision.getRequestDate() == null) + || StringUtils.equals(SDF.format(structure.getRequested()), SDF.format(namePartRevision.getRequestDate()))); + check = check && (structure.getRequestedBy() == null && namePartRevision.getRequestedBy() == null + || StringUtils.equals(structure.getRequestedBy(), namePartRevision.getRequestedBy().getUsername())); + check = check && StringUtils.equals(structure.getRequestedComment(), namePartRevision.getRequesterComment()); + check = check && ((structure.getProcessed() == null && namePartRevision.getProcessDate() == null) + || StringUtils.equals(SDF.format(structure.getProcessed()), SDF.format(namePartRevision.getProcessDate()))); + check = check && (structure.getProcessedBy() == null && namePartRevision.getProcessedBy() == null + || StringUtils.equals(structure.getProcessedBy(), namePartRevision.getProcessedBy().getUsername())); + check = check && StringUtils.equals(structure.getProcessedComment(), namePartRevision.getProcessorComment()); + + return check; + } + + /** + * Utility method to compare Name with DeviceRevision. + * + * @param name name + * @param deviceRevision device revision + * @param mapUuidMaxIdName map with max id for entry in line of uuid for name + * @param mapUuidNamePartRevision map with uuid for name part revision + * @return + */ + private boolean equals(Name name, DeviceRevision deviceRevision, HashMap<UUID, Long> mapUuidMaxIdName, HashMap<UUID, NamePartRevision> mapUuidNamePartRevision) { + // check + // check entry by entry + // each attribute as expected + // ---------- + // to check 1st, 2nd, 3rd parent to determine if systemgroup, system or subsystem + // otherwise not clear how to make sure if it is supposed to be systemgroup and not system, subsystem and vice versa + // ---------- + // date may be in different format for different objects, to be formatted before being compared + // ---------- + // name.id = devicerevision.id + // name.version = devicerevision.version + // name.uuid = devicerevision.device_id (device.id --> device.uuid) + // name.namepartrevision_systemgroup_uuid = devicerevision.section_id (namepart.id --> namepart.uuid + // name.namepartrevision_system_uuid = devicerevision.section_id (namepart.id --> namepart.uuid + // name.namepartrevision_subsystem_uuid = devicerevision.section_id (namepart.id --> namepart.uuid + // name.namepartrevision_devicetype_uuid = devicerevision.devicetype_id (namepart.id --> namepart.uuid + // name.instance_index = devicerevision.instanceindex + // name.convention_name = devicerevision.conventionname + // name.convention_name_equivalence = devicerevision.conventionnameeqclass + // name.description = devicerevision.additionalinfo + // name.status = null + // name.latest = true if id = get max id for uuid (not consider status) + // name.deleted = devicerevision.deleted + // name.requested = devicerevision.requestdate + // name.requested_by = devicerevision.requestedby_id (useraccount.id --> useraccount.username) + // name.requested_comment = null + // name.processed = null + // name.processed_by = null + // name.processed_comment = devicerevision.processorcomment + + if (ValidateUtil.isAnyNull(name, deviceRevision, mapUuidMaxIdName)) { + return false; + } + + boolean check = name.getId().equals(deviceRevision.getId()); + check = check && name.getVersion().equals(deviceRevision.getVersion()); + check = check && name.getUuid().equals(deviceRevision.getDevice().getUuid()); + + // to check 1st, 2nd, 3rd parent to determine if systemgroup, system or subsystem + // otherwise not clear how to make sure if it is supposed to be systemgroup and not system, subsystem and vice versa + NamePartRevision parent1 = deviceRevision.getSection() != null + ? mapUuidNamePartRevision.get(deviceRevision.getSection().getUuid()) + : null; + NamePartRevision parent2 = parent1 != null && parent1.getParent() != null + ? mapUuidNamePartRevision.get(parent1.getParent().getUuid()) + : null; + NamePartRevision parent3 = parent2 != null && parent2.getParent() != null + ? mapUuidNamePartRevision.get(parent2.getParent().getUuid()) + : null; + // parent 1 but not parent 2, 3 - system group + // parent 1, 2 but not parent 3 - system + // parent 1, 2, 3 - subsystem + // else nok + UUID systemGroupUuid = name.getSystemGroupUuid(); + UUID systemUuid = name.getSystemUuid(); + UUID subsystemUuid = name.getSubsystemUuid(); + UUID sectionUuid = deviceRevision.getSection().getUuid(); + if (parent1 != null && parent2 == null && parent3 == null) { + check = check && sectionUuid.equals(systemGroupUuid) && systemUuid == null && subsystemUuid == null; + } else if (parent1 != null && parent2 != null && parent3 == null) { + check = check && sectionUuid.equals(systemUuid) && systemGroupUuid == null && subsystemUuid == null; + } else if (parent1 != null && parent2 != null && parent3 != null) { + check = check && sectionUuid.equals(subsystemUuid) && systemGroupUuid == null && systemUuid == null; + } else { + check = false; + } + + check = check && ((name.getDeviceTypeUuid() == null && deviceRevision.getDeviceType() == null) + || (name.getDeviceTypeUuid().equals(deviceRevision.getDeviceType().getUuid()))); + check = check && StringUtils.equals(name.getInstanceIndex(), deviceRevision.getInstanceIndex()); + check = check && StringUtils.equals(name.getConventionName(), deviceRevision.getConventionName()); + check = check && StringUtils.equals(name.getConventionNameEquivalence(), deviceRevision.getConventionNameEqClass()); + check = check && StringUtils.equals(name.getDescription(), deviceRevision.getAdditionalInfo()); + check = check && name.getStatus() == null; + + // latest + // true if id = get max id for uuid + check = check && name.isLatest() == name.getId().equals(mapUuidMaxIdName.get(name.getUuid())); + check = check && name.isDeleted() == deviceRevision.isDeleted(); + + // date may be in different format for different objects, to be formatted before being compared + check = check && ((name.getRequested() == null && deviceRevision.getRequestDate() == null) + || StringUtils.equals(SDF.format(name.getRequested()), SDF.format(deviceRevision.getRequestDate()))); + check = check && StringUtils.equals(name.getRequestedBy(), deviceRevision.getRequestedBy().getUsername()); + check = check && name.getRequestedComment() == null; + check = check && name.getProcessed() == null; + check = check && name.getProcessedBy() == null; + check = check && StringUtils.equals(name.getProcessedComment(), deviceRevision.getProcessorComment()); + + return check; + } + }