Task references: CICA-711
Reason: EISMAN Milestone 1 - technical proof of concept + fix Checkstyle-, FindBugs- & PMD-Warnings
Rationale: convert EISMAN to micro-service & connect EISMAN to CIM Cache v2.20
Side effects: none
diff --git a/.gitignore b/.gitignore
index d0413d7..11c7b3a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,16 +1,19 @@
 **/*target/
 **/*.checkstyle
 **/*.classpath
+**/*.fbExcludeFilterFile
+**/*.fbIncludeFilterFile
 **/*.idea
 **/*.iml
+**/*.jdbc
+**/*.log
 **/*.project
 **/*.settings/
 **/*.springBeans
-**/*.log
 **/*.versionsBackup
-**/*.fbExcludeFilterFile
-**/*.fbIncludeFilterFile
 **/launch.json
+**/node_modules/**
+**/package-lock.json
 bin/
 obj/
 .vs/
\ No newline at end of file
diff --git a/dev/src/main/java/org/eclipse/openk/common/array/ArrayUtilities.java b/dev/src/main/java/org/eclipse/openk/common/array/ArrayUtilities.java
index bf75c06..51f3dcb 100644
--- a/dev/src/main/java/org/eclipse/openk/common/array/ArrayUtilities.java
+++ b/dev/src/main/java/org/eclipse/openk/common/array/ArrayUtilities.java
@@ -15,11 +15,13 @@
 
 import java.lang.reflect.Array;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import org.eclipse.openk.common.collection.CollectionDefaults;
 import org.eclipse.openk.common.system.codestyle.Reason;
 import org.eclipse.openk.common.system.codestyle.SuppressWarningsReason;
+import org.eclipse.openk.common.value.Assertions;
 import org.eclipse.openk.common.value.ValueOutOfRangeException;
 import org.eclipse.openk.common.value.ValueUtilities;
 
@@ -2340,18 +2342,25 @@
    */
   public static <I> I[] toArray(I... values) {
 
-    return values;
+    I[] result;
+
+    if(!hasContent(values))
+      result = null;
+    else
+      result = values;
+
+    return result;
   }
 
   /**
-   * Converts the specified list into an array.
+   * Converts the specified collection into an array.
    * 
    * @param <I>
    *          the item type
    * @param itemType
    *          the item type
-   * @param list
-   *          the list; can be <code>null</code> or empty
+   * @param items
+   *          the items; can be <code>null</code> or empty
    * @return the array; can be <code>null</code> or empty
    * @throws IllegalArgumentException
    *           Is thrown in the following cases:
@@ -2359,20 +2368,20 @@
    *           <li><code>itemType</code> is <code>null</code></li>
    *           </ul>
    */
