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