From 3179ae1c9b4d4d96b5fb555e4432874d9c7ddd39 Mon Sep 17 00:00:00 2001
From: Lars Johansson <lars.johansson@ess.eu>
Date: Wed, 4 May 2022 17:10:22 +0200
Subject: [PATCH] Refactor text handling for validation and exceptions

---
 .../GlobalControllerExceptionHandler.java     |   4 +-
 .../rest/controller/NamesController.java      |  26 +-
 .../rest/controller/StructuresController.java |  42 +--
 .../openepics/names/util/ExceptionUtil.java   |  45 ++-
 .../org/openepics/names/util/TextUtil.java    |  83 ++++++
 .../openepics/names/util/ValidateUtil.java    | 262 ++++++++----------
 .../names/util/ExceptionUtilTest.java         |   2 +-
 .../names/util/ValidateUtilTest.java          |  24 +-
 8 files changed, 289 insertions(+), 199 deletions(-)
 create mode 100644 src/main/java/org/openepics/names/util/TextUtil.java

diff --git a/src/main/java/org/openepics/names/rest/controller/GlobalControllerExceptionHandler.java b/src/main/java/org/openepics/names/rest/controller/GlobalControllerExceptionHandler.java
index f4e570e2..67116228 100644
--- a/src/main/java/org/openepics/names/rest/controller/GlobalControllerExceptionHandler.java
+++ b/src/main/java/org/openepics/names/rest/controller/GlobalControllerExceptionHandler.java
@@ -34,7 +34,7 @@ import org.openepics.names.service.exception.InputNotAvailableException;
 import org.openepics.names.service.exception.InputNotCorrectException;
 import org.openepics.names.service.exception.InputNotValidException;
 import org.openepics.names.service.exception.ServiceException;
-import org.openepics.names.util.ExceptionUtil;
+import org.openepics.names.util.TextUtil;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -69,7 +69,7 @@ public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHan
         LOGGER.log(Level.INFO, "handleConflict, ex.getMessage: " + ex.getMessage());
 
         Response response = new Response("", "", "");
-        response.setMessage(ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED);
+        response.setMessage(TextUtil.OPERATION_COULD_NOT_BE_PERFORMED);
 
         HttpStatus resultStatus = HttpStatus.INTERNAL_SERVER_ERROR;
 
diff --git a/src/main/java/org/openepics/names/rest/controller/NamesController.java b/src/main/java/org/openepics/names/rest/controller/NamesController.java
index 5870cb1b..5ee006d6 100644
--- a/src/main/java/org/openepics/names/rest/controller/NamesController.java
+++ b/src/main/java/org/openepics/names/rest/controller/NamesController.java
@@ -32,8 +32,8 @@ import org.openepics.names.rest.beans.response.ResponseBooleanList;
 import org.openepics.names.rest.beans.response.ResponsePageNameElements;
 import org.openepics.names.service.NamesService;
 import org.openepics.names.service.exception.ServiceException;
-import org.openepics.names.util.ExceptionUtil;
 import org.openepics.names.util.LogUtil;
+import org.openepics.names.util.TextUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.http.HttpStatus;
@@ -202,7 +202,7 @@ public class NamesController implements INames {
         } catch (Exception e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
             LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
-            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
+            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
         }
     }
 
@@ -217,7 +217,7 @@ public class NamesController implements INames {
         } catch (Exception e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
             LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
-            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
+            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
         }
     }
 
@@ -232,7 +232,7 @@ public class NamesController implements INames {
         } catch (Exception e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
             LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
-            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
+            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
         }
     }
 