-  public static <I> I[] toArray(Class<I> itemType, List<I> list) throws IllegalArgumentException {
+  public static <I> I[] toArray(Class<I> itemType, Collection<I> items) throws IllegalArgumentException {
 
-    return ArrayUtilities.<I> toArray(itemType, list, false);
+    return ArrayUtilities.<I> toArray(itemType, items, false);
   }
 
   /**
-   * Converts the specified list into an array.
+   * Converts the specified collection into an array.
    * 
    * @param <I>
    *          the item type
    * @param itemType
    *          the item type
-   * @param list
-   *          the list; can be <code>null</code> or empty
+   * @param items
+   *          the items; can be <code>null</code> or empty
    * @param omitNull
    *          specifies if <code>null</code>-values will be omitted
    * @return the array; can be <code>null</code> or empty
@@ -2382,34 +2391,35 @@
    *           <li><code>itemType</code> is <code>null</code></li>
    *           </ul>
    */
-  public static <I> I[] toArray(Class<I> itemType, List<I> list, boolean omitNull) throws IllegalArgumentException {
+  public static <I> I[] toArray(Class<I> itemType, Collection<I> items, boolean omitNull) throws IllegalArgumentException {
 
-    if(itemType == null)
-      throw new IllegalArgumentException("itemType", new NullPointerException());
+    /* check preconditions */
+    {
+      Assertions.assertNotNull("itemType", itemType);
+    }
+
+    if(items == null)
+      return null;
     else {
-      if(list == null)
-        return null;
-      else {
-        List<I> tempList;
-        I[] tempResult;
+      List<I> tempList;
+      I[] tempResult;
 
-        if(omitNull) {
-          tempList = new ArrayList<>(list);
+      if(omitNull) {
+        tempList = new ArrayList<>(items);
 
-          for(int i = tempList.size() - 1; i >= 0; i--)
-            if(tempList.get(i) == null)
-              tempList.remove(i);
-        }
-        else
-          tempList = list;
-
-        tempResult = (I[]) Array.newInstance(itemType, tempList.size());
-
-        for(int i = 0; i < tempList.size(); i++)
-          tempResult[i] = tempList.get(i);
-
-        return tempResult;
+        for(int i = tempList.size() - 1; i >= 0; i--)
+          if(tempList.get(i) == null)
+            tempList.remove(i);
       }
+      else
+        tempList = (items instanceof List<?>) ? (List<I>) items : new ArrayList<>(items);
+
+      tempResult = (I[]) Array.newInstance(itemType, tempList.size());
+
+      for(int i = 0; i < tempList.size(); i++)
+        tempResult[i] = tempList.get(i);
+
+      return tempResult;
     }
   }
 
diff --git a/dev/src/main/java/org/eclipse/openk/common/collection/CollectionUtilities.java b/dev/src/main/java/org/eclipse/openk/common/collection/CollectionUtilities.java
index 87b872b..4939496 100644
--- a/dev/src/main/java/org/eclipse/openk/common/collection/CollectionUtilities.java
+++ b/dev/src/main/java/org/eclipse/openk/common/collection/CollectionUtilities.java
@@ -328,39 +328,65 @@
   }
 
   /**
-   * Returns the first element of the specified list.
+   * Returns the first element of the specified items.
    * 
    * @param <I>
    *          the item type
-   * @param list
-   *          the list; can be <code>null</code> or empty
+   * @param items
+   *          the items; can be <code>null</code> or empty
    * @return the first element<br/>
-   *         <code>null</code>, if the list is <code>null</code> or empty
+   *         <code>null</code>, if <code>items</code> is <code>null</code> or empty
    */
-  public static <I> I getFirst(List<I> list) {
+  public static <I> I getFirst(Collection<I> items) {
 
-    if((list == null) || list.isEmpty())
-      return null;
-    else
-      return list.get(0);
+    I result;
+
+    if((items == null) || items.isEmpty())
+      result = null;
+    else {
+      if(items instanceof List<?>)
+        result = ((List<I>) items).get(0);
+      else {
+        result = null;
+
+        for(I item : items) {
+          result = item;
+          break;
+        }
+      }
+    }
+
+    return result;
   }
 
   /**
-   * Returns the last element of the specified list.
+   * Returns the last element of the specified items.
    * 
    * @param <I>
    *          the item type
-   * @param list
-   *          the list; can be <code>null</code> or empty
+   * @param items
+   *          the items; can be <code>null</code> or empty
    * @return the last element<br/>
-   *         <code>null</code>, if the list is <code>null</code> or empty
+   *         <code>null</code>, if <code>items</code> is <code>null</code> or empty
    */
-  public static <I> I getLast(List<I> list) {
+  public static <I> I getLast(Collection<I> items) {
 
-    if((list == null) || list.isEmpty())
-      return null;
-    else
-      return list.get(list.size() - 1);
+    I result;
+
+    if((items == null) || items.isEmpty())
+      result = null;
+    else {
+      if(items instanceof List<?>)
+        result = ((List<I>) items).get(items.size() - 1);
+      else {
+        result = null;
+
+        for(I item : items)
+          result = item;
+      }
+    }
+
+    return result;
   }
 
   /**
@@ -455,6 +481,31 @@
    *          the items; can be <code>null</code> or empty
    * @return the list; can be <code>null</code> or empty
    */
+  public static <I> List<I> toList(Collection<I> items) {
+
+    List<I> result;
+
+    if(items == null)
+      result = null;
+    else {
+      if(items instanceof List<?>)
+        result = (List<I>) items;
+      else
+        result = new ArrayList<>(items);
+    }
+
+    return result;
+  }
+
+  /**
+   * Converts the specified items into a list.
+   * 
+   * @param <I>
+   *          the item type
+   * @param items
+   *          the items; can be <code>null</code> or empty
+   * @return the list; can be <code>null</code> or empty
+   */
   public static <I> List<I> toList(I... items) {
 
     if(items == null)
diff --git a/dev/src/main/java/org/eclipse/openk/common/date/DateUtilities.java b/dev/src/main/java/org/eclipse/openk/common/date/DateUtilities.java
index 07596a1..9c0bdad 100644
--- a/dev/src/main/java/org/eclipse/openk/common/date/DateUtilities.java
+++ b/dev/src/main/java/org/eclipse/openk/common/date/DateUtilities.java
@@ -13,6 +13,7 @@
  */
 package org.eclipse.openk.common.date;
 
+import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -71,6 +72,44 @@
   }
 
   /**
+   * Creates a clone of the specified {@link Date}-object.
+   * 
+   * @param value
+   *          the {@link Date}-object; can be <code>null</code>
+   * @return the result; can be <code>null</code>
+   */
+  public static Date createClone(Date value) {
+
+    Date result;
+
+    if(value == null)
+      result = null;
+    else
+      result = new Date(value.getTime());
+
+    return result;
+  }
+
+  /**
+   * Creates a clone of the specified {@link Timestamp}-object.
+   * 
+   * @param value
+   *          the {@link Timestamp}-object; can be <code>null</code>
+   * @return the result; can be <code>null</code>
+   */
+  public static Timestamp createClone(Timestamp value) {
+
+    Timestamp result;
+
+    if(value == null)
+      result = null;
+    else
+      result = new Timestamp(value.getTime());
+
+    return result;
+  }
+
+  /**
    * Creates a {@link DateFormat} in <b>UTC time</b> in the specified format.
    * 
    * @param pattern
diff --git a/dev/src/main/java/org/eclipse/openk/common/system/codestyle/Reason.java b/dev/src/main/java/org/eclipse/openk/common/system/codestyle/Reason.java
index 35d8fa6..0937201 100644
--- a/dev/src/main/java/org/eclipse/openk/common/system/codestyle/Reason.java
+++ b/dev/src/main/java/org/eclipse/openk/common/system/codestyle/Reason.java
@@ -46,8 +46,10 @@
   Checkstyle_UncriticalCyclomaticComplexityBecauseOfAdequateCommentsAndCodeStructure,
   Checkstyle_UncriticalJavaNcssInInitializations,
   Checkstyle_UncriticalMethodLengthInInitializations,
+  Checkstyle_UncriticalUseOfThrowableInTest,
   Java_NecessaryUsageOfRawType,
   Java_UncriticalHiding,
   Missing,
-  Other
+  Other,
+  Pmd_AbstractClassWithoutAnyMethodAllowedForModellingReasons
 }
\ No newline at end of file
diff --git a/dev/src/main/java/org/eclipse/openk/common/value/ValueDefaults.java b/dev/src/main/java/org/eclipse/openk/common/value/ValueDefaults.java
index 4c77330..53afeab 100644
--- a/dev/src/main/java/org/eclipse/openk/common/value/ValueDefaults.java
+++ b/dev/src/main/java/org/eclipse/openk/common/value/ValueDefaults.java
@@ -13,6 +13,8 @@
  */
 package org.eclipse.openk.common.value;
 
+import java.util.regex.Pattern;
+
 import org.eclipse.openk.common.string.StringDefaults;
 import org.eclipse.openk.common.system.codestyle.Reason;
 import org.eclipse.openk.common.system.codestyle.SuppressWarningsReason;
@@ -45,7 +47,10 @@
   public static final String REGEX_SIGNED_DECIMAL_VALUE_WITHOUT_LEADING_ZERO = "[0]|[-+]?[1-9][0-9]*";
   public static final String REGEX_UNSIGNED_DECIMAL_VALUE = "[0-9]+";
   public static final String REGEX_UNSIGNED_DECIMAL_VALUE_WITHOUT_LEADING_ZERO = "[0]|[1-9][0-9]*";
-  public static final String REGEX_UUID = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
+  public static final String REGEX_UUID = "^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$";
+
+  /* pattern */
+  public static final Pattern PATTERN_UUID = Pattern.compile(REGEX_UUID);
 
   // Constructors
   @SuppressWarnings("checkstyle:javadocmethod")
diff --git a/dev/src/main/java/org/eclipse/openk/common/value/ValueUtilities.java b/dev/src/main/java/org/eclipse/openk/common/value/ValueUtilities.java
index 36cc297..7744f3e 100644
--- a/dev/src/main/java/org/eclipse/openk/common/value/ValueUtilities.java
+++ b/dev/src/main/java/org/eclipse/openk/common/value/ValueUtilities.java
@@ -158,31 +158,85 @@
   }
 
   /**
+   * Returns a double-value between the specified minimum and maximum, inclusive.
+   * <p>
+   * <b><i>NOTE:</i></b><br/>
+   * It is assumed that
+   * <ul>
+   * <li><code>maximum</code> is greater or equal than <code>minimum</code></li>
+   * </ul>
+   * </p>
+   *
+   * @param minimum
+   *          the minimum
+   * @param maximum
+   *          the maximum
+   * @return the double-value between <code>minimum</code> and <code>maximum</code>, inclusive.
+   */
+  @SuppressWarnings("checkstyle:regexpsingleline")
+  @SuppressWarningsReason(reasons = Reason.Checkstyle_SystemTimeUsedForRandomizerInitialization)
+  public static double createRandomDouble(double minimum, double maximum) {
+
+    Random random = new Random(System.nanoTime());
+    double result;
+
+    result = (Math.max(0D, (maximum - minimum)) * random.nextDouble()) + minimum;
+
+    return result;
+  }
+
+  /**
+   * Returns an {@link Enum}-value using the specified {@link Enum}-type.
+   * 
+   * @param <E>
+   *          the {@link Enum}-type
+   * @param enumType
+   *          the {@link Enum}-type; can be <code>null</code>
+   * @return the {@link Enum}-value; <code>null</code> if <code>enumType</code> is <code>null</code>.
+   */
+  @SuppressWarnings("checkstyle:regexpsingleline")
+  @SuppressWarningsReason(reasons = Reason.Checkstyle_SystemTimeUsedForRandomizerInitialization)
+  public static <E extends Enum<E>> E createRandomEnumValue(Class<E> enumType) {
+
+    E result;
+
+    if(enumType == null)
+      result = null;
+    else {
+      int enumIndex = ValueUtilities.createRandomInt(0, enumType.getEnumConstants().length - 1);
+
+      result = enumType.getEnumConstants()[enumIndex];
+    }
+
+    return result;
+  }
+
+  /**
    * Returns an int-value between the specified minimum and maximum, inclusive.
-   * The difference between min and max can be<br/>
+   * The difference between min and maximum can be<br/>
    * <code>Integer.MAX_VALUE - 1</code>.
    * <p>
    * <b><i>NOTE:</i></b><br/>
    * It is assumed that
    * <ul>
-   * <li><code>maximum</code> is greater than <code>minimum</code></li>
+   * <li><code>maximum</code> is greater or equal than <code>minimum</code></li>
    * </ul>
    * </p>
    *
-   * @param min
+   * @param minimum
    *          the minimum
-   * @param max
-   *          the maximum; Must be greater than min.
-   * @return Integer between min and max, inclusive.
+   * @param maximum
+   *          the maximum
+   * @return the int-value between minimum and maximum, inclusive.
    */
   @SuppressWarnings("checkstyle:regexpsingleline")
   @SuppressWarningsReason(reasons = Reason.Checkstyle_SystemTimeUsedForRandomizerInitialization)
-  public static int createRandomInt(int min, int max) {
+  public static int createRandomInt(int minimum, int maximum) {
 
     Random random = new Random(System.nanoTime());
     int result;
 
-    result = random.nextInt((max - min) + 1) + min;
+    result = random.nextInt((maximum - minimum) + 1) + minimum;
 
     return result;
   }
diff --git a/dev/src/test/java/org/eclipse/openk/common/array/ArrayUtilitiesTest.java b/dev/src/test/java/org/eclipse/openk/common/array/ArrayUtilitiesTest.java
new file mode 100644
index 0000000..53d240d
--- /dev/null
+++ b/dev/src/test/java/org/eclipse/openk/common/array/ArrayUtilitiesTest.java
@@ -0,0 +1,61 @@
+/*
+ * -----------------------------------------------------------------------------
+ * 
+ * Copyright © 2015-2018 BTC AG - http://www.btc-ag.com
+ * 
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * 
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * -----------------------------------------------------------------------------
+ */
+package org.eclipse.openk.common.array;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.eclipse.openk.common.system.codestyle.Reason;
+import org.eclipse.openk.common.system.codestyle.SuppressWarningsReason;
+import org.eclipse.openk.common.test.IUnitTest;
+import org.junit.Test;
+
+/**
+ * The {@link ArrayUtilities} test.
+ * 
+ * @author 2018-11-29 Felix Korb
+ */
+@SuppressWarnings("checkstyle:multiplestringliterals")
+@SuppressWarningsReason(reasons = Reason.Checkstyle_MultipleStringsInTest)
+public final class ArrayUtilitiesTest implements IUnitTest {
+
+  // Tests
+  @Test
+  public void toArray_ifOptionalValuesAreNull_thenResultIsNull() {
+
+    String[] test = ArrayUtilities.toArray();
+
+    assertNull(test);
+  }
+
+  @Test
+  public void toArray_ifOptionalValuesAreEmptyButNotNull_thenResultIsNull() {
+
+    String[] test = ArrayUtilities.toArray(new String[0]);
+
+    assertNull(test);
+  }
+
+  @Test
+  public void toArray_ifOptionalValuesAreSet_thenTheArrayIsCreated() {
+
+    String[] test = ArrayUtilities.toArray("1", "2");
+
+    assertNotNull(test);
+    assertThat(test.length == 2);
+    assertThat("1".equals(test[0]));
+    assertThat("2".equals(test[1]));
+  }
+}
\ No newline at end of file
diff --git a/dev/src/test/java/org/eclipse/openk/common/value/ValueUtilitiesTest.java b/dev/src/test/java/org/eclipse/openk/common/value/ValueUtilitiesTest.java
new file mode 100644
index 0000000..5a840b2
--- /dev/null
+++ b/dev/src/test/java/org/eclipse/openk/common/value/ValueUtilitiesTest.java
@@ -0,0 +1,76 @@
+/*
+ * -----------------------------------------------------------------------------
+ * 
+ * Copyright © 2015-2018 BTC AG - http://www.btc-ag.com
+ * 
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * 
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * -----------------------------------------------------------------------------
+ */
+package org.eclipse.openk.common.value;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+
+import org.eclipse.openk.common.system.codestyle.Reason;
+import org.eclipse.openk.common.system.codestyle.SuppressWarningsReason;
+import org.eclipse.openk.common.test.IUnitTest;
+import org.junit.Test;
+
+/**
+ * The {@link ValueUtilities} test.
+ * 
+ * @author 2018-11-29 Felix Korb
+ */
+@SuppressWarnings("checkstyle:magicnumber")
+@SuppressWarningsReason(reasons = Reason.Checkstyle_MagicNumberInTest)
+public final class ValueUtilitiesTest implements IUnitTest {
+
+  // Tests
+  @Test
+  public void createRandomDouble_resultIsGreaterOrEqualThanMinimumAndLessOrEqualThanMaximum() {
+
+    double minimum = 1D;
+    double maximum = 10D;
+    double test = ValueUtilities.createRandomDouble(minimum, maximum);
+
+    assertThat(test >= minimum);
+    assertThat(test <= maximum);
+  }
+
+  @Test
+  public void createRandomEnum_resultIsNotNull() {
+
+    TestEnum test = ValueUtilities.createRandomEnumValue(TestEnum.class);
+
+    assertNotNull(test);
+  }
+
+  @Test
+  public void createRandomInt_resultIsGreaterOrEqualThanMinimumAndLessOrEqualThanMaximum() {
+
+    int minimum = 1;
+    int maximum = 10;
+    int test = ValueUtilities.createRandomInt(minimum, maximum);
+
+    assertThat(test >= minimum);
+    assertThat(test <= maximum);
+  }
+
+  // inner Classes
+  /**
+   * The auxiliary {@link Enum} to support some tests.
+   * 
+   * @author 2018-11-29 Felix Korb
+   */
+  private enum TestEnum {
+
+    Test1,
+    Test2,
+    Test3
+  }
+}
\ No newline at end of file