From 135d15f8db0e93f4a21c5a13d965a4fe0de3f574 Mon Sep 17 00:00:00 2001 From: Lars Johansson <lars.johansson@ess.eu> Date: Tue, 10 May 2022 11:16:22 +0200 Subject: [PATCH] Refactor validation --- .../repository/DeviceGroupRepository.java | 21 + .../repository/DeviceTypeRepository.java | 21 + .../repository/DisciplineRepository.java | 21 + .../names/repository/SubsystemRepository.java | 21 + .../repository/SystemGroupRepository.java | 21 + .../names/repository/SystemRepository.java | 21 + .../openepics/names/util/ExceptionUtil.java | 12 +- .../openepics/names/util/StructureUtil.java | 50 +- .../org/openepics/names/util/TextUtil.java | 126 ++- .../openepics/names/util/ValidateUtil.java | 788 +++++++++--------- .../names/util/ExceptionUtilTest.java | 2 +- .../names/util/ValidateUtilTest.java | 24 +- 12 files changed, 666 insertions(+), 462 deletions(-) diff --git a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java index f157efe2..0dc600b4 100644 --- a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java @@ -114,6 +114,27 @@ public class DeviceGroupRepository { null, null, null, null); } + /** + * Find device groups. + * + * @param status status + * @param deleted deleted + * @param queryFields query fields + * @param queryValues query values + * @return list of device groups + */ + public List<DeviceGroup> readDeviceGroups( + Status status, Boolean deleted, FieldStructure[] queryFields, String[] queryValues) { + + return readDeviceGroups( + status != null ? new Status[] {status} : null, + deleted, + queryFields, + queryValues, + Boolean.FALSE, + null, null, null, null); + } + /** * Find device groups. * diff --git a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java index e6d3c5bf..9f2619fb 100644 --- a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java +++ b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java @@ -114,6 +114,27 @@ public class DeviceTypeRepository { null, null, null, null); } + /** + * Find device types. + * + * @param status status + * @param deleted deleted + * @param queryFields query fields + * @param queryValues query values + * @return list of device types + */ + public List<DeviceType> readDeviceTypes( + Status status, Boolean deleted, FieldStructure[] queryFields, String[] queryValues) { + + return readDeviceTypes( + status != null ? new Status[] {status} : null, + deleted, + queryFields, + queryValues, + Boolean.FALSE, + null, null, null, null); + } + /** * Find device types. * diff --git a/src/main/java/org/openepics/names/repository/DisciplineRepository.java b/src/main/java/org/openepics/names/repository/DisciplineRepository.java index 4d6e8adb..52de0253 100644 --- a/src/main/java/org/openepics/names/repository/DisciplineRepository.java +++ b/src/main/java/org/openepics/names/repository/DisciplineRepository.java @@ -114,6 +114,27 @@ public class DisciplineRepository { null, null, null, null); } + /** + * Find disciplines. + * + * @param status status + * @param deleted deleted + * @param queryFields query fields + * @param queryValues query values + * @return list of disciplines + */ + public List<Discipline> readDisciplines( + Status status, Boolean deleted, FieldStructure[] queryFields, String[] queryValues) { + + return readDisciplines( + status != null ? new Status[] {status} : null, + deleted, + queryFields, + queryValues, + Boolean.FALSE, + null, null, null, null); + } + /** * Find disciplines. * diff --git a/src/main/java/org/openepics/names/repository/SubsystemRepository.java b/src/main/java/org/openepics/names/repository/SubsystemRepository.java index 2be94490..1a363fc7 100644 --- a/src/main/java/org/openepics/names/repository/SubsystemRepository.java +++ b/src/main/java/org/openepics/names/repository/SubsystemRepository.java @@ -114,6 +114,27 @@ public class SubsystemRepository { null, null, null, null); } + /** + * Find subsystems. + * + * @param status status + * @param deleted deleted + * @param queryFields query fields + * @param queryValues query values + * @return list of subsystems + */ + public List<Subsystem> readSubsystems( + Status status, Boolean deleted, FieldStructure[] queryFields, String[] queryValues) { + + return readSubsystems( + status != null ? new Status[] {status} : null, + deleted, + queryFields, + queryValues, + Boolean.FALSE, + null, null, null, null); + } + /** * Find subsystems. * diff --git a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java index ebefc1f7..7f7f5c60 100644 --- a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java @@ -112,6 +112,27 @@ public class SystemGroupRepository { null, null, null, null); } + /** + * Find system groups. + * + * @param status status + * @param deleted deleted + * @param queryFields query fields + * @param queryValues query values + * @return list of system groups + */ + public List<SystemGroup> readSystemGroups( + Status status, Boolean deleted, FieldStructure[] queryFields, String[] queryValues) { + + return readSystemGroups( + status != null ? new Status[] {status} : null, + deleted, + queryFields, + queryValues, + Boolean.FALSE, + null, null, null, null); + } + /** * Find system groups. * diff --git a/src/main/java/org/openepics/names/repository/SystemRepository.java b/src/main/java/org/openepics/names/repository/SystemRepository.java index 0403e349..beead5c6 100644 --- a/src/main/java/org/openepics/names/repository/SystemRepository.java +++ b/src/main/java/org/openepics/names/repository/SystemRepository.java @@ -114,6 +114,27 @@ public class SystemRepository { null, null, null, null); } + /** + * Find systems. + * + * @param status status + * @param deleted deleted + * @param queryFields query fields + * @param queryValues query values + * @return list of systems + */ + public List<System> readSystems( + Status status, Boolean deleted, FieldStructure[] queryFields, String[] queryValues) { + + return readSystems( + status != null ? new Status[] {status} : null, + deleted, + queryFields, + queryValues, + Boolean.FALSE, + null, null, null, null); + } + /** * Find systems. * diff --git a/src/main/java/org/openepics/names/util/ExceptionUtil.java b/src/main/java/org/openepics/names/util/ExceptionUtil.java index 59f1f7a4..050ecc00 100644 --- a/src/main/java/org/openepics/names/util/ExceptionUtil.java +++ b/src/main/java/org/openepics/names/util/ExceptionUtil.java @@ -146,7 +146,7 @@ public class ExceptionUtil { */ public static InputNotAvailableException createInputNotAvailableException(String message, String details, String field) { if (message == null && field != null) { - return new InputNotAvailableException(TextUtil.INPUT_NOT_AVAILABLE_FOR_FIELD, details, field); + return new InputNotAvailableException(TextUtil.VALUE_IS_NOT_AVAILABLE, details, field); } else { return new InputNotAvailableException(message, details, field); } @@ -164,7 +164,7 @@ public class ExceptionUtil { */ public static InputNotCorrectException createInputNotCorrectException(String message, String details, String field) { if (message == null && field != null) { - return new InputNotCorrectException(TextUtil.INPUT_NOT_CORRECT_FOR_FIELD, details, field); + return new InputNotCorrectException(TextUtil.VALUE_IS_NOT_CORRECT, details, field); } else { return new InputNotCorrectException(message, details, field); } @@ -182,7 +182,7 @@ public class ExceptionUtil { */ public static InputNotValidException createInputNotValidException(String message, String details, String field) { if (message == null && field != null) { - return new InputNotValidException(TextUtil.INPUT_NOT_VALID_FOR_FIELD, details, field); + return new InputNotValidException(TextUtil.VALUE_IS_NOT_VALID, details, field); } else { return new InputNotValidException(message, details, field); } @@ -300,7 +300,7 @@ public class ExceptionUtil { public static void validateConditionInputNotAvailableException(boolean condition, String message, String details, String field) { if (!condition) { if (message == null && field != null) { - throw ExceptionUtil.createInputNotAvailableException(TextUtil.INPUT_NOT_AVAILABLE_FOR_FIELD, details, field); + throw ExceptionUtil.createInputNotAvailableException(TextUtil.VALUE_IS_NOT_AVAILABLE, details, field); } else { throw ExceptionUtil.createInputNotAvailableException(message, details, field); } @@ -319,7 +319,7 @@ public class ExceptionUtil { public static void validateConditionInputNotCorrectException(boolean condition, String message, String details, String field) { if (!condition) { if (message == null && field != null) { - throw ExceptionUtil.createInputNotCorrectException(TextUtil.INPUT_NOT_CORRECT_FOR_FIELD, details, field); + throw ExceptionUtil.createInputNotCorrectException(TextUtil.VALUE_IS_NOT_CORRECT, details, field); } else { throw ExceptionUtil.createInputNotCorrectException(message, details, field); } @@ -338,7 +338,7 @@ public class ExceptionUtil { public static void validateConditionInputNotValidException(boolean condition, String message, String details, String field) { if (!condition) { if (message == null && field != null) { - throw ExceptionUtil.createInputNotValidException(TextUtil.INPUT_NOT_VALID_FOR_FIELD, details, field); + throw ExceptionUtil.createInputNotValidException(TextUtil.VALUE_IS_NOT_VALID, details, field); } else { throw ExceptionUtil.createInputNotValidException(message, details, field); } diff --git a/src/main/java/org/openepics/names/util/StructureUtil.java b/src/main/java/org/openepics/names/util/StructureUtil.java index 1e226acd..fc0c2c46 100644 --- a/src/main/java/org/openepics/names/util/StructureUtil.java +++ b/src/main/java/org/openepics/names/util/StructureUtil.java @@ -31,6 +31,8 @@ import org.openepics.names.repository.model.Subsystem; import org.openepics.names.repository.model.System; import org.openepics.names.repository.model.SystemGroup; +import com.google.common.collect.Lists; + /** * Utility class to assist in handling of structure (name part) content. * @@ -149,7 +151,7 @@ public class StructureUtil { : null; } - // --------------------------------------------------- + // -------------------------------------------------- /** * Return a list of mnemonic paths for system groups. @@ -273,4 +275,50 @@ public class StructureUtil { return mnemonicPaths; } + // -------------------------------------------------- + + protected static List<UUID> listSystemGroup2Uuid(List<SystemGroup> systemGroups) { + final List<UUID> listUuid = Lists.newArrayList(); + for (SystemGroup systemGroup : systemGroups) { + listUuid.add(systemGroup.getUuid()); + } + return listUuid; + } + protected static List<UUID> listSystem2Uuid(List<System> systems) { + final List<UUID> listUuid = Lists.newArrayList(); + for (System deviceType : systems) { + listUuid.add(deviceType.getUuid()); + } + return listUuid; + } + protected static List<UUID> listSubsystem2Uuid(List<Subsystem> subsystems) { + final List<UUID> listUuid = Lists.newArrayList(); + for (Subsystem subsystem : subsystems) { + listUuid.add(subsystem.getUuid()); + } + return listUuid; + } + + protected static List<UUID> listDiscipline2Uuid(List<Discipline> disciplines) { + final List<UUID> listUuid = Lists.newArrayList(); + for (Discipline discipline : disciplines) { + listUuid.add(discipline.getUuid()); + } + return listUuid; + } + protected static List<UUID> listDeviceGroup2Uuid(List<DeviceGroup> deviceGroups) { + final List<UUID> listUuid = Lists.newArrayList(); + for (DeviceGroup deviceGroup : deviceGroups) { + listUuid.add(deviceGroup.getUuid()); + } + return listUuid; + } + protected static List<UUID> listDeviceType2Uuid(List<DeviceType> deviceTypes) { + final List<UUID> listUuid = Lists.newArrayList(); + for (DeviceType deviceType : deviceTypes) { + listUuid.add(deviceType.getUuid()); + } + return listUuid; + } + } diff --git a/src/main/java/org/openepics/names/util/TextUtil.java b/src/main/java/org/openepics/names/util/TextUtil.java index 9ccea6e8..a432e731 100644 --- a/src/main/java/org/openepics/names/util/TextUtil.java +++ b/src/main/java/org/openepics/names/util/TextUtil.java @@ -25,53 +25,95 @@ package org.openepics.names.util; */ public class TextUtil { - // name, structure - - public static final String NAME = "name"; - public static final String STRUCTURE = "structure"; - public static final String SYSTEMGROUP = "system group"; - public static final String SYSTEM = "system"; - public static final String SUBSYSTEM = "subsystem"; - public static final String DISCIPLINE = "discipline"; - public static final String DEVICEGROUP = "device group"; - public static final String DEVICETYPE = "device type"; - - // exception - - public static final String DATA_CONFLICT = "data conflict"; - public static final String DATA_DELETED = "data deleted"; - public static final String DATA_EXIST = "data exist"; - public static final String DATA_NOT_AVAILABLE = "data not available"; - public static final String DATA_NOT_CORRECT = "data not correct"; - public static final String DATA_NOT_FOUND = "data not found"; - public static final String DATA_NOT_VALID = "data not valid"; - public static final String INPUT_NOT_AVAILABLE = "input not valid"; - public static final String INPUT_NOT_CORRECT = "input not correct"; - public static final String INPUT_NOT_VALID = "input not valid"; - - public static final String SPACE = " "; - - public static final String FOR_FIELD = "for field"; - - public static final String INPUT_NOT_AVAILABLE_FOR_FIELD = INPUT_NOT_AVAILABLE + SPACE + FOR_FIELD; - public static final String INPUT_NOT_CORRECT_FOR_FIELD = INPUT_NOT_CORRECT + SPACE + FOR_FIELD; - public static final String INPUT_NOT_VALID_FOR_FIELD = INPUT_NOT_VALID + SPACE + FOR_FIELD; + // field + // name, structure + // name also field + + public static final String NAME = "name"; + public static final String STRUCTURE = "structure"; + public static final String SYSTEMGROUP = "system group"; + public static final String SYSTEM = "system"; + public static final String SUBSYSTEM = "subsystem"; + public static final String DISCIPLINE = "discipline"; + public static final String DEVICEGROUP = "device group"; + public static final String DEVICETYPE = "device type"; + + public static final String COMMENT = "comment"; + public static final String DESCRIPTION = "description"; + public static final String INDEX = "index"; + public static final String MNEMONIC = "mnemonic"; + public static final String MNEMONICPATH = "mnemonicpath"; + public static final String PARENT = "parent"; + public static final String PARENTDEVICESTRUCTURE = "parentdevicestructure"; + public static final String PARENTSYSTEMSTRUCTURE = "parentsystemstructure"; + public static final String STATUS = "status"; + public static final String TYPE = "type"; + public static final String UUID = "uuid"; + + public static final String CONVENTION_NAME = "convention name"; + public static final String CONVENTION_NAME_EQUIVALENCE = "convention name equivalence"; + public static final String MNEMONIC_PATH = "mnemonic path"; + public static final String MNEMONIC_PATH_EQUIVALENCE = "mnemonic path equivalence"; + public static final String SYSTEM_STRUCTURE = "system structure"; + + // common + + public static final String SPACE = " "; // validation - public static final String ARE_NOT_CORRECT = "are not correct"; - public static final String EXISTS = "exists"; - public static final String IS_DELETED = "is deleted"; - public static final String IS_NOT_AVAILABLE = "is not available"; - public static final String IS_NOT_CORRECT = "is not correct"; - public static final String IS_NOT_DELETED = "is not deleted"; - public static final String IS_NOT_VALID = "is not valid"; - public static final String WAS_NOT_UPDATED = "was not updated"; + public static final String EXISTS = "exists"; + public static final String HAS_DUPLICATE = "has duplicate"; + public static final String IS_NOT_AVAILABLE = "is not available"; + public static final String IS_NOT_CORRECT = "is not correct"; + public static final String IS_NOT_VALID = "is not valid"; + + public static final String DATA_IS_DELETED = "data is deleted"; + public static final String DATA_IS_NOT_AVAILABLE = "data is not available"; + public static final String DATA_IS_NOT_CORRECT = "data is not correct"; + public static final String DATA_IS_NOT_VALID = "data is not valid"; + + public static final String VALUE_IS_NOT_AVAILABLE = "value is not available"; + public static final String VALUE_IS_NOT_CORRECT = "value is not correct"; + public static final String VALUE_IS_NOT_VALID = "value is not valid"; + public static final String VALUES_ARE_NOT_CORRECT = "values are not correct"; + + // validation message + + public static final String CONVENTION_NAME_EXISTS = CONVENTION_NAME + SPACE + EXISTS; + public static final String CONVENTION_NAME_EQUIVALENCE_EXISTS = CONVENTION_NAME_EQUIVALENCE + SPACE + EXISTS; + public static final String CONVENTION_NAME_IS_NOT_CORRECT = CONVENTION_NAME + SPACE + IS_NOT_CORRECT; + + public static final String MNEMONIC_PATH_HAS_DUPLICATE = MNEMONIC_PATH + SPACE + HAS_DUPLICATE; + public static final String MNEMONIC_PATH_IS_NOT_AVAILABLE = MNEMONIC_PATH + SPACE + IS_NOT_AVAILABLE; + public static final String MNEMONIC_PATH_IS_NOT_VALID = MNEMONIC_PATH + SPACE + IS_NOT_VALID; + public static final String MNEMONIC_PATH_EQUIVALENCE_HAS_DUPLICATE = MNEMONIC_PATH_EQUIVALENCE + SPACE + HAS_DUPLICATE; + public static final String STRUCTURE_MNEMONIC_PATH_IS_NOT_VALID = STRUCTURE + SPACE + MNEMONIC_PATH_IS_NOT_VALID; + + public static final String DEVICETYPE_OR_INDEX_IS_NOT_AVAILABLE = "device type or index is not available"; + public static final String ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT = "one or more elements are not correct"; + public static final String OPERATION_COULD_NOT_BE_PERFORMED = "operation could not be performed"; + + public static final String PARENT_IS_NOT_AVAILABLE = PARENT + SPACE + IS_NOT_AVAILABLE; + public static final String SYSTEMGROUP_IS_NOT_AVAILABLE = SYSTEMGROUP + SPACE + IS_NOT_AVAILABLE; + public static final String SYSTEM_IS_NOT_AVAILABLE = SYSTEM + SPACE + IS_NOT_AVAILABLE; + public static final String SUBSYSTEM_IS_NOT_AVAILABLE = SUBSYSTEM + SPACE + IS_NOT_AVAILABLE; + public static final String DISCIPLINE_IS_NOT_AVAILABLE = DISCIPLINE + SPACE + IS_NOT_AVAILABLE; + public static final String DEVICEGROUP_IS_NOT_AVAILABLE = DEVICEGROUP + SPACE + IS_NOT_AVAILABLE; + public static final String DEVICETYPE_IS_NOT_AVAILABLE = DEVICETYPE + SPACE + IS_NOT_AVAILABLE; - // message + public static final String SYSTEM_STRUCTURE_IS_NOT_CORRECT = SYSTEM_STRUCTURE + SPACE + IS_NOT_CORRECT; + public static final String SYSTEMGROUP_IS_NOT_CORRECT = SYSTEMGROUP + SPACE + IS_NOT_CORRECT; + public static final String SYSTEM_IS_NOT_CORRECT = SYSTEM + SPACE + IS_NOT_CORRECT; + public static final String SUBSYSTEM_IS_NOT_CORRECT = SUBSYSTEM + SPACE + IS_NOT_CORRECT; + public static final String DISCIPLINE_IS_NOT_CORRECT = DISCIPLINE + SPACE + IS_NOT_CORRECT; + public static final String DEVICEGROUP_IS_NOT_CORRECT = DEVICEGROUP + SPACE + IS_NOT_CORRECT; + public static final String DEVICETYPE_IS_NOT_CORRECT = DEVICETYPE + SPACE + IS_NOT_CORRECT; - public static final String ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT = "One or more elements are not correct."; - public static final String OPERATION_COULD_NOT_BE_PERFORMED = "Operation could not be performed."; + public static final String DISCIPLINE_IS_NOT_VALID = DISCIPLINE + SPACE + IS_NOT_VALID; + public static final String DEVICEGROUP_IS_NOT_VALID = DEVICEGROUP + SPACE + IS_NOT_VALID; + public static final String INDEX_IS_NOT_VALID = INDEX + SPACE + IS_NOT_VALID; + public static final String MNEMONIC_IS_NOT_VALID = MNEMONIC + SPACE + IS_NOT_VALID; /** * This class is not to be instantiated. diff --git a/src/main/java/org/openepics/names/util/ValidateUtil.java b/src/main/java/org/openepics/names/util/ValidateUtil.java index 4b91a80f..80f980d6 100644 --- a/src/main/java/org/openepics/names/util/ValidateUtil.java +++ b/src/main/java/org/openepics/names/util/ValidateUtil.java @@ -23,7 +23,6 @@ import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.openepics.names.repository.NameRepository; -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; @@ -38,6 +37,8 @@ import org.openepics.names.rest.beans.element.NameElementCommand; import org.openepics.names.rest.beans.element.StructureElementCommand; import org.openepics.names.service.exception.DataConflictException; +import com.google.common.collect.Lists; + /** * Utility class to assist in handling of validation. * @@ -87,7 +88,7 @@ public class ValidateUtil { public static void validateInputComment(String comment) { // available ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(comment), - null, comment, "comment"); + TextUtil.VALUE_IS_NOT_AVAILABLE, comment, TextUtil.COMMENT); } /** @@ -98,7 +99,7 @@ public class ValidateUtil { public static void validateInputDescription(String description) { // available ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(description), - null, description, "description"); + TextUtil.VALUE_IS_NOT_AVAILABLE, description, TextUtil.DESCRIPTION); } /** @@ -109,7 +110,7 @@ public class ValidateUtil { public static void validateInputIndex(String index) { // available ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(index), - null, index, "index"); + TextUtil.VALUE_IS_NOT_AVAILABLE, index, TextUtil.INDEX); } /** @@ -120,7 +121,7 @@ public class ValidateUtil { public static void validateInputMnemonic(String mnemonic) { // available ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(mnemonic), - null, mnemonic, "mnemonic"); + TextUtil.VALUE_IS_NOT_AVAILABLE, mnemonic, TextUtil.MNEMONIC); } /** @@ -131,7 +132,7 @@ public class ValidateUtil { public static void validateInputMnemonicpath(String mnemonicpath) { // available ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(mnemonicpath), - null, mnemonicpath, "mnemonicpath"); + TextUtil.VALUE_IS_NOT_AVAILABLE, mnemonicpath, TextUtil.MNEMONICPATH); } /** @@ -142,7 +143,7 @@ public class ValidateUtil { public static void validateInputName(String name) { // available ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(name), - null, name, "name"); + TextUtil.VALUE_IS_NOT_AVAILABLE, name, TextUtil.NAME); } /** @@ -163,12 +164,12 @@ public class ValidateUtil { public static void validateInputStatus(Status status, Status expected) { // available ExceptionUtil.validateConditionInputNotAvailableException(status != null, - null, null, "status"); + TextUtil.VALUE_IS_NOT_AVAILABLE, null, TextUtil.STATUS); // expected status if (expected != null) { ExceptionUtil.validateConditionInputNotCorrectException(expected.equals(status), - null, status.toString(), "status"); + TextUtil.VALUE_IS_NOT_CORRECT, status.toString(), TextUtil.STATUS); } } @@ -190,12 +191,12 @@ public class ValidateUtil { public static void validateInputType(Type type, Type expected) { // available ExceptionUtil.validateConditionInputNotAvailableException(type != null, - null, null, "type"); + TextUtil.VALUE_IS_NOT_AVAILABLE, null, TextUtil.TYPE); // expected type if (expected != null) { ExceptionUtil.validateConditionInputNotCorrectException(expected.equals(type), - null, type.toString(), "type"); + TextUtil.VALUE_IS_NOT_CORRECT, type.toString(), TextUtil.TYPE); } } @@ -208,11 +209,11 @@ public class ValidateUtil { // available // correct ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(uuid), - null, uuid, "uuid"); + TextUtil.VALUE_IS_NOT_AVAILABLE, uuid, TextUtil.UUID); try { UUID.fromString(uuid); } catch (IllegalArgumentException e) { - throw ExceptionUtil.createInputNotCorrectException("uuid " + TextUtil.IS_NOT_CORRECT, uuid, null); + throw ExceptionUtil.createInputNotCorrectException(TextUtil.VALUE_IS_NOT_CORRECT, uuid, TextUtil.UUID); } } @@ -246,7 +247,7 @@ public class ValidateUtil { boolean condition = ((queryFields == null && queryValues == null) || (queryFields != null && queryValues != null && queryFields.length == queryValues.length && queryFields.length > 0)); ExceptionUtil.validateConditionInputNotCorrectException(condition, - "url and parameters " + TextUtil.ARE_NOT_CORRECT, "queryFields, queryValues with different lengths or empty", null); + TextUtil.VALUES_ARE_NOT_CORRECT, "url and parameters (queryFields, queryValues) have different lengths or are empty", null); if (queryFields != null) { for (int i=0; i<queryFields.length; i++) { @@ -309,15 +310,15 @@ public class ValidateUtil { if (!NameChoice.DELETE.equals(nameChoice)) { ExceptionUtil.validateConditionInputNotAvailableException(nameElement.getParentsystemstructure() != null, - null, nameElement.toString(), "parentsystemstructure"); + TextUtil.VALUE_IS_NOT_AVAILABLE, nameElement.toString(), TextUtil.PARENTSYSTEMSTRUCTURE); // optional (either none or both) // parentdevicestructure // index if (nameElement.getParentdevicestructure() != null && nameElement.getIndex() == null) { - throw ExceptionUtil.createInputNotCorrectException(null, nameElement.toString(), "index"); + throw ExceptionUtil.createInputNotCorrectException(null, nameElement.toString(), TextUtil.INDEX); } else if (nameElement.getParentdevicestructure() == null && nameElement.getIndex() != null) { - throw ExceptionUtil.createInputNotCorrectException(null, nameElement.toString(), "parentdevicestructure"); + throw ExceptionUtil.createInputNotCorrectException(null, nameElement.toString(), TextUtil.PARENTDEVICESTRUCTURE); } validateInputDescription(nameElement.getDescription()); @@ -395,13 +396,15 @@ public class ValidateUtil { return; } + String details = nameElement.toString(); + // name // update, delete - uuid available, not deleted // retrieve for uuid and check if (NameChoice.UPDATE.equals(nameChoice) || NameChoice.DELETE.equals(nameChoice)) { List<Name> names = nameRepository.readNames(false, FieldName.UUID, nameElement.getUuid().toString()); ExceptionUtil.validateConditionDataNotCorrectException(names != null && names.size() == 1, - TextUtil.NAME + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, nameElement.toString(), "uuid"); + TextUtil.VALUE_IS_NOT_CORRECT, details, TextUtil.UUID); } SystemGroup systemGroup = null; @@ -439,25 +442,25 @@ public class ValidateUtil { if (nameElement.getParentdevicestructure() != null) { countDevicestructureIndex++; deviceType = holderIRepositories.getDeviceTypeRepository().findLatestByUuid(nameElement.getParentdevicestructure().toString()); - ExceptionUtil.validateConditionDataNotAvailableException(deviceType != null, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, nameElement.toString(), "parentdevicestructure"); - ExceptionUtil.validateConditionDataDeletedException(!deviceType.isDeleted(), TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_DELETED, nameElement.toString(), "parentdevicestructure"); + ExceptionUtil.validateConditionDataNotAvailableException(deviceType != null, TextUtil.DATA_IS_NOT_AVAILABLE, details, TextUtil.PARENTDEVICESTRUCTURE); + ExceptionUtil.validateConditionDataDeletedException(!deviceType.isDeleted(), TextUtil.DATA_IS_DELETED, details, TextUtil.PARENTDEVICESTRUCTURE); } // system structure if (systemGroup != null) { - ExceptionUtil.validateConditionDataDeletedException(!systemGroup.isDeleted(), TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure"); + ExceptionUtil.validateConditionDataDeletedException(!systemGroup.isDeleted(), TextUtil.DATA_IS_DELETED, details, TextUtil.PARENTSYSTEMSTRUCTURE); derivedName = NameUtil.getName(systemGroup, deviceType, nameElement.getIndex(), holder); } else if (system != null) { - ExceptionUtil.validateConditionDataDeletedException(!system.isDeleted(), TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure"); + ExceptionUtil.validateConditionDataDeletedException(!system.isDeleted(), TextUtil.DATA_IS_DELETED, details, TextUtil.PARENTSYSTEMSTRUCTURE); derivedName = NameUtil.getName(system, deviceType, nameElement.getIndex(), holder); } else if (subsystem != null) { - ExceptionUtil.validateConditionDataDeletedException(!subsystem.isDeleted(), TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure"); + ExceptionUtil.validateConditionDataDeletedException(!subsystem.isDeleted(), TextUtil.DATA_IS_DELETED, details, TextUtil.PARENTSYSTEMSTRUCTURE); derivedName = NameUtil.getName(subsystem, deviceType, nameElement.getIndex(), holder); } else { - throw ExceptionUtil.createDataNotCorrectException("system structure uuid " + TextUtil.IS_NOT_CORRECT, nameElement.toString(), null); + throw ExceptionUtil.createDataNotCorrectException(TextUtil.DATA_IS_NOT_CORRECT, details, TextUtil.PARENTSYSTEMSTRUCTURE); } // index @@ -465,11 +468,11 @@ public class ValidateUtil { countDevicestructureIndex++; // TODO overrideRuleset depend on user authority condition = namingConvention.isInstanceIndexValid(derivedName, false); - ExceptionUtil.validateConditionDataNotValidException(condition, "instance index " + TextUtil.IS_NOT_VALID, nameElement.toString(), "index"); + ExceptionUtil.validateConditionDataNotValidException(condition, TextUtil.DATA_IS_NOT_VALID, details, TextUtil.INDEX); } condition = countDevicestructureIndex == 0 || countDevicestructureIndex == 2; - ExceptionUtil.validateConditionDataNotAvailableException(condition, TextUtil.DEVICETYPE + TextUtil.SPACE + "or instance index " + TextUtil.IS_NOT_AVAILABLE, nameElement.toString(), "parentdevicestructure"); + ExceptionUtil.validateConditionDataNotAvailableException(condition, TextUtil.DEVICETYPE_OR_INDEX_IS_NOT_AVAILABLE, details, TextUtil.PARENTDEVICESTRUCTURE); // name // ok with same name, name equivalence if same uuid @@ -480,7 +483,7 @@ public class ValidateUtil { // NameChoice.UPDATE.equals(nameChoice) condition = names == null || names.isEmpty() || names.size() == 1 && names.get(0).getUuid().equals(nameElement.getUuid()); } - ExceptionUtil.validateConditionDataExistException(condition, "convention name " + TextUtil.EXISTS, nameElement.toString(), null); + ExceptionUtil.validateConditionDataExistException(condition, TextUtil.CONVENTION_NAME_EXISTS, details, TextUtil.PARENTSYSTEMSTRUCTURE); names = nameRepository.readNames(false, FieldName.NAMEEQUIVALENCE, namingConvention.equivalenceClassRepresentative(derivedName)); if (NameChoice.CREATE.equals(nameChoice)) { @@ -489,7 +492,7 @@ public class ValidateUtil { // NameChoice.UPDATE.equals(nameChoice) condition = names == null || names.isEmpty() || names.size() == 1 && names.get(0).getUuid().equals(nameElement.getUuid()); } - ExceptionUtil.validateConditionDataExistException(condition, "convention name equivalence " + TextUtil.EXISTS, nameElement.toString(), null); + ExceptionUtil.validateConditionDataExistException(condition, TextUtil.CONVENTION_NAME_EQUIVALENCE_EXISTS, details, TextUtil.PARENTSYSTEMSTRUCTURE); } else if (NameChoice.DELETE.equals(nameChoice)) { // n.a. // uuid - already handled @@ -516,6 +519,9 @@ public class ValidateUtil { return; } + String details = name; + String field = TextUtil.NAME; + // find out system group, system, subsystem + check if valid // find out discipline, device group, device type + check if valid // find out instance index + check if valid @@ -528,19 +534,24 @@ public class ValidateUtil { String idx = NamingConventionUtil.extractInstanceIndex(name); int count = 0; + int countSgSys = 0; + int countSgSub = 0; if (sg != null) { count++; + countSgSys++; + countSgSub++; } if (sys != null) { count++; + countSgSys++; } if (sub != null) { count++; + countSgSub++; } - if (count > 2 || count < 1 || - ((!StringUtils.isEmpty(sg) && !StringUtils.isEmpty(sys)) - || (!StringUtils.isEmpty(sg) && !StringUtils.isEmpty(sub)))) { - throw ExceptionUtil.createDataNotCorrectException("system structure " + TextUtil.IS_NOT_CORRECT, name, null); + // one or two system structure mnemonics + not system group and system + not system group and subsystem + if (count < 1 || count > 2 || countSgSys == 2 || countSgSub == 2) { + throw ExceptionUtil.createDataNotCorrectException(TextUtil.SYSTEM_STRUCTURE_IS_NOT_CORRECT, details, field); } SystemGroup systemGroup = null; @@ -550,8 +561,6 @@ public class ValidateUtil { String derivedName = null; - boolean condition = true; - // ensure that system structure parents and device structure parents are available, latest and not deleted // if device type // if system group @@ -564,30 +573,30 @@ public class ValidateUtil { // device structure if (!StringUtils.isEmpty(dt)) { deviceType = holderIRepositories.getDeviceTypeRepository().findLatestNotDeletedByMnemonic(dt); - ExceptionUtil.validateConditionDataNotAvailableException(deviceType != null, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null); + ExceptionUtil.validateConditionDataNotAvailableException(deviceType != null, TextUtil.DEVICETYPE_IS_NOT_AVAILABLE, details, field); } // system structure if (!StringUtils.isEmpty(sg)) { systemGroup = holderIRepositories.getSystemGroupRepository().findLatestNotDeletedByMnemonic(sg); - ExceptionUtil.validateConditionDataNotAvailableException(systemGroup != null, TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null); + ExceptionUtil.validateConditionDataNotAvailableException(systemGroup != null, TextUtil.SYSTEMGROUP_IS_NOT_AVAILABLE, details, field); derivedName = NameUtil.getName(systemGroup, deviceType, NamingConventionUtil.extractInstanceIndex(name), holder); } else { if (!StringUtils.isEmpty(sys)) { system = holderIRepositories.getSystemRepository().findLatestNotDeletedByMnemonic(sys); - ExceptionUtil.validateConditionDataNotAvailableException(system != null, TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null); + ExceptionUtil.validateConditionDataNotAvailableException(system != null, TextUtil.SYSTEM_IS_NOT_AVAILABLE, details, field); derivedName = NameUtil.getName(system, deviceType, NamingConventionUtil.extractInstanceIndex(name), holder); } else { throw ExceptionUtil.createDataNotAvailableException( - TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null); + TextUtil.SYSTEM_IS_NOT_AVAILABLE, details, field); } // TODO is this condition correct? - ExceptionUtil.validateConditionDataNotAvailableException(system != null, TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null); + ExceptionUtil.validateConditionDataNotAvailableException(system != null, TextUtil.SYSTEM_IS_NOT_AVAILABLE, details, field); if (!StringUtils.isEmpty(sub)) { subsystem = holderIRepositories.getSubsystemRepository().findLatestNotDeletedByParentAndMnemonic(system.getUuid().toString(), sub); - ExceptionUtil.validateConditionDataNotAvailableException(subsystem != null, TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null); + ExceptionUtil.validateConditionDataNotAvailableException(subsystem != null, TextUtil.SUBSYSTEM_IS_NOT_AVAILABLE, details, field); derivedName = NameUtil.getName(subsystem, deviceType, NamingConventionUtil.extractInstanceIndex(name), holder); } @@ -596,24 +605,20 @@ public class ValidateUtil { // index if (!StringUtils.isEmpty(idx)) { // TODO overrideRuleset depend on user authority - condition = namingConvention.isInstanceIndexValid(name, false); - ExceptionUtil.validateConditionDataNotValidException(condition, "instance index " + TextUtil.IS_NOT_VALID, name, null); + ExceptionUtil.validateConditionDataNotValidException(namingConvention.isInstanceIndexValid(name, false), TextUtil.INDEX_IS_NOT_VALID, details, field); } // name // name corresponds to derived name // convention name not exists // convention name equivalence not exists - condition = StringUtils.equals(name, derivedName); - ExceptionUtil.validateConditionDataNotCorrectException(condition, "convention name " + TextUtil.IS_NOT_CORRECT, name, null); + ExceptionUtil.validateConditionDataNotCorrectException(StringUtils.equals(name, derivedName), TextUtil.CONVENTION_NAME_IS_NOT_CORRECT, details, field); List<Name> names = nameRepository.readNames(false, FieldName.NAME, name); - condition = names == null || names.isEmpty(); - ExceptionUtil.validateConditionDataExistException(condition, "convention name " + TextUtil.EXISTS, name, null); + ExceptionUtil.validateConditionDataExistException(names.isEmpty(), TextUtil.CONVENTION_NAME_EXISTS, details, field); names = nameRepository.readNames(false, FieldName.NAMEEQUIVALENCE, namingConvention.equivalenceClassRepresentative(name)); - condition = names == null || names.isEmpty(); - ExceptionUtil.validateConditionDataExistException(condition, "convention name equivalence " + TextUtil.EXISTS, name, null); + ExceptionUtil.validateConditionDataExistException(names.isEmpty(), TextUtil.CONVENTION_NAME_EQUIVALENCE_EXISTS, details, field); } // ---------------------------------------------------------------------------------------------------- @@ -650,7 +655,7 @@ public class ValidateUtil { boolean condition = ((queryFields == null && queryValues == null) || (queryFields != null && queryValues != null && queryFields.length == queryValues.length && queryFields.length > 0)); ExceptionUtil.validateConditionInputNotCorrectException(condition, - "url and parameters " + TextUtil.ARE_NOT_CORRECT, "queryFields, queryValues with different lengths or empty", null); + TextUtil.VALUES_ARE_NOT_CORRECT, "url and parameters (queryFields, queryValues) have different lengths or are empty", null); if (queryFields != null) { for (int i=0; i<queryFields.length; i++) { @@ -746,7 +751,7 @@ public class ValidateUtil { || Type.DEVICEGROUP.equals(structureElement.getType()) || Type.DEVICETYPE.equals(structureElement.getType())) { ExceptionUtil.validateConditionInputNotAvailableException(structureElement.getParent() != null, - "parent uuid " + TextUtil.IS_NOT_AVAILABLE, structureElement.toString(), "parent"); + TextUtil.PARENT_IS_NOT_AVAILABLE, structureElement.toString(), TextUtil.PARENT); ValidateUtil.validateInputUuid(structureElement.getParent().toString()); } @@ -757,7 +762,7 @@ public class ValidateUtil { // validateMnemonic takes isMnemonicRequired into account MnemonicValidation mnemonicValidation = namingConvention.validateMnemonic(structureElement.getType(), structureElement.getMnemonic()); ExceptionUtil.validateConditionInputNotValidException(MnemonicValidation.VALID.equals(mnemonicValidation), - "mnemonic " + TextUtil.IS_NOT_VALID, structureElement.toString(), "mnemonic"); + TextUtil.MNEMONIC_IS_NOT_VALID, structureElement.toString(), TextUtil.MNEMONIC); validateInputDescription(structureElement.getDescription()); } @@ -867,91 +872,60 @@ public class ValidateUtil { return; } - if (StructureChoice.UPDATE.equals(structureChoice) || StructureChoice.DELETE.equals(structureChoice)) { - if (Type.SYSTEMGROUP.equals(structureElement.getType())) { - List<SystemGroup> systemGroups = null; - - // status, uuid - // status, not deleted, uuid - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(systemGroups != null && systemGroups.size() == 0, TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(systemGroups != null && systemGroups.size() == 1, TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.SYSTEM.equals(structureElement.getType())) { - List<System> systems = null; - - // status, uuid - // status, not deleted, uuid - systems = holderRepositories.getSystemRepository().readSystems(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(systems != null && systems.size() == 0, TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - systems = holderRepositories.getSystemRepository().readSystems(Status.APPROVED, false, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(systems != null && systems.size() == 1, TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.SUBSYSTEM.equals(structureElement.getType())) { - List<Subsystem> subsystems = null; - - // status, uuid - // status, not deleted, uuid - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(subsystems != null && subsystems.size() == 0, TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(Status.APPROVED, false, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(subsystems != null && subsystems.size() == 1, TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.DISCIPLINE.equals(structureElement.getType())) { - List<Discipline> disciplines = null; + String message = structureElement.getType().toString().toLowerCase() + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; + String details = structureElement.toString(); + String field = TextUtil.UUID; - // status, uuid - // status, not deleted, uuid - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(disciplines != null && disciplines.size() == 0, TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(disciplines != null && disciplines.size() == 1, TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.DEVICEGROUP.equals(structureElement.getType())) { - List<DeviceGroup> deviceGroups = null; + // validate data in itself + // update, delete + // entry not pending + // entry approved and not deleted + // approve, cancel, reject + // entry pending - // status, uuid - // status, not deleted, uuid - deviceGroups = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(deviceGroups != null && deviceGroups.size() == 0, TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - deviceGroups = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.APPROVED, false, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(deviceGroups != null && deviceGroups.size() == 1, TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.DEVICETYPE.equals(structureElement.getType())) { - List<DeviceType> deviceTypes = null; + if (StructureChoice.UPDATE.equals(structureChoice) || StructureChoice.DELETE.equals(structureChoice)) { + ValidateUtil.validateStructuresStatusSize0( + structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); - // status, uuid - // status, not deleted, uuid - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(deviceTypes != null && deviceTypes.size() == 0, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.APPROVED, false, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(deviceTypes != null && deviceTypes.size() == 1, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } + ValidateUtil.validateStructuresStatusSize1( + structureElement.getUuid(), structureElement.getType(), Status.APPROVED, Boolean.FALSE, + holderRepositories, message, details, field); } else if (StructureChoice.APPROVE.equals(structureChoice) || StructureChoice.CANCEL.equals(structureChoice) || StructureChoice.REJECT.equals(structureChoice)) { - if (Type.SYSTEMGROUP.equals(structureElement.getType())) { - // status, uuid - List<SystemGroup> systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(systemGroups != null && systemGroups.size() == 1, TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.SYSTEM.equals(structureElement.getType())) { - // status, uuid - List<System> systems = holderRepositories.getSystemRepository().readSystems(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(systems != null && systems.size() == 1, TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.SUBSYSTEM.equals(structureElement.getType())) { - // status, uuid - List<Subsystem> subsystems = holderRepositories.getSubsystemRepository().readSubsystems(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(subsystems != null && subsystems.size() == 1, TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.DISCIPLINE.equals(structureElement.getType())) { - // status, uuid - List<Discipline> disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(disciplines != null && disciplines.size() == 1, TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.DEVICEGROUP.equals(structureElement.getType())) { - // status, uuid - List<DeviceGroup> deviceGroups = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(deviceGroups != null && deviceGroups.size() == 1, TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } else if (Type.DEVICETYPE.equals(structureElement.getType())) { - // status, uuid - List<DeviceType> deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataNotCorrectException(deviceTypes != null && deviceTypes.size() == 1, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid"); - } + ValidateUtil.validateStructuresStatusSize1( + structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); } } + private static void validateStructuresStatusSize0(UUID uuid, Type type, Status status, Boolean deleted, + HolderRepositories holderRepositories, String message, String details, String field) { + ExceptionUtil.validateConditionDataNotCorrectException( + getStructuresSize(uuid, type, status, deleted, holderRepositories) == 0, message, details, field); + } + private static void validateStructuresStatusSize1(UUID uuid, Type type, Status status, Boolean deleted, + HolderRepositories holderRepositories, String message, String details, String field) { + ExceptionUtil.validateConditionDataNotCorrectException( + getStructuresSize(uuid, type, status, deleted, holderRepositories) == 1, message, details, field); + } + private static int getStructuresSize(UUID uuid, Type type, Status status, Boolean deleted, + HolderRepositories holderRepositories) { + if (Type.SYSTEMGROUP.equals(type)) { + return holderRepositories.getSystemGroupRepository().readSystemGroups(status, deleted, FieldStructure.UUID, uuid.toString()).size(); + } else if (Type.SYSTEM.equals(type)) { + return holderRepositories.getSystemRepository().readSystems(status, deleted, FieldStructure.UUID, uuid.toString()).size(); + } else if (Type.SUBSYSTEM.equals(type)) { + return holderRepositories.getSubsystemRepository().readSubsystems(status, deleted, FieldStructure.UUID, uuid.toString()).size(); + } else if (Type.DISCIPLINE.equals(type)) { + return holderRepositories.getDisciplineRepository().readDisciplines(status, deleted, FieldStructure.UUID, uuid.toString()).size(); + } else if (Type.DEVICEGROUP.equals(type)) { + return holderRepositories.getDeviceGroupRepository().readDeviceGroups(status, deleted, FieldStructure.UUID, uuid.toString()).size(); + } else if (Type.DEVICETYPE.equals(type)) { + return holderRepositories.getDeviceTypeRepository().readDeviceTypes(status, deleted, FieldStructure.UUID, uuid.toString()).size(); + } + return 0; + } + /** * Validate structure element data relative other data. * @@ -981,279 +955,274 @@ public class ValidateUtil { return; } + String message = null; String details = structureElement.toString(); + String field = TextUtil.MNEMONIC; + + // validate data relative other data + // create, update + // entry (uuid,) status, mnemonic + // entry (uuid,) status, mnemonic equivalence + // approve + // entry uuid, status + if (StructureChoice.CREATE.equals(structureChoice) || StructureChoice.UPDATE.equals(structureChoice)) { if (Type.SYSTEMGROUP.equals(structureElement.getType())) { // note rules for mnemonic for system group if (!StringUtils.isEmpty(structureElement.getMnemonic())) { - List<SystemGroup> systemGroups = null; - String message = TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - // status, mnemonic - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.PENDING, false, FieldStructure.MNEMONIC, structureElement.getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systemGroups == null || systemGroups.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systemGroups == null || systemGroups.isEmpty() || systemGroups.size() == 1 && systemGroups.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.MNEMONIC, structureElement.getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systemGroups == null || systemGroups.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systemGroups == null || systemGroups.isEmpty() || systemGroups.size() == 1 && systemGroups.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); + message = TextUtil.SYSTEMGROUP_IS_NOT_CORRECT; + validateStructuresStatusMnemonic(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); // status, mnemonic equivalence - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.PENDING, false, FieldStructure.MNEMONICEQUIVALENCE, namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systemGroups == null || systemGroups.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systemGroups == null || systemGroups.isEmpty() || systemGroups.size() == 1 && systemGroups.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.MNEMONICEQUIVALENCE, namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systemGroups == null || systemGroups.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systemGroups == null || systemGroups.isEmpty() || systemGroups.size() == 1 && systemGroups.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); + validateStructuresStatusMnemonicequivalence(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); } } else if (Type.SYSTEM.equals(structureElement.getType())) { - List<SystemGroup> systemGroups = null; - List<System> systems = null; - String message = null; - // status, parent - message = TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.UUID, structureElement.getParent().toString()); - ExceptionUtil.validateConditionDataConflictException(systemGroups != null && systemGroups.size() == 1, message, details, "parent"); - - // status, parent, mnemonic - message = TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - systems = holderRepositories.getSystemRepository().readSystems(new Status[] {Status.PENDING}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONIC}, new String[] {systemGroups.get(0).getUuid().toString(), structureElement.getMnemonic()}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systems == null || systems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systems == null || systems.isEmpty() || systems.size() == 1 && systems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - systems = holderRepositories.getSystemRepository().readSystems(new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONIC}, new String[] {systemGroups.get(0).getUuid().toString(), structureElement.getMnemonic()}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systems == null || systems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systems == null || systems.isEmpty() || systems.size() == 1 && systems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - - // status, parent, mnemonic equivalence - systems = holderRepositories.getSystemRepository().readSystems(new Status[] {Status.PENDING}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONICEQUIVALENCE}, new String[] {systemGroups.get(0).getUuid().toString(), namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systems == null || systems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systems == null || systems.isEmpty() || systems.size() == 1 && systems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - systems = holderRepositories.getSystemRepository().readSystems(new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONICEQUIVALENCE}, new String[] {systemGroups.get(0).getUuid().toString(), namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systems == null || systems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systems == null || systems.isEmpty() || systems.size() == 1 && systems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - } else if (Type.SUBSYSTEM.equals(structureElement.getType())) { - List<System> systems = null; - List<Subsystem> subsystems = null; - String message = null; + message = TextUtil.SYSTEMGROUP_IS_NOT_CORRECT; + validateStructuresParent(structureElement.getType(), structureElement.getParent(), Status.APPROVED, false, + holderRepositories, message, details, field); + + // status, mnemonic + message = TextUtil.SYSTEM_IS_NOT_CORRECT; + validateStructuresStatusMnemonic(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); + // status, mnemonic equivalence + validateStructuresStatusMnemonicequivalence(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); + } else if (Type.SUBSYSTEM.equals(structureElement.getType())) { // status, parent - message = TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - systems = holderRepositories.getSystemRepository().readSystems(Status.APPROVED, false, FieldStructure.UUID, structureElement.getParent().toString()); - ExceptionUtil.validateConditionDataConflictException(systems != null && systems.size() == 1, message, details, "parent"); - - // status, parent, mnemonic - message = TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(new Status[] {Status.PENDING}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONIC}, new String[] {systems.get(0).getUuid().toString(), structureElement.getMnemonic()}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, subsystems == null || subsystems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, subsystems == null || subsystems.isEmpty() || subsystems.size() == 1 && subsystems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONIC}, new String[] {systems.get(0).getUuid().toString(), structureElement.getMnemonic()}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, subsystems == null || subsystems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, subsystems == null || subsystems.isEmpty() || subsystems.size() == 1 && subsystems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - - // status. parent, mnemonic equivalence - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(new Status[] {Status.PENDING}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONICEQUIVALENCE}, new String[] {systems.get(0).getUuid().toString(), namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, subsystems == null || subsystems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, subsystems == null || subsystems.isEmpty() || subsystems.size() == 1 && subsystems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONICEQUIVALENCE}, new String[] {systems.get(0).getUuid().toString(), namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, subsystems == null || subsystems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, subsystems == null || subsystems.isEmpty() || subsystems.size() == 1 && subsystems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); + message = TextUtil.SYSTEM_IS_NOT_CORRECT; + validateStructuresParent(structureElement.getType(), structureElement.getParent(), Status.APPROVED, false, + holderRepositories, message, details, field); + + // status, mnemonic + message = TextUtil.SUBSYSTEM_IS_NOT_CORRECT; + validateStructuresStatusMnemonic(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); + + // status, mnemonic equivalence + validateStructuresStatusMnemonicequivalence(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); } else if (Type.DISCIPLINE.equals(structureElement.getType())) { - List<Discipline> disciplines = null; - String message = TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; + message = TextUtil.DISCIPLINE_IS_NOT_CORRECT; // status, mnemonic - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.PENDING, false, FieldStructure.MNEMONIC, structureElement.getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, disciplines == null || disciplines.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, disciplines == null || disciplines.isEmpty() || disciplines.size() == 1 && disciplines.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.MNEMONIC, structureElement.getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, disciplines == null || disciplines.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, disciplines == null || disciplines.isEmpty() || disciplines.size() == 1 && disciplines.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); + validateStructuresStatusMnemonic(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); // status, mnemonic equivalence - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.PENDING, false, FieldStructure.MNEMONICEQUIVALENCE, namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, disciplines == null || disciplines.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, disciplines == null || disciplines.isEmpty() || disciplines.size() == 1 && disciplines.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.MNEMONICEQUIVALENCE, namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, disciplines == null || disciplines.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, disciplines == null || disciplines.isEmpty() || disciplines.size() == 1 && disciplines.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); + validateStructuresStatusMnemonicequivalence(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); } else if (Type.DEVICEGROUP.equals(structureElement.getType())) { - List<Discipline> disciplines = null; - String message = null; - // status, parent - message = TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.UUID, structureElement.getParent().toString()); - ExceptionUtil.validateConditionDataConflictException(disciplines != null && disciplines.size() == 1, message, details, "parent"); + message = TextUtil.DISCIPLINE_IS_NOT_CORRECT; + List<Discipline> disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.UUID, structureElement.getParent().toString()); + ExceptionUtil.validateConditionDataConflictException(disciplines != null && disciplines.size() == 1, message, details, TextUtil.PARENT); // note rules for mnemonic for device group // mnemonic - message = TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - ExceptionUtil.validateConditionDataConflictException(StringUtils.isEmpty(structureElement.getMnemonic()), message, details, "mnemonic"); + message = TextUtil.DEVICEGROUP_IS_NOT_CORRECT; + ExceptionUtil.validateConditionDataConflictException(StringUtils.isEmpty(structureElement.getMnemonic()), message, details, field); } else if (Type.DEVICETYPE.equals(structureElement.getType())) { - List<DeviceGroup> deviceGroups = null; - List<DeviceType> deviceTypes = null; - String message = null; - // status, parent - message = TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - deviceGroups = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.APPROVED, false, FieldStructure.UUID, structureElement.getParent().toString()); - ExceptionUtil.validateConditionDataConflictException(deviceGroups != null && deviceGroups.size() == 1, message, details, "parent"); - - // status, parent, mnemonic - message = TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(new Status[] {Status.PENDING}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONIC}, new String[] {deviceGroups.get(0).getUuid().toString(), structureElement.getMnemonic()}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty() || deviceTypes.size() == 1 && deviceTypes.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONIC}, new String[] {deviceGroups.get(0).getUuid().toString(), structureElement.getMnemonic()}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty() || deviceTypes.size() == 1 && deviceTypes.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - - // status, parent, mnemonic equivalence - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(new Status[] {Status.PENDING}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONICEQUIVALENCE}, new String[] {deviceGroups.get(0).getUuid().toString(), namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty() || deviceTypes.size() == 1 && deviceTypes.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(new Status[] {Status.APPROVED}, false, new FieldStructure[] {FieldStructure.PARENT, FieldStructure.MNEMONICEQUIVALENCE}, new String[] {deviceGroups.get(0).getUuid().toString(), namingConvention.equivalenceClassRepresentative(structureElement.getMnemonic())}, null, null, null, null); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty() || deviceTypes.size() == 1 && deviceTypes.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic"); - } - } else if (StructureChoice.APPROVE.equals(structureChoice)) { - if (Type.SYSTEMGROUP.equals(structureElement.getType())) { - List<SystemGroup> toBeApproved = null; - List<SystemGroup> systemGroups = null; - String message = TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - - // to be approved - status, uuid - toBeApproved = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(toBeApproved != null && toBeApproved.size() == 1, message, details, "uuid"); + message = TextUtil.DEVICEGROUP_IS_NOT_CORRECT; + validateStructuresParent(structureElement.getType(), structureElement.getParent(), Status.APPROVED, false, + holderRepositories, message, details, field); // status, mnemonic - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.MNEMONIC, toBeApproved.get(0).getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systemGroups == null || systemGroups.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systemGroups == null || systemGroups.isEmpty() || systemGroups.size() == 1 && systemGroups.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + message = TextUtil.DEVICETYPE_IS_NOT_CORRECT; + validateStructuresStatusMnemonic(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); // status, mnemonic equivalence - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.MNEMONICEQUIVALENCE, toBeApproved.get(0).getMnemonicEquivalence()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systemGroups == null || systemGroups.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systemGroups == null || systemGroups.isEmpty() || systemGroups.size() == 1 && systemGroups.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); - } else if (Type.SYSTEM.equals(structureElement.getType())) { - List<SystemGroup> systemGroups = null; - List<System> toBeApproved = null; - List<System> systems = null; - String message = null; - - // to be approved - status, uuid - message = TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - toBeApproved = holderRepositories.getSystemRepository().readSystems(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(toBeApproved != null && toBeApproved.size() == 1, message, details, "uuid"); + validateStructuresStatusMnemonicequivalence(structureElement.getUuid(), structureElement.getType(), structureElement.getParent(), structureElement.getMnemonic(), + namingConvention, holderRepositories, structureChoice, message, details, field); + } + } else if (StructureChoice.APPROVE.equals(structureChoice)) { + // possibly additional checks to ensure (status, mnemonic) and (status, mnemonic equivalence) + // however that would be duplicate checks as already checked at time of create, update + if (Type.SYSTEMGROUP.equals(structureElement.getType())) { + // status, uuid + message = TextUtil.SYSTEMGROUP_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); + } else if (Type.SYSTEM.equals(structureElement.getType())) { // status, parent - message = TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, FieldStructure.UUID, toBeApproved.get(0).getParentUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(systemGroups != null && systemGroups.size() == 1, message, details, "parent"); - - // status, mnemonic - message = TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - systems = holderRepositories.getSystemRepository().readSystems(Status.APPROVED, false, FieldStructure.MNEMONIC, toBeApproved.get(0).getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systems == null || systems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systems == null || systems.isEmpty() || systems.size() == 1 && systems.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + message = TextUtil.SYSTEMGROUP_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getParent(), Type.SYSTEMGROUP, Status.APPROVED, false, + holderRepositories, message, details, field); - // status, mnemonic equivalence - systems = holderRepositories.getSystemRepository().readSystems(Status.APPROVED, false, FieldStructure.MNEMONICEQUIVALENCE, toBeApproved.get(0).getMnemonicEquivalence()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, systems == null || systems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, systems == null || systems.isEmpty() || systems.size() == 1 && systems.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + // status, uuid + message = TextUtil.SYSTEM_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); } else if (Type.SUBSYSTEM.equals(structureElement.getType())) { - List<System> systems = null; - List<Subsystem> toBeApproved = null; - List<Subsystem> subsystems = null; - String message = null; - - // to be approved - status, uuid - message = TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - toBeApproved = holderRepositories.getSubsystemRepository().readSubsystems(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(toBeApproved != null && toBeApproved.size() == 1, message, details, "uuid"); - // status, parent - message = TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - systems = holderRepositories.getSystemRepository().readSystems(Status.APPROVED, false, FieldStructure.UUID, toBeApproved.get(0).getParentUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(systems != null && systems.size() == 1, message, details, "parent"); - - // status, mnemonic - message = TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(Status.APPROVED, false, FieldStructure.MNEMONIC, toBeApproved.get(0).getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, subsystems == null || subsystems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, subsystems == null || subsystems.isEmpty() || subsystems.size() == 1 && subsystems.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + message = TextUtil.SYSTEM_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getParent(), Type.SYSTEM, Status.APPROVED, false, + holderRepositories, message, details, field); - // status, mnemonic equivalence - subsystems = holderRepositories.getSubsystemRepository().readSubsystems(Status.APPROVED, false, FieldStructure.MNEMONICEQUIVALENCE, toBeApproved.get(0).getMnemonicEquivalence()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, subsystems == null || subsystems.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, subsystems == null || subsystems.isEmpty() || subsystems.size() == 1 && subsystems.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + // status, uuid + message = TextUtil.SUBSYSTEM_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); } else if (Type.DISCIPLINE.equals(structureElement.getType())) { - List<Discipline> toBeApproved = null; - List<Discipline> disciplines = null; - String message = TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; + // status, uuid + message = TextUtil.DISCIPLINE_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); + } else if (Type.DEVICEGROUP.equals(structureElement.getType())) { + // status, parent + message = TextUtil.DISCIPLINE_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getParent(), Type.DISCIPLINE, Status.APPROVED, false, + holderRepositories, message, details, field); - // to be approved - status, uuid - toBeApproved = holderRepositories.getDisciplineRepository().readDisciplines(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(toBeApproved != null && toBeApproved.size() == 1, message, details, "uuid"); + // status, uuid + message = TextUtil.DEVICEGROUP_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); - // status, mnemonic - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.MNEMONIC, toBeApproved.get(0).getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, disciplines == null || disciplines.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, disciplines == null || disciplines.isEmpty() || disciplines.size() == 1 && disciplines.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + // no mnemonic for device group + ExceptionUtil.validateConditionDataConflictException(StringUtils.isEmpty(structureElement.getMnemonic()), message, details, field); + } else if (Type.DEVICETYPE.equals(structureElement.getType())) { + // status, parent + message = TextUtil.DISCIPLINE_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getParent(), Type.DEVICEGROUP, Status.APPROVED, false, + holderRepositories, message, details, field); - // status, mnemonic equivalence - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.MNEMONICEQUIVALENCE, toBeApproved.get(0).getMnemonicEquivalence()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, disciplines == null || disciplines.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, disciplines == null || disciplines.isEmpty() || disciplines.size() == 1 && disciplines.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); - } else if (Type.DEVICEGROUP.equals(structureElement.getType())) { - List<Discipline> disciplines = null; - List<DeviceGroup> toBeApproved = null; - String message = null; + // status, uuid + message = TextUtil.DEVICETYPE_IS_NOT_CORRECT; + validateStructuresStatusSize1(structureElement.getUuid(), structureElement.getType(), Status.PENDING, null, + holderRepositories, message, details, field); + } + } + } - // to be approved - status, uuid - message = TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - toBeApproved = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(toBeApproved != null && toBeApproved.size() == 1, message, details, "uuid"); + private static void validateStructuresParent(Type type, UUID parent, Status status, Boolean deleted, + HolderRepositories holderRepositories, String message, String details, String field){ + ExceptionUtil.validateConditionDataConflictException( + getStructuresParentSize(type, parent, status, deleted, holderRepositories) == 1, message, details, field); + } + private static void validateStructuresStatusMnemonic(UUID uuid, Type type, UUID parent, String mnemonic, + EssNamingConvention namingConvention, HolderRepositories holderRepositories, StructureChoice structureChoice, + String message, String details, String field){ - // status, parent - message = TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.APPROVED, false, FieldStructure.UUID, toBeApproved.get(0).getParentUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(disciplines != null && disciplines.size() == 1, message, details, "parent"); + // parent may be null + List<UUID> listUuid = null; - // note rules for mnemonic for device group + listUuid = getStructures(type, parent, mnemonic, Status.PENDING, false, false, namingConvention, holderRepositories); + validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, listUuid.isEmpty(), message, details, field); + validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, listUuid.isEmpty() || listUuid.size() == 1 && listUuid.get(0).equals(uuid), message, details, field); - // mnemonic - message = TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - ExceptionUtil.validateConditionDataConflictException(StringUtils.isEmpty(structureElement.getMnemonic()), message, details, "mnemonic"); - } else if (Type.DEVICETYPE.equals(structureElement.getType())) { - List<DeviceGroup> deviceGroups = null; - List<DeviceType> toBeApproved = null; - List<DeviceType> deviceTypes = null; - String message = null; + listUuid = getStructures(type, parent, mnemonic, Status.APPROVED, false, false, namingConvention, holderRepositories); + validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, listUuid.isEmpty(), message, details, field); + validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, listUuid.isEmpty() || listUuid.size() == 1 && listUuid.get(0).equals(uuid), message, details, field); + } + private static void validateStructuresStatusMnemonicequivalence(UUID uuid, Type type, UUID parent, String mnemonic, + EssNamingConvention namingConvention, HolderRepositories holderRepositories, StructureChoice structureChoice, + String message, String details, String field){ - // to be approved - status, uuid - message = TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - toBeApproved = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(toBeApproved != null && toBeApproved.size() == 1, message, details, "uuid"); + // parent may be null + List<UUID> listUuid = null; - // status, parent - message = TextUtil.DEVICEGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - deviceGroups = holderRepositories.getDeviceGroupRepository().readDeviceGroups(Status.APPROVED, false, FieldStructure.UUID, toBeApproved.get(0).getParentUuid().toString()); - ExceptionUtil.validateConditionDataConflictException(deviceGroups != null && deviceGroups.size() == 1, message, details, "parent"); + listUuid = getStructures(type, parent, mnemonic, Status.PENDING, false, true, namingConvention, holderRepositories); + validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, listUuid.isEmpty(), message, details, field); + validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, listUuid.isEmpty() || listUuid.size() == 1 && listUuid.get(0).equals(uuid), message, details, field); - // status, mnemonic - message = TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT; - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.APPROVED, false, FieldStructure.MNEMONIC, toBeApproved.get(0).getMnemonic()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty() || deviceTypes.size() == 1 && deviceTypes.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + listUuid = getStructures(type, parent, mnemonic, Status.APPROVED, false, true, namingConvention, holderRepositories); + validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, listUuid.isEmpty(), message, details, field); + validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, listUuid.isEmpty() || listUuid.size() == 1 && listUuid.get(0).equals(uuid), message, details, field); + } + private static int getStructuresParentSize(Type type, UUID parent, Status status, Boolean deleted, + HolderRepositories holderRepositories) { + if (Type.SYSTEM.equals(type)) { + return holderRepositories.getSystemGroupRepository().readSystemGroups(status, deleted, FieldStructure.UUID, parent.toString()).size(); + } else if (Type.SUBSYSTEM.equals(type)) { + return holderRepositories.getSystemRepository().readSystems(status, deleted, FieldStructure.UUID, parent.toString()).size(); + } else if (Type.DEVICEGROUP.equals(type)) { + return holderRepositories.getDisciplineRepository().readDisciplines(status, deleted, FieldStructure.UUID, parent.toString()).size(); + } else if (Type.DEVICETYPE.equals(type)) { + return holderRepositories.getDeviceGroupRepository().readDeviceGroups(status, deleted, FieldStructure.UUID, parent.toString()).size(); + } + return 0; + } + private static List<UUID> getStructures(Type type, UUID parent, String mnemonic, Status status, Boolean deleted, Boolean equivalence, + EssNamingConvention namingConvention, HolderRepositories holderRepositories) { + + boolean hasMnemonic = !StringUtils.isEmpty(mnemonic); + FieldStructure mnemonicField = null; + String mnemonicValue = null; + if (hasMnemonic) { + mnemonicField = Boolean.TRUE.equals(equivalence) + ? FieldStructure.MNEMONICEQUIVALENCE + : FieldStructure.MNEMONIC; + mnemonicValue = Boolean.TRUE.equals(equivalence) + ? namingConvention.equivalenceClassRepresentative(mnemonic) + : mnemonic; + } - // status, mnemonic equivalence - deviceTypes = holderRepositories.getDeviceTypeRepository().readDeviceTypes(Status.APPROVED, false, FieldStructure.MNEMONICEQUIVALENCE, toBeApproved.get(0).getMnemonicEquivalence()); - validateConditionIfStructureChoice(StructureChoice.CREATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty(), message, details, "mnemonic"); - validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, deviceTypes == null || deviceTypes.isEmpty() || deviceTypes.size() == 1 && deviceTypes.get(0).getUuid().equals(toBeApproved.get(0).getUuid()), message, details, "mnemonic"); + // uuid, parent, mnemonic + boolean queryParentTable = false; + FieldStructure[] queryFields = null; + String[] queryValues = null; + if (Type.SYSTEMGROUP.equals(type) || Type.DISCIPLINE.equals(type)) { + // no parent - query table for type + if (hasMnemonic) { + queryFields = new FieldStructure[]{mnemonicField}; + queryValues = new String[]{mnemonicValue}; + } else { + return Lists.newArrayList(); + } + } else { + // parent + if (hasMnemonic) { + // query table for type + queryFields = new FieldStructure[]{FieldStructure.PARENT, mnemonicField}; + queryValues = new String[]{parent.toString(), mnemonicValue}; + } else { + // query table for parent to type + queryParentTable = true; + queryFields = new FieldStructure[]{FieldStructure.UUID}; + queryValues = new String[]{parent.toString()}; + } + } + + // query table and return list with uuid + if (Type.SYSTEMGROUP.equals(type)) { + return StructureUtil.listSystemGroup2Uuid(holderRepositories.getSystemGroupRepository().readSystemGroups(status, deleted, queryFields, queryValues)); + } else if (Type.SYSTEM.equals(type)) { + if (queryParentTable) { + return StructureUtil.listSystemGroup2Uuid(holderRepositories.getSystemGroupRepository().readSystemGroups(status, deleted, queryFields, queryValues)); + } else { + return StructureUtil.listSystem2Uuid(holderRepositories.getSystemRepository().readSystems(status, deleted, queryFields, queryValues)); + } + } else if (Type.SUBSYSTEM.equals(type)) { + if (queryParentTable) { + return StructureUtil.listSystem2Uuid(holderRepositories.getSystemRepository().readSystems(status, deleted, queryFields, queryValues)); + } else { + return StructureUtil.listSubsystem2Uuid(holderRepositories.getSubsystemRepository().readSubsystems(status, deleted, queryFields, queryValues)); + } + } else if (Type.DISCIPLINE.equals(type)) { + return StructureUtil.listDiscipline2Uuid(holderRepositories.getDisciplineRepository().readDisciplines(status, deleted, queryFields, queryValues)); + } else if (Type.DEVICEGROUP.equals(type)) { + if (queryParentTable) { + return StructureUtil.listDiscipline2Uuid(holderRepositories.getDisciplineRepository().readDisciplines(status, deleted, queryFields, queryValues)); + } else { + return StructureUtil.listDeviceGroup2Uuid(holderRepositories.getDeviceGroupRepository().readDeviceGroups(status, deleted, queryFields, queryValues)); } + } else if (Type.DEVICETYPE.equals(type)) { + if (queryParentTable) { + return StructureUtil.listDeviceGroup2Uuid(holderRepositories.getDeviceGroupRepository().readDeviceGroups(status, deleted, queryFields, queryValues)); + } else { + return StructureUtil.listDeviceType2Uuid(holderRepositories.getDeviceTypeRepository().readDeviceTypes(status, deleted, queryFields, queryValues)); } } + return Lists.newArrayList(); } // ---------------------------------------------------------------------------------------------------- @@ -1273,129 +1242,148 @@ public class ValidateUtil { return; } + String details = mnemonicpath; + String field = TextUtil.MNEMONIC_PATH; + String[] path = NamingConventionUtil.string2MnemonicPath(mnemonicpath); ExceptionUtil.validateConditionDataNotValidException(path != null && path.length >= 1 && path.length <= 2, - TextUtil.STRUCTURE + " mnemonic path " + TextUtil.IS_NOT_VALID, path + ", " + mnemonicpath, null); + TextUtil.STRUCTURE_MNEMONIC_PATH_IS_NOT_VALID, details, field); String mnemonicpathEquivalence = namingConvention.equivalenceClassRepresentative(mnemonicpath); if (Type.SYSTEMGROUP.equals(type)) { - ExceptionUtil.validateConditionDataNotValidException(path.length == 1, TextUtil.SYSTEMGROUP + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null); + validateStructuresMnemonicpathNotValid(type, path.length == 1, details, field); // system group may have empty path but there will be mnemonicpath in this context - // mnemonic + // mnemonic path SystemGroup sg = holderIRepositories.getSystemGroupRepository().findLatestNotDeletedByMnemonic(path[0]); - ExceptionUtil.validateConditionDataConflictException(sg == null, TextUtil.SYSTEMGROUP + " mnemonic path duplicate", path[0] + ", " + mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, sg == null, details, field); - // mnemonic equivalence + // mnemonic path equivalence List<SystemGroup> systemGroups = holderIRepositories.getSystemGroupRepository().findLatestNotDeleted(); for (SystemGroup systemGroup : systemGroups) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(systemGroup.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])), TextUtil.SYSTEMGROUP + " mnemonic path equivalence duplicate", path[0] + ", " + mnemonicpath, null); + validateStructuresMnemonicpathequivalenceDuplicate(type, !StringUtils.equals(systemGroup.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])), details, field); } } else if (Type.SYSTEM.equals(type)) { - ExceptionUtil.validateConditionDataNotValidException(path.length == 1, TextUtil.SYSTEM + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null); + validateStructuresMnemonicpathNotValid(type, path.length == 1, details, field); // path with 1 element - system group or system ---> check both individually // check mnemonic, mnemonic equivalence - // mnemonic system group + // mnemonic path system group List<String> mnemonicPaths = StructureUtil.getMnemonicPathsSystemGroup(holder, false, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(mnemonicpath, existingPath), details, field); } - // mnemonic path system group + // mnemonic path equivalence system group mnemonicPaths = StructureUtil.getMnemonicPathsSystemGroup(holder, true, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null); + validateStructuresMnemonicpathequivalenceDuplicate(type, !StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), details, field); } - // mnemonic + // mnemonic path mnemonicPaths = StructureUtil.getMnemonicPathsSystem(holder, false, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(mnemonicpath, existingPath), details, field); } - // mnemonic equivalence + // mnemonic path equivalence mnemonicPaths = StructureUtil.getMnemonicPathsSystem(holder, true, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null); + validateStructuresMnemonicpathequivalenceDuplicate(type, !StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), details, field); } } else if (Type.SUBSYSTEM.equals(type)) { - ExceptionUtil.validateConditionDataNotValidException(path.length == 2, TextUtil.SUBSYSTEM + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null); + validateStructuresMnemonicpathNotValid(type, path.length == 2, details, field); System sys = holderIRepositories.getSystemRepository().findLatestNotDeletedByMnemonic(path[0]); - ExceptionUtil.validateConditionDataNotAvailableException(sys != null, TextUtil.SUBSYSTEM + " mnemonic path not available", path[0] + ", " + mnemonicpath, null); + validateStructuresMnemonicpathNotAvailable(type, sys != null, details, field); SystemGroup sg = holderIRepositories.getSystemGroupRepository().findLatestNotDeletedByUuid(sys.getParentUuid().toString()); - // mnemonic - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(path[0], path[1]), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null); + // mnemonic path + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(path[0], path[1]), details, field); if (!StringUtils.isEmpty(sg.getMnemonic())) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(sg.getMnemonic(), path[1]), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(sg.getMnemonic(), path[1]), details, field); } List<String> mnemonicPaths = StructureUtil.getMnemonicPathsSubsystem(holder, false, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(mnemonicpath, existingPath), details, field); } - // mnemonic equivalence - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), TextUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null); + // mnemonic path equivalence + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), details, field); if (!StringUtils.isEmpty(sg.getMnemonic())) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(sg.getMnemonic()), namingConvention.equivalenceClassRepresentative(path[1])), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(namingConvention.equivalenceClassRepresentative(sg.getMnemonic()), namingConvention.equivalenceClassRepresentative(path[1])), details, field); } mnemonicPaths = StructureUtil.getMnemonicPathsSubsystem(holder, true, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.SUBSYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null); - } + validateStructuresMnemonicpathequivalenceDuplicate(type, !StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), details, field); } } else if (Type.DISCIPLINE.equals(type)) { - ExceptionUtil.validateConditionDataNotValidException(path.length == 1, TextUtil.DISCIPLINE + " mnemonic path " + TextUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath, null); + validateStructuresMnemonicpathNotValid(type, path.length == 1, details, field); - // mnemonic + // mnemonic path Discipline di = holderIRepositories.getDisciplineRepository().findLatestNotDeletedByMnemonic(path[0]); - ExceptionUtil.validateConditionDataConflictException(di == null, TextUtil.DISCIPLINE + " mnemonic path duplicate", path[0] + ", " + mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, di == null, details, field); - // mnemonic equivalence + // mnemonic path equivalence List<Discipline> disciplines = holderIRepositories.getDisciplineRepository().findLatestNotDeleted(); for (Discipline discipline : disciplines) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(discipline.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])), - TextUtil.DISCIPLINE + " mnemonic path equivalence duplicate", path[0] + ", " + mnemonicpath, null); + validateStructuresMnemonicpathequivalenceDuplicate(type, !StringUtils.equals(discipline.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])), details, field); } } else if (Type.DEVICEGROUP.equals(type)) { - throw ExceptionUtil.createDataNotValidException(TextUtil.DEVICEGROUP + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null); + throw ExceptionUtil.createDataNotValidException(TextUtil.DEVICEGROUP_IS_NOT_VALID, details, field); } else if (Type.DEVICETYPE.equals(type)) { - ExceptionUtil.validateConditionDataNotValidException(path.length == 2, TextUtil.STRUCTURE + " " + TextUtil.DEVICETYPE + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null); + // since device group is between discipline and device type and device group has no mnemonic, + // it can not be traced to which device group that this device type belongs, + // therefore it can not be known to which mnemonic line it belongs + // by looking at mnemonic + // instead similar approach as for other Type, i.e. compare with list of mnemonic paths + // rest of checks in validatecreate + + validateStructuresMnemonicpathNotValid(type, path.length == 2, details, field); // discipline Discipline discipline = holderIRepositories.getDisciplineRepository().findLatestNotDeletedByMnemonic(path[0]); - ExceptionUtil.validateConditionDataNotValidException(discipline != null, TextUtil.DISCIPLINE + " " + TextUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath, null); + ExceptionUtil.validateConditionDataNotValidException(discipline != null, + TextUtil.DISCIPLINE_IS_NOT_VALID, details, field); - // mnemonic - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(path[0], path[1]), TextUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null); + // mnemonic path + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(path[0], path[1]), details, field); List<String> mnemonicPaths = StructureUtil.getMnemonicPathsDeviceType(holder, false, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null); + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(mnemonicpath, existingPath), details, field); } - // mnemonic equivalence - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), TextUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null); + // mnemonic path equivalence + validateStructuresMnemonicpathDuplicate(type, !StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), details, field); mnemonicPaths = StructureUtil.getMnemonicPathsDeviceType(holder, true, namingConvention); for (String existingPath : mnemonicPaths) { - ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.DEVICETYPE + " mnemonic path equivalence duplicate", mnemonicpath, null); + validateStructuresMnemonicpathequivalenceDuplicate(type, !StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), details, field); } - - // since device group is between discipline and device type and device group has no mnemonic, - // it can not be traced to which device group that this device type belongs, - // therefore it can not be known to which mnemonic line it belongs - // by looking at mnemonic - // instead similar approach as for other Type, i.e. compare with list of mnemonic paths - // rest of checks in validatecreate } } + private static void validateStructuresMnemonicpathNotAvailable(Type type, boolean condition, String details, String field) { + ExceptionUtil.validateConditionDataNotValidException(condition, + type.toString().toLowerCase() + TextUtil.SPACE + TextUtil.MNEMONIC_PATH_IS_NOT_AVAILABLE, details, field); + } + private static void validateStructuresMnemonicpathNotValid(Type type, boolean condition, String details, String field) { + ExceptionUtil.validateConditionDataNotValidException(condition, + type.toString().toLowerCase() + TextUtil.SPACE + TextUtil.MNEMONIC_PATH_IS_NOT_VALID, details, field); + } + private static void validateStructuresMnemonicpathDuplicate(Type type, boolean condition, String details, String field) { + ExceptionUtil.validateConditionDataConflictException(condition, + type.toString().toLowerCase() + TextUtil.SPACE + TextUtil.MNEMONIC_PATH_HAS_DUPLICATE, details, field); + } + private static void validateStructuresMnemonicpathequivalenceDuplicate(Type type, boolean condition, String details, String field) { + ExceptionUtil.validateConditionDataConflictException(condition, + type.toString().toLowerCase() + TextUtil.SPACE + TextUtil.MNEMONIC_PATH_EQUIVALENCE_HAS_DUPLICATE, details, field); + } + // ---------------------------------------------------------------------------------------------------- /** diff --git a/src/test/java/org/openepics/names/util/ExceptionUtilTest.java b/src/test/java/org/openepics/names/util/ExceptionUtilTest.java index dff4a8da..95ff730f 100644 --- a/src/test/java/org/openepics/names/util/ExceptionUtilTest.java +++ b/src/test/java/org/openepics/names/util/ExceptionUtilTest.java @@ -154,7 +154,7 @@ class ExceptionUtilTest { void createInputNotCorrectException() { InputNotCorrectException exception = ExceptionUtil.createInputNotCorrectException(null, null, "3"); assertNotNull(exception); - assertEquals(TextUtil.INPUT_NOT_CORRECT_FOR_FIELD, exception.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_CORRECT, exception.getMessage()); assertEquals(null, exception.getDetails()); assertEquals("3", exception.getField()); assertNull(exception.getCause()); diff --git a/src/test/java/org/openepics/names/util/ValidateUtilTest.java b/src/test/java/org/openepics/names/util/ValidateUtilTest.java index 01c7b138..fb05b2da 100644 --- a/src/test/java/org/openepics/names/util/ValidateUtilTest.java +++ b/src/test/java/org/openepics/names/util/ValidateUtilTest.java @@ -45,7 +45,7 @@ class ValidateUtilTest { ValidateUtil.validateInputComment(null); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals(null, e.getDetails()); assertEquals("comment", e.getField()); assertEquals(null, e.getCause()); @@ -62,7 +62,7 @@ class ValidateUtilTest { ValidateUtil.validateInputComment(""); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals("", e.getDetails()); assertEquals("comment", e.getField()); assertEquals(null, e.getCause()); @@ -87,7 +87,7 @@ class ValidateUtilTest { ValidateUtil.validateInputDescription(null); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals(null, e.getDetails()); assertEquals("description", e.getField()); assertEquals(null, e.getCause()); @@ -104,7 +104,7 @@ class ValidateUtilTest { ValidateUtil.validateInputDescription(""); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals("", e.getDetails()); assertEquals("description", e.getField()); assertEquals(null, e.getCause()); @@ -129,7 +129,7 @@ class ValidateUtilTest { ValidateUtil.validateInputMnemonic(null); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals(null, e.getDetails()); assertEquals("mnemonic", e.getField()); assertEquals(null, e.getCause()); @@ -146,7 +146,7 @@ class ValidateUtilTest { ValidateUtil.validateInputMnemonic(""); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals("", e.getDetails()); assertEquals("mnemonic", e.getField()); assertEquals(null, e.getCause()); @@ -171,7 +171,7 @@ class ValidateUtilTest { ValidateUtil.validateInputName(null); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals(null, e.getDetails()); assertEquals("name", e.getField()); assertEquals(null, e.getCause()); @@ -188,7 +188,7 @@ class ValidateUtilTest { ValidateUtil.validateInputName(""); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals("", e.getDetails()); assertEquals("name", e.getField()); assertEquals(null, e.getCause()); @@ -213,7 +213,7 @@ class ValidateUtilTest { ValidateUtil.validateInputType(null); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals(null, e.getDetails()); assertEquals("type", e.getField()); assertEquals(null, e.getCause()); @@ -243,7 +243,7 @@ class ValidateUtilTest { ValidateUtil.validateInputUuid(null); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals(null, e.getDetails()); assertEquals("uuid", e.getField()); assertEquals(null, e.getCause()); @@ -260,7 +260,7 @@ class ValidateUtilTest { ValidateUtil.validateInputUuid(""); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals("", e.getDetails()); assertEquals("uuid", e.getField()); assertEquals(null, e.getCause()); @@ -342,7 +342,7 @@ class ValidateUtilTest { null, null); fail(); } catch (InputNotAvailableException e) { - assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage()); + assertEquals(TextUtil.VALUE_IS_NOT_AVAILABLE, e.getMessage()); assertEquals(null, e.getCause()); } } -- GitLab