@@ -252,7 +252,7 @@ public class NamesController implements INames {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -260,9 +260,9 @@ public class NamesController implements INames {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
@@ -282,7 +282,7 @@ public class NamesController implements INames {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -290,9 +290,9 @@ public class NamesController implements INames {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
@@ -312,7 +312,7 @@ public class NamesController implements INames {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -320,9 +320,9 @@ public class NamesController implements INames {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
diff --git a/src/main/java/org/openepics/names/rest/controller/StructuresController.java b/src/main/java/org/openepics/names/rest/controller/StructuresController.java
index 31eb633b..9b708cb5 100644
--- a/src/main/java/org/openepics/names/rest/controller/StructuresController.java
+++ b/src/main/java/org/openepics/names/rest/controller/StructuresController.java
@@ -34,8 +34,8 @@ import org.openepics.names.rest.beans.response.ResponseBooleanList;
 import org.openepics.names.rest.beans.response.ResponsePageStructureElements;
 import org.openepics.names.service.StructuresService;
 import org.openepics.names.service.exception.ServiceException;
-import org.openepics.names.util.ExceptionUtil;
 import org.openepics.names.util.LogUtil;
+import org.openepics.names.util.TextUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.http.HttpStatus;
@@ -215,7 +215,7 @@ public class StructuresController implements IStructures {
         } catch (Exception e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
             LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
-            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
+            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
         }
     }
 
@@ -230,7 +230,7 @@ public class StructuresController implements IStructures {
         } catch (Exception e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
             LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
-            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
+            return new ResponseEntity<>(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED), Response.HEADER_JSON, HttpStatus.OK);
         }
     }
 
@@ -250,7 +250,7 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -258,9 +258,9 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
@@ -280,7 +280,7 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -288,9 +288,9 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
@@ -310,7 +310,7 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -318,9 +318,9 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
@@ -340,7 +340,7 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -348,9 +348,9 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
@@ -370,7 +370,7 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -378,9 +378,9 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
@@ -400,7 +400,7 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
                 responses.add(new ResponseBoolean(Boolean.FALSE, e.getMessage(), e.getDetails(), e.getField()));
             } catch (Exception e) {
@@ -408,9 +408,9 @@ public class StructuresController implements IStructures {
                 LogUtil.logStackTraceElements(LOGGER, Level.SEVERE, e);
                 if (response) {
                     response = false;
-                    reason = ExceptionUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
+                    reason = TextUtil.ONE_OR_MORE_ELEMENTS_ARE_NOT_CORRECT;
                 }
-                responses.add(new ResponseBoolean(Boolean.FALSE, ExceptionUtil.OPERATION_COULD_NOT_BE_PERFORMED));
+                responses.add(new ResponseBoolean(Boolean.FALSE, TextUtil.OPERATION_COULD_NOT_BE_PERFORMED));
             }
         }
         return new ResponseEntity<>(new ResponseBooleanList(responses, Boolean.valueOf(response), reason), Response.HEADER_JSON, HttpStatus.OK);
diff --git a/src/main/java/org/openepics/names/util/ExceptionUtil.java b/src/main/java/org/openepics/names/util/ExceptionUtil.java
index e754ff80..59f1f7a4 100644
--- a/src/main/java/org/openepics/names/util/ExceptionUtil.java
+++ b/src/main/java/org/openepics/names/util/ExceptionUtil.java
@@ -36,9 +36,6 @@ import org.openepics.names.service.exception.InputNotValidException;
  */
 public class ExceptionUtil {
 
-    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.";
-
     /**
      * This class is not to be instantiated.
      */
@@ -140,6 +137,7 @@ public class ExceptionUtil {
     /**
      * Create input not available exception.
      * Intended for communication inside server.
+     * Note that message is automatically generated if message is <tt>null</tt> and field <tt>not null</tt>.
      *
      * @param message message
      * @param details details
@@ -147,12 +145,17 @@ public class ExceptionUtil {
      * @return input not available exception
      */
     public static InputNotAvailableException createInputNotAvailableException(String message, String details, String field) {
-        return new InputNotAvailableException(message, details, field);
+        if (message == null && field != null) {
+            return new InputNotAvailableException(TextUtil.INPUT_NOT_AVAILABLE_FOR_FIELD, details, field);
+        } else {
+            return new InputNotAvailableException(message, details, field);
+        }
     }
 
     /**
      * Create input not correct exception.
      * Intended for communication inside server.
+     * Note that message is automatically generated if message is <tt>null</tt> and field <tt>not null</tt>.
      *
      * @param message message
      * @param details details
@@ -160,12 +163,17 @@ public class ExceptionUtil {
      * @return input not correct exception
      */
     public static InputNotCorrectException createInputNotCorrectException(String message, String details, String field) {
-        return new InputNotCorrectException(message, details, field);
+        if (message == null && field != null) {
+            return new InputNotCorrectException(TextUtil.INPUT_NOT_CORRECT_FOR_FIELD, details, field);
+        } else {
+            return new InputNotCorrectException(message, details, field);
+        }
     }
 
     /**
      * Create input not valid exception.
      * Intended for communication inside server.
+     * Note that message is automatically generated if message is <tt>null</tt> and field <tt>not null</tt>.
      *
      * @param message message
      * @param details details
@@ -173,7 +181,11 @@ public class ExceptionUtil {
      * @return input not valid exception
      */
     public static InputNotValidException createInputNotValidException(String message, String details, String field) {
-        return new InputNotValidException(message, details, field);
+        if (message == null && field != null) {
+            return new InputNotValidException(TextUtil.INPUT_NOT_VALID_FOR_FIELD, details, field);
+        } else {
+            return new InputNotValidException(message, details, field);
+        }
     }
 
     // ----------------------------------------------------------------------------------------------------
@@ -278,6 +290,7 @@ public class ExceptionUtil {
 
     /**
      * Validate condition and throw input not available exception if condition not <tt>true</tt>.
+     * Note that message is automatically generated if message is <tt>null</tt> and field <tt>not null</tt>.
      *
      * @param condition condition
      * @param message message
@@ -286,12 +299,17 @@ public class ExceptionUtil {
      */
     public static void validateConditionInputNotAvailableException(boolean condition, String message, String details, String field) {
         if (!condition) {
-            throw ExceptionUtil.createInputNotAvailableException(message, details, field);
+            if (message == null && field != null) {
+                throw ExceptionUtil.createInputNotAvailableException(TextUtil.INPUT_NOT_AVAILABLE_FOR_FIELD, details, field);
+            } else {
+                throw ExceptionUtil.createInputNotAvailableException(message, details, field);
+            }
         }
     }
 
     /**
      * Validate condition and throw input not correct exception if condition not <tt>true</tt>.
+     * Note that message is automatically generated if message is <tt>null</tt> and field <tt>not null</tt>.
      *
      * @param condition condition
      * @param message message
@@ -300,12 +318,17 @@ public class ExceptionUtil {
      */
     public static void validateConditionInputNotCorrectException(boolean condition, String message, String details, String field) {
         if (!condition) {
-            throw ExceptionUtil.createInputNotCorrectException(message, details, field);
+            if (message == null && field != null) {
+                throw ExceptionUtil.createInputNotCorrectException(TextUtil.INPUT_NOT_CORRECT_FOR_FIELD, details, field);
+            } else {
+                throw ExceptionUtil.createInputNotCorrectException(message, details, field);
+            }
         }
     }
 
     /**
      * Validate condition and throw input not valid exception if condition not <tt>true</tt>.
+     * Note that message is automatically generated if message is <tt>null</tt> and field <tt>not null</tt>.
      *
      * @param condition condition
      * @param message message
@@ -314,7 +337,11 @@ public class ExceptionUtil {
      */
     public static void validateConditionInputNotValidException(boolean condition, String message, String details, String field) {
         if (!condition) {
-            throw ExceptionUtil.createInputNotValidException(message, details, field);
+            if (message == null && field != null) {
+                throw ExceptionUtil.createInputNotValidException(TextUtil.INPUT_NOT_VALID_FOR_FIELD, details, field);
+            } else {
+                throw ExceptionUtil.createInputNotValidException(message, details, field);
+            }
         }
     }
 
diff --git a/src/main/java/org/openepics/names/util/TextUtil.java b/src/main/java/org/openepics/names/util/TextUtil.java
new file mode 100644
index 00000000..9ccea6e8
--- /dev/null
+++ b/src/main/java/org/openepics/names/util/TextUtil.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2022 European Spallation Source ERIC.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.openepics.names.util;
+
+/**
+ * Utility class to assist in handling of text.
+ *
+ * @author Lars Johansson
+ */
+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;
+
+    // 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";
+
+    // message
+
+    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.";
+
+    /**
+     * This class is not to be instantiated.
+     */
+    private TextUtil() {
+        throw new IllegalStateException("Utility class");
+    }
+
+}
diff --git a/src/main/java/org/openepics/names/util/ValidateUtil.java b/src/main/java/org/openepics/names/util/ValidateUtil.java
index 8dc233ff..7afc513e 100644
--- a/src/main/java/org/openepics/names/util/ValidateUtil.java
+++ b/src/main/java/org/openepics/names/util/ValidateUtil.java
@@ -50,6 +50,16 @@ public class ValidateUtil {
     //         parent system structure uuid (system group, system, subsystem)
     //         parent device structure uuid (device type)
     //
+    //     NameElement
+    //         uuid,
+    //         systemgroup, system, subsystem, devicetype, systemstructure, devicestructure,
+    //         index, name,
+    //         description, status, latest, deleted, when, who, comment
+    //     StructureElement
+    //         type, uuid, parent uuid,
+    //         name, mnemonic, mnemonic path, level,
+    //         description, status, latest, deleted, when, who, comment
+    //
     //     NameElementCommand
     //	       create -       parentsystemstructure, parentdevicestructure (optional), index, description, comment
     //	       update - uuid, parentsystemstructure, parentdevicestructure (optional), index, description, comment
@@ -62,36 +72,6 @@ public class ValidateUtil {
     private static enum NameChoice      {CREATE, UPDATE, DELETE};
     private static enum StructureChoice {CREATE, UPDATE, DELETE, APPROVE, REJECT, CANCEL};
 
-    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 SPACE                   = " ";
-
-    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";
-
-    // NameElement
-    //     uuid,
-    //     systemgroup, system, subsystem, devicetype, systemstructure, devicestructure,
-    //     index, name,
-    //     description, status, latest, deleted, when, who, comment
-    // StructureElement
-    //     type, uuid, parent uuid,
-    //     name, mnemonic, mnemonic path, level,
-    //     description, status, latest, deleted, when, who, comment
-
     /**
      * This class is not to be instantiated.
      */
@@ -107,7 +87,7 @@ public class ValidateUtil {
     public static void validateInputComment(String comment) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(comment),
-                "comment " + ValidateUtil.IS_NOT_AVAILABLE, comment, "comment");
+                null, comment, "comment");
     }
 
     /**
@@ -118,7 +98,7 @@ public class ValidateUtil {
     public static void validateInputDescription(String description) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(description),
-                "description " + ValidateUtil.IS_NOT_AVAILABLE, description, "description");
+                null, description, "description");
     }
 
     /**
@@ -129,7 +109,7 @@ public class ValidateUtil {
     public static void validateInputIndex(String index) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(index),
-                "index " + ValidateUtil.IS_NOT_AVAILABLE, index, "index");
+                null, index, "index");
     }
 
     /**
@@ -140,7 +120,7 @@ public class ValidateUtil {
     public static void validateInputMnemonic(String mnemonic) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(mnemonic),
-                "mnemonic " + ValidateUtil.IS_NOT_AVAILABLE, mnemonic, "mnemonic");
+                null, mnemonic, "mnemonic");
     }
 
     /**
@@ -151,7 +131,7 @@ public class ValidateUtil {
     public static void validateInputMnemonicpath(String mnemonicpath) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(mnemonicpath),
-                "mnemonicpath " + ValidateUtil.IS_NOT_AVAILABLE, mnemonicpath, "mnemonicpath");
+                null, mnemonicpath, "mnemonicpath");
     }
 
     /**
@@ -162,7 +142,7 @@ public class ValidateUtil {
     public static void validateInputName(String name) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(name),
-                "name " + ValidateUtil.IS_NOT_AVAILABLE, name, "name");
+                null, name, "name");
     }
 
     /**
@@ -183,12 +163,12 @@ public class ValidateUtil {
     public static void validateInputStatus(Status status, Status expected) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(status != null,
-                "status " + ValidateUtil.IS_NOT_AVAILABLE, null, "status");
+                null, null, "status");
 
         // expected status
         if (expected != null) {
             ExceptionUtil.validateConditionInputNotCorrectException(expected.equals(status),
-                    "status " + ValidateUtil.IS_NOT_CORRECT, status.toString(), "status");
+                    null, status.toString(), "status");
         }
     }
 
@@ -210,12 +190,12 @@ public class ValidateUtil {
     public static void validateInputType(Type type, Type expected) {
         // available
         ExceptionUtil.validateConditionInputNotAvailableException(type != null,
-                "type " + ValidateUtil.IS_NOT_AVAILABLE, null, "type");
+                null, null, "type");
 
         // expected type
         if (expected != null) {
             ExceptionUtil.validateConditionInputNotCorrectException(expected.equals(type),
-                    "type " + ValidateUtil.IS_NOT_CORRECT, type.toString(), "type");
+                    null, type.toString(), "type");
         }
     }
 
@@ -228,11 +208,11 @@ public class ValidateUtil {
         // available
         // correct
         ExceptionUtil.validateConditionInputNotAvailableException(!StringUtils.isEmpty(uuid),
-                "uuid " + ValidateUtil.IS_NOT_AVAILABLE, uuid, "uuid");
+                null, uuid, "uuid");
         try {
             UUID.fromString(uuid);
         } catch (IllegalArgumentException e) {
-            throw ExceptionUtil.createInputNotCorrectException("uuid " + ValidateUtil.IS_NOT_CORRECT, uuid, null);
+            throw ExceptionUtil.createInputNotCorrectException("uuid " + TextUtil.IS_NOT_CORRECT, uuid, null);
         }
     }
 
@@ -266,7 +246,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 " + ValidateUtil.ARE_NOT_CORRECT, "queryFields, queryValues with different lengths or empty", null);
+                "url and parameters " + TextUtil.ARE_NOT_CORRECT, "queryFields, queryValues with different lengths or empty", null);
 
         if (queryFields != null) {
             for (int i=0; i<queryFields.length; i++) {
@@ -329,15 +309,15 @@ public class ValidateUtil {
 
         if (!NameChoice.DELETE.equals(nameChoice)) {
             ExceptionUtil.validateConditionInputNotAvailableException(nameElement.getParentsystemstructure() != null,
-                    "parent system structure uuid " + ValidateUtil.IS_NOT_AVAILABLE, nameElement.toString(), "parentsystemstructure");
+                    null, nameElement.toString(), "parentsystemstructure");
 
             // optional (either none or both)
             //     parentdevicestructure
             // 	   index
             if (nameElement.getParentdevicestructure() != null && nameElement.getIndex() == null) {
-                throw ExceptionUtil.createInputNotCorrectException("index " + ValidateUtil.IS_NOT_CORRECT, nameElement.toString(), "index");
+                throw ExceptionUtil.createInputNotCorrectException(null, nameElement.toString(), "index");
             } else if (nameElement.getParentdevicestructure() == null && nameElement.getIndex() != null) {
-                throw ExceptionUtil.createInputNotCorrectException("parent device structure uuid " + ValidateUtil.IS_NOT_CORRECT, nameElement.toString(), "parentdevicestructure");
+                throw ExceptionUtil.createInputNotCorrectException(null, nameElement.toString(), "parentdevicestructure");
             }
 
             validateInputDescription(nameElement.getDescription());
@@ -421,7 +401,7 @@ public class ValidateUtil {
         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,
-                    ValidateUtil.NAME + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, nameElement.toString(), "uuid");
+                    TextUtil.NAME + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, nameElement.toString(), "uuid");
         }
 
         SystemGroup systemGroup = null;
@@ -459,25 +439,25 @@ public class ValidateUtil {
             if (nameElement.getParentdevicestructure() != null) {
                 countDevicestructureIndex++;
                 deviceType = holderIRepositories.getDeviceTypeRepository().findLatestByUuid(nameElement.getParentdevicestructure().toString());
-                ExceptionUtil.validateConditionDataNotAvailableException(deviceType != null, ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_AVAILABLE, nameElement.toString(), "parentdevicestructure");
-                ExceptionUtil.validateConditionDataDeletedException(!deviceType.isDeleted(), ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_DELETED, nameElement.toString(), "parentdevicestructure");
+                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");
             }
 
             // system structure
             if (systemGroup != null) {
-                ExceptionUtil.validateConditionDataDeletedException(!systemGroup.isDeleted(), ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure");
+                ExceptionUtil.validateConditionDataDeletedException(!systemGroup.isDeleted(), TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure");
 
                 derivedName = NameUtil.getName(systemGroup, deviceType, nameElement.getIndex(), holder);
             } else if (system != null) {
-                ExceptionUtil.validateConditionDataDeletedException(!system.isDeleted(), ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure");
+                ExceptionUtil.validateConditionDataDeletedException(!system.isDeleted(), TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure");
 
                 derivedName = NameUtil.getName(system, deviceType, nameElement.getIndex(), holder);
             } else if (subsystem != null) {
-                ExceptionUtil.validateConditionDataDeletedException(!subsystem.isDeleted(), ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure");
+                ExceptionUtil.validateConditionDataDeletedException(!subsystem.isDeleted(), TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_DELETED, nameElement.toString(), "parentsystemstructure");
 
                 derivedName = NameUtil.getName(subsystem, deviceType, nameElement.getIndex(), holder);
             } else {
-                throw ExceptionUtil.createDataNotCorrectException("system structure uuid " + IS_NOT_CORRECT, nameElement.toString(), null);
+                throw ExceptionUtil.createDataNotCorrectException("system structure uuid " + TextUtil.IS_NOT_CORRECT, nameElement.toString(), null);
             }
 
             // index
@@ -485,11 +465,11 @@ public class ValidateUtil {
                 countDevicestructureIndex++;
                 // TODO overrideRuleset depend on user authority
                 condition = namingConvention.isInstanceIndexValid(derivedName, false);
-                ExceptionUtil.validateConditionDataNotValidException(condition, "instance index " + ValidateUtil.IS_NOT_VALID, nameElement.toString(), "index");
+                ExceptionUtil.validateConditionDataNotValidException(condition, "instance index " + TextUtil.IS_NOT_VALID, nameElement.toString(), "index");
             }
 
             condition = countDevicestructureIndex == 0 || countDevicestructureIndex == 2;
-            ExceptionUtil.validateConditionDataNotAvailableException(condition, ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + "or instance index " + ValidateUtil.IS_NOT_AVAILABLE, nameElement.toString(), "parentdevicestructure");
+            ExceptionUtil.validateConditionDataNotAvailableException(condition, TextUtil.DEVICETYPE + TextUtil.SPACE + "or instance index " + TextUtil.IS_NOT_AVAILABLE, nameElement.toString(), "parentdevicestructure");
 
             // name
             //     ok with same name, name equivalence if same uuid
@@ -500,7 +480,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 " + ValidateUtil.EXISTS, nameElement.toString(), null);
+            ExceptionUtil.validateConditionDataExistException(condition, "convention name " + TextUtil.EXISTS, nameElement.toString(), null);
 
             names = nameRepository.readNames(false, FieldName.NAMEEQUIVALENCE, namingConvention.equivalenceClassRepresentative(derivedName));
             if (NameChoice.CREATE.equals(nameChoice)) {
@@ -509,7 +489,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 " + ValidateUtil.EXISTS, nameElement.toString(), null);
+            ExceptionUtil.validateConditionDataExistException(condition, "convention name equivalence " + TextUtil.EXISTS, nameElement.toString(), null);
         } else if (NameChoice.DELETE.equals(nameChoice)) {
             // n.a.
             //     uuid    - already handled
@@ -558,10 +538,10 @@ public class ValidateUtil {
             count++;
         }
         if (count > 2 || count < 1) {
-            throw ExceptionUtil.createDataNotCorrectException("system structure " + ValidateUtil.IS_NOT_CORRECT, name, null);
+            throw ExceptionUtil.createDataNotCorrectException("system structure " + TextUtil.IS_NOT_CORRECT, name, null);
         } else if (    (!StringUtils.isEmpty(sg) && !StringUtils.isEmpty(sys))
                     || (!StringUtils.isEmpty(sg) && !StringUtils.isEmpty(sub))) {
-            throw ExceptionUtil.createDataNotCorrectException("system structure " + ValidateUtil.IS_NOT_CORRECT, name, null);
+            throw ExceptionUtil.createDataNotCorrectException("system structure " + TextUtil.IS_NOT_CORRECT, name, null);
         }
 
         SystemGroup systemGroup = null;
@@ -589,30 +569,30 @@ public class ValidateUtil {
         // device structure
         if (!StringUtils.isEmpty(dt)) {
             deviceType = holderIRepositories.getDeviceTypeRepository().findLatestNotDeletedByMnemonic(dt);
-            ExceptionUtil.validateConditionDataNotAvailableException(deviceType != null, ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_AVAILABLE, name, null);
+            ExceptionUtil.validateConditionDataNotAvailableException(deviceType != null, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null);
         }
 
         // system structure
         if (!StringUtils.isEmpty(sg)) {
             systemGroup = holderIRepositories.getSystemGroupRepository().findLatestNotDeletedByMnemonic(sg);
-            ExceptionUtil.validateConditionDataNotAvailableException(systemGroup != null, ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_AVAILABLE, name, null);
+            ExceptionUtil.validateConditionDataNotAvailableException(systemGroup != null, TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null);
 
             derivedName = NameUtil.getName(systemGroup, deviceType, NamingConventionUtil.extractInstanceIndex(name), holder);
         } else {
             if (!StringUtils.isEmpty(sys)) {
                 system = holderIRepositories.getSystemRepository().findLatestNotDeletedByMnemonic(sys);
-                ExceptionUtil.validateConditionDataNotAvailableException(system != null, ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_AVAILABLE, name, null);
+                ExceptionUtil.validateConditionDataNotAvailableException(system != null, TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null);
 
                 derivedName = NameUtil.getName(system, deviceType, NamingConventionUtil.extractInstanceIndex(name), holder);
             } else {
                 throw ExceptionUtil.createDataNotAvailableException(
-                        ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_AVAILABLE, name, null);
+                        TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null);
             }
             // TODO is this condition correct?
-            ExceptionUtil.validateConditionDataNotAvailableException(system != null, ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_AVAILABLE, name, null);
+            ExceptionUtil.validateConditionDataNotAvailableException(system != null, TextUtil.SYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null);
             if (!StringUtils.isEmpty(sub)) {
                 subsystem = holderIRepositories.getSubsystemRepository().findLatestNotDeletedByParentAndMnemonic(system.getUuid().toString(), sub);
-                ExceptionUtil.validateConditionDataNotAvailableException(subsystem != null, ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_AVAILABLE, name, null);
+                ExceptionUtil.validateConditionDataNotAvailableException(subsystem != null, TextUtil.SUBSYSTEM + TextUtil.SPACE + TextUtil.IS_NOT_AVAILABLE, name, null);
 
                 derivedName = NameUtil.getName(subsystem, deviceType, NamingConventionUtil.extractInstanceIndex(name), holder);
             }
@@ -622,7 +602,7 @@ public class ValidateUtil {
         if (!StringUtils.isEmpty(idx)) {
             // TODO overrideRuleset depend on user authority
             condition = namingConvention.isInstanceIndexValid(name, false);
-            ExceptionUtil.validateConditionDataNotValidException(condition, "instance index " + ValidateUtil.IS_NOT_VALID, name, null);
+            ExceptionUtil.validateConditionDataNotValidException(condition, "instance index " + TextUtil.IS_NOT_VALID, name, null);
         }
 
         // name
@@ -630,15 +610,15 @@ public class ValidateUtil {
         //     convention name not exists
         //     convention name equivalence not exists
         condition = StringUtils.equals(name, derivedName);
-        ExceptionUtil.validateConditionDataNotCorrectException(condition, "convention name " + ValidateUtil.IS_NOT_CORRECT, name, null);
+        ExceptionUtil.validateConditionDataNotCorrectException(condition, "convention name " + TextUtil.IS_NOT_CORRECT, name, null);
 
         List<Name> names = nameRepository.readNames(false, FieldName.NAME, name);
         condition = names == null || names.isEmpty();
-        ExceptionUtil.validateConditionDataExistException(condition, "convention name " + ValidateUtil.EXISTS, name, null);
+        ExceptionUtil.validateConditionDataExistException(condition, "convention name " + TextUtil.EXISTS, name, null);
 
         names = nameRepository.readNames(false, FieldName.NAMEEQUIVALENCE, namingConvention.equivalenceClassRepresentative(name));
         condition = names == null || names.isEmpty();
-        ExceptionUtil.validateConditionDataExistException(condition, "convention name equivalence " + ValidateUtil.EXISTS, name, null);
+        ExceptionUtil.validateConditionDataExistException(condition, "convention name equivalence " + TextUtil.EXISTS, name, null);
     }
 
     // ----------------------------------------------------------------------------------------------------
@@ -675,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 " + ValidateUtil.ARE_NOT_CORRECT, "queryFields, queryValues with different lengths or empty", null);
+                "url and parameters " + TextUtil.ARE_NOT_CORRECT, "queryFields, queryValues with different lengths or empty", null);
 
         if (queryFields != null) {
             for (int i=0; i<queryFields.length; i++) {
@@ -769,7 +749,7 @@ public class ValidateUtil {
             switch (structureElement.getType()) {
                 case SYSTEM, SUBSYSTEM, DEVICEGROUP, DEVICETYPE:
                     ExceptionUtil.validateConditionInputNotAvailableException(structureElement.getParent() != null,
-                            "parent uuid " + ValidateUtil.IS_NOT_AVAILABLE, structureElement.toString(), "parent");
+                            "parent uuid " + TextUtil.IS_NOT_AVAILABLE, structureElement.toString(), "parent");
                     ValidateUtil.validateInputUuid(structureElement.getParent().toString());
                     break;
                 default:
@@ -783,7 +763,7 @@ public class ValidateUtil {
             //     validateMnemonic takes isMnemonicRequired into account
             MnemonicValidation mnemonicValidation = namingConvention.validateMnemonic(structureElement.getType(), structureElement.getMnemonic());
             ExceptionUtil.validateConditionInputNotValidException(MnemonicValidation.VALID.equals(mnemonicValidation),
-                    "mnemonic " + ValidateUtil.IS_NOT_VALID, structureElement.toString(), "mnemonic");
+                    "mnemonic " + TextUtil.IS_NOT_VALID, structureElement.toString(), "mnemonic");
 
             validateInputDescription(structureElement.getDescription());
         }
@@ -900,80 +880,80 @@ public class ValidateUtil {
                 // 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, ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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;
 
                 // 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, ValidateUtil.DISCIPLINE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.DISCIPLINE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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;
 
                 // 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, ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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;
 
                 // 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, ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                ExceptionUtil.validateConditionDataNotCorrectException(deviceTypes != null && deviceTypes.size() == 1, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
             }
         } 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, ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.DISCIPLINE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                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, ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
+                ExceptionUtil.validateConditionDataNotCorrectException(deviceTypes != null && deviceTypes.size() == 1, TextUtil.DEVICETYPE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT, structureElement.toString(), "uuid");
             }
         }
     }
@@ -1013,7 +993,7 @@ public class ValidateUtil {
                 // note rules for mnemonic for system group
                 if (!StringUtils.isEmpty(structureElement.getMnemonic())) {
                     List<SystemGroup> systemGroups = null;
-                    String message = ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                    String message = TextUtil.SYSTEMGROUP + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT;
 
                     // status, mnemonic
                     systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.PENDING, false, FieldStructure.MNEMONIC, structureElement.getMnemonic());
@@ -1037,12 +1017,12 @@ public class ValidateUtil {
                 String message = null;
 
                 // status, parent
-                message = ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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 = ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
@@ -1063,12 +1043,12 @@ public class ValidateUtil {
                 String message = null;
 
                 // status, parent
-                message = ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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 = ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
@@ -1085,7 +1065,7 @@ public class ValidateUtil {
                 validateConditionIfStructureChoice(StructureChoice.UPDATE, structureChoice, subsystems == null || subsystems.isEmpty() || subsystems.size() == 1 && subsystems.get(0).getUuid().equals(structureElement.getUuid()), message, details, "mnemonic");
             } else if (Type.DISCIPLINE.equals(structureElement.getType())) {
                 List<Discipline> disciplines = null;
-                String message = ValidateUtil.DISCIPLINE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                String message = TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT;
 
                 // status, mnemonic
                 disciplines = holderRepositories.getDisciplineRepository().readDisciplines(Status.PENDING, false, FieldStructure.MNEMONIC, structureElement.getMnemonic());
@@ -1107,14 +1087,14 @@ public class ValidateUtil {
                 String message = null;
 
                 // status, parent
-                message = ValidateUtil.DISCIPLINE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
 
                 // note rules for mnemonic for device group
 
                 // mnemonic
-                message = ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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;
@@ -1122,12 +1102,12 @@ public class ValidateUtil {
                 String message = null;
 
                 // status, parent
-                message = ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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 = ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
@@ -1147,7 +1127,7 @@ public class ValidateUtil {
             if (Type.SYSTEMGROUP.equals(structureElement.getType())) {
                 List<SystemGroup> toBeApproved = null;
                 List<SystemGroup> systemGroups = null;
-                String message = ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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());
@@ -1169,17 +1149,17 @@ public class ValidateUtil {
                 String message = null;
 
                 // to be approved - status, uuid
-                message = ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
 
                 // status, parent
-                message = ValidateUtil.SYSTEMGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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 = ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
@@ -1195,17 +1175,17 @@ public class ValidateUtil {
                 String message = null;
 
                 // to be approved - status, uuid
-                message = ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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 = ValidateUtil.SYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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 = ValidateUtil.SUBSYSTEM + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
@@ -1217,7 +1197,7 @@ public class ValidateUtil {
             } else if (Type.DISCIPLINE.equals(structureElement.getType())) {
                 List<Discipline> toBeApproved = null;
                 List<Discipline> disciplines = null;
-                String message = ValidateUtil.DISCIPLINE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                String message = TextUtil.DISCIPLINE + TextUtil.SPACE + TextUtil.IS_NOT_CORRECT;
 
                 // to be approved - status, uuid
                 toBeApproved = holderRepositories.getDisciplineRepository().readDisciplines(Status.PENDING, null, FieldStructure.UUID, structureElement.getUuid().toString());
@@ -1238,19 +1218,19 @@ public class ValidateUtil {
                 String message = null;
 
                 // to be approved - status, uuid
-                message = ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
 
                 // status, parent
-                message = ValidateUtil.DISCIPLINE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
 
                 // note rules for mnemonic for device group
 
                 // mnemonic
-                message = ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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;
@@ -1259,17 +1239,17 @@ public class ValidateUtil {
                 String message = null;
 
                 // to be approved - status, uuid
-                message = ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
 
                 // status, parent
-                message = ValidateUtil.DEVICEGROUP + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
 
                 // status, mnemonic
-                message = ValidateUtil.DEVICETYPE + ValidateUtil.SPACE + ValidateUtil.IS_NOT_CORRECT;
+                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");
@@ -1301,25 +1281,25 @@ public class ValidateUtil {
 
         String[] path = NamingConventionUtil.string2MnemonicPath(mnemonicpath);
         ExceptionUtil.validateConditionDataNotValidException(path != null && path.length >= 1 && path.length <= 2,
-                ValidateUtil.STRUCTURE + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path + ", " + mnemonicpath, null);
+                TextUtil.STRUCTURE + " mnemonic path " + TextUtil.IS_NOT_VALID, path + ", " + mnemonicpath, null);
         String mnemonicpathEquivalence = namingConvention.equivalenceClassRepresentative(mnemonicpath);
 
         if (Type.SYSTEMGROUP.equals(type)) {
-            ExceptionUtil.validateConditionDataNotValidException(path.length == 1, ValidateUtil.SYSTEMGROUP + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataNotValidException(path.length == 1, TextUtil.SYSTEMGROUP + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
 
             // system group may have empty path but there will be mnemonicpath in this context
 
             // mnemonic
             SystemGroup sg = holderIRepositories.getSystemGroupRepository().findLatestNotDeletedByMnemonic(path[0]);
-            ExceptionUtil.validateConditionDataConflictException(sg == null, ValidateUtil.SYSTEMGROUP + " mnemonic path duplicate", path[0] + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataConflictException(sg == null, TextUtil.SYSTEMGROUP + " mnemonic path duplicate", path[0] + ", " + mnemonicpath, null);
 
             // mnemonic equivalence
             List<SystemGroup> systemGroups = holderIRepositories.getSystemGroupRepository().findLatestNotDeleted();
             for (SystemGroup systemGroup : systemGroups) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(systemGroup.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])), ValidateUtil.SYSTEMGROUP + " mnemonic path equivalence duplicate", path[0] + ", " + mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(systemGroup.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])), TextUtil.SYSTEMGROUP + " mnemonic path equivalence duplicate", path[0] + ", " + mnemonicpath, null);
             }
         } else if (Type.SYSTEM.equals(type)) {
-            ExceptionUtil.validateConditionDataNotValidException(path.length == 1, ValidateUtil.SYSTEM + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataNotValidException(path.length == 1, TextUtil.SYSTEM + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
 
             // path with 1 element  - system group or  system ---> check both individually
             // check mnemonic, mnemonic equivalence
@@ -1327,90 +1307,90 @@ public class ValidateUtil {
             // mnemonic system group
             List<String> mnemonicPaths = StructureUtil.getMnemonicPathsSystemGroup(holder, false, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null);
             }
 
             // mnemonic path system group
             mnemonicPaths = StructureUtil.getMnemonicPathsSystemGroup(holder, true, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), ValidateUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null);
             }
 
             // mnemonic
             mnemonicPaths = StructureUtil.getMnemonicPathsSystem(holder, false, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null);
             }
 
             // mnemonic equivalence
             mnemonicPaths = StructureUtil.getMnemonicPathsSystem(holder, true, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), ValidateUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.SYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null);
             }
         } else if (Type.SUBSYSTEM.equals(type)) {
-            ExceptionUtil.validateConditionDataNotValidException(path.length == 2, ValidateUtil.SUBSYSTEM + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataNotValidException(path.length == 2, TextUtil.SUBSYSTEM + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
 
             System sys = holderIRepositories.getSystemRepository().findLatestNotDeletedByMnemonic(path[0]);
-            ExceptionUtil.validateConditionDataNotAvailableException(sys != null, ValidateUtil.SUBSYSTEM + " mnemonic path not available", path[0] + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataNotAvailableException(sys != null, TextUtil.SUBSYSTEM + " mnemonic path not available", path[0] + ", " + mnemonicpath, null);
             SystemGroup sg = holderIRepositories.getSystemGroupRepository().findLatestNotDeletedByUuid(sys.getParentUuid().toString());
 
             // mnemonic
-            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(path[0], path[1]), ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
+            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(path[0], path[1]), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
             if (!StringUtils.isEmpty(sg.getMnemonic())) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(sg.getMnemonic(), path[1]), ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(sg.getMnemonic(), path[1]), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
             }
 
             List<String> mnemonicPaths = StructureUtil.getMnemonicPathsSubsystem(holder, false, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
             }
 
             // mnemonic equivalence
-            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), ValidateUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null);
+            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), TextUtil.SYSTEM + " mnemonic path duplicate", mnemonicpath, null);
             if (!StringUtils.isEmpty(sg.getMnemonic())) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(sg.getMnemonic()), namingConvention.equivalenceClassRepresentative(path[1])), ValidateUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(sg.getMnemonic()), namingConvention.equivalenceClassRepresentative(path[1])), TextUtil.SUBSYSTEM + " mnemonic path duplicate", mnemonicpath, null);
             }
 
             mnemonicPaths = StructureUtil.getMnemonicPathsSubsystem(holder, true, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), ValidateUtil.SUBSYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.SUBSYSTEM + " mnemonic path equivalence duplicate", mnemonicpath, null);
             }
         } else if (Type.DISCIPLINE.equals(type)) {
-            ExceptionUtil.validateConditionDataNotValidException(path.length == 1, ValidateUtil.DISCIPLINE + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataNotValidException(path.length == 1, TextUtil.DISCIPLINE + " mnemonic path " + TextUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath, null);
 
             // mnemonic
             Discipline di = holderIRepositories.getDisciplineRepository().findLatestNotDeletedByMnemonic(path[0]);
-            ExceptionUtil.validateConditionDataConflictException(di == null, ValidateUtil.DISCIPLINE + " mnemonic path duplicate", path[0] + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataConflictException(di == null, TextUtil.DISCIPLINE + " mnemonic path duplicate", path[0] + ", " + mnemonicpath, null);
 
             // mnemonic equivalence
             List<Discipline> disciplines = holderIRepositories.getDisciplineRepository().findLatestNotDeleted();
             for (Discipline discipline : disciplines) {
                 ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(discipline.getMnemonicEquivalence(), namingConvention.equivalenceClassRepresentative(path[0])),
-                        ValidateUtil.DISCIPLINE + " mnemonic path equivalence duplicate", path[0] + ", " + mnemonicpath, null);
+                        TextUtil.DISCIPLINE + " mnemonic path equivalence duplicate", path[0] + ", " + mnemonicpath, null);
             }
         } else if (Type.DEVICEGROUP.equals(type)) {
-            throw ExceptionUtil.createDataNotValidException(ValidateUtil.DEVICEGROUP + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
+            throw ExceptionUtil.createDataNotValidException(TextUtil.DEVICEGROUP + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
         } else if (Type.DEVICETYPE.equals(type)) {
-            ExceptionUtil.validateConditionDataNotValidException(path.length == 2, ValidateUtil.STRUCTURE + " " + ValidateUtil.DEVICETYPE + " mnemonic path " + ValidateUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataNotValidException(path.length == 2, TextUtil.STRUCTURE + " " + TextUtil.DEVICETYPE + " mnemonic path " + TextUtil.IS_NOT_VALID, path.length + ", " + mnemonicpath, null);
 
             // discipline
             Discipline discipline = holderIRepositories.getDisciplineRepository().findLatestNotDeletedByMnemonic(path[0]);
-            ExceptionUtil.validateConditionDataNotValidException(discipline != null, ValidateUtil.DISCIPLINE + " " + ValidateUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath, null);
+            ExceptionUtil.validateConditionDataNotValidException(discipline != null, TextUtil.DISCIPLINE + " " + TextUtil.IS_NOT_VALID, path[0] + ", " + mnemonicpath, null);
 
             // mnemonic
-            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(path[0], path[1]), ValidateUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null);
+            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(path[0], path[1]), TextUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null);
 
             List<String> mnemonicPaths = StructureUtil.getMnemonicPathsDeviceType(holder, false, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), ValidateUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpath, existingPath), TextUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null);
             }
 
             // mnemonic equivalence
-            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), ValidateUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null);
+            ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(namingConvention.equivalenceClassRepresentative(path[0]), namingConvention.equivalenceClassRepresentative(path[1])), TextUtil.DEVICETYPE + " mnemonic path duplicate", mnemonicpath, null);
 
             mnemonicPaths = StructureUtil.getMnemonicPathsDeviceType(holder, true, namingConvention);
             for (String existingPath : mnemonicPaths) {
-                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), ValidateUtil.DEVICETYPE + " mnemonic path equivalence duplicate", mnemonicpath, null);
+                ExceptionUtil.validateConditionDataConflictException(!StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), TextUtil.DEVICETYPE + " mnemonic path equivalence duplicate", mnemonicpath, null);
             }
 
             // since device group is between discipline and device type and device group has no mnemonic,
diff --git a/src/test/java/org/openepics/names/util/ExceptionUtilTest.java b/src/test/java/org/openepics/names/util/ExceptionUtilTest.java
index 5b5ec63b..65936990 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 @@ public class ExceptionUtilTest {
     public void createInputNotCorrectException() {
         InputNotCorrectException exception = ExceptionUtil.createInputNotCorrectException(null, null, "3");
         assertNotNull(exception);
-        assertEquals(null, exception.getMessage());
+        assertEquals(TextUtil.INPUT_NOT_CORRECT_FOR_FIELD, 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 f86a5119..388724dd 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 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputComment(null);
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("comment is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals(null, e.getDetails());
             assertEquals("comment", e.getField());
             assertEquals(null, e.getCause());
@@ -62,7 +62,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputComment("");
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("comment is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals("", e.getDetails());
             assertEquals("comment", e.getField());
             assertEquals(null, e.getCause());
@@ -87,7 +87,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputDescription(null);
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("description is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals(null, e.getDetails());
             assertEquals("description", e.getField());
             assertEquals(null, e.getCause());
@@ -104,7 +104,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputDescription("");
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("description is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals("", e.getDetails());
             assertEquals("description", e.getField());
             assertEquals(null, e.getCause());
@@ -129,7 +129,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputMnemonic(null);
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("mnemonic is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals(null, e.getDetails());
             assertEquals("mnemonic", e.getField());
             assertEquals(null, e.getCause());
@@ -146,7 +146,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputMnemonic("");
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("mnemonic is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals("", e.getDetails());
             assertEquals("mnemonic", e.getField());
             assertEquals(null, e.getCause());
@@ -171,7 +171,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputName(null);
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("name is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals(null, e.getDetails());
             assertEquals("name", e.getField());
             assertEquals(null, e.getCause());
@@ -188,7 +188,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputName("");
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("name is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals("", e.getDetails());
             assertEquals("name", e.getField());
             assertEquals(null, e.getCause());
@@ -213,7 +213,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputType(null);
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("type is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals(null, e.getDetails());
             assertEquals("type", e.getField());
             assertEquals(null, e.getCause());
@@ -243,7 +243,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputUuid(null);
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("uuid is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals(null, e.getDetails());
             assertEquals("uuid", e.getField());
             assertEquals(null, e.getCause());
@@ -260,7 +260,7 @@ public class ValidateUtilTest {
             ValidateUtil.validateInputUuid("");
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("uuid is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals("", e.getDetails());
             assertEquals("uuid", e.getField());
             assertEquals(null, e.getCause());
@@ -342,7 +342,7 @@ public class ValidateUtilTest {
                     null, null);
             fail();
         } catch (InputNotAvailableException e) {
-            assertEquals("type is not available", e.getMessage());
+            assertEquals(TextUtil.INPUT_NOT_VALID_FOR_FIELD, e.getMessage());
             assertEquals(null, e.getCause());
         }
     }
-- 
GitLab