Merge branch 'dev'
diff --git a/build.gradle b/build.gradle
index 6d99206..8e1d5ae 100644
--- a/build.gradle
+++ b/build.gradle
@@ -21,4 +21,9 @@
 
 dependencies {
 	compile 'org.eclipse.mdm:org.eclipse.mdm.api.base:1.0.0'
+	
+	// testing
+    testCompile 'junit:junit:4.12'
+    testCompile 'org.mockito:mockito-core:2.10.0'
+    testCompile 'org.assertj:assertj-core:3.6.2'
 }
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/ApplicationContext.java b/src/main/java/org/eclipse/mdm/api/dflt/ApplicationContext.java
new file mode 100644
index 0000000..3d2537a
--- /dev/null
+++ b/src/main/java/org/eclipse/mdm/api/dflt/ApplicationContext.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2017 Peak Solution GmbH and others
+ * All rights reserved. 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.mdm.api.dflt;
+
+import org.eclipse.mdm.api.base.BaseApplicationContext;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+
+/**
+ * Extends the {@link BaseApplicationContext} interface to return {@link EntityFactory} 
+ * and {@link EntityManager}.
+ *
+ * @since 1.0.0
+ */
+public interface ApplicationContext extends BaseApplicationContext<EntityFactory, EntityManager> {
+
+}
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/ApplicationContextFactory.java b/src/main/java/org/eclipse/mdm/api/dflt/ApplicationContextFactory.java
new file mode 100644
index 0000000..b199726
--- /dev/null
+++ b/src/main/java/org/eclipse/mdm/api/dflt/ApplicationContextFactory.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2017 Peak Solution GmbH and others
+ * All rights reserved. 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.mdm.api.dflt;
+
+import org.eclipse.mdm.api.base.BaseApplicationContextFactory;
+
+/**
+ * Extends the {@link BaseApplicationContextFactory} interface to return an
+ * {@link ApplicationContext}.
+ *
+ * @since 1.0.0
+ */
+public interface ApplicationContextFactory extends BaseApplicationContextFactory<ApplicationContext> {
+
+}
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java b/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java
index ac126a7..b3207f6 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/EntityManager.java
@@ -17,7 +17,6 @@
 import org.eclipse.mdm.api.base.model.ContextType;
 import org.eclipse.mdm.api.base.model.Entity;
 import org.eclipse.mdm.api.base.query.DataAccessException;
-import org.eclipse.mdm.api.dflt.model.EntityFactory;
 import org.eclipse.mdm.api.dflt.model.Versionable;
 
 /**
@@ -27,20 +26,12 @@
  * @since 1.0.0
  * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
  */
-public interface EntityManager extends BaseEntityManager<EntityFactory> {
+public interface EntityManager extends BaseEntityManager {
 
 	// ======================================================================
 	// Public methods
 	// ======================================================================
 
-	// default Optional<Status> loadStatus(Class<? extends StatusAttachable>
-	// entityClass, String name)
-	// throws DataAccessException {
-	// return loadAllStatus(entityClass, name).stream()
-	// .filter(s -> s.nameMatches(name))
-	// .findAny();
-	// }
-
 	/**
 	 * Loads the entity identified by given entity class, {@link ContextType}
 	 * and its instance ID.
@@ -70,15 +61,6 @@
 	<T extends Entity> List<T> load(Class<T> entityClass, ContextType contextType, Collection<String> instanceIDs)
 			throws DataAccessException;
 	
-	// default List<Status> loadAllStatus(Class<? extends StatusAttachable>
-	// entityClass) throws DataAccessException {
-	// return loadAllStatus(entityClass, "*");
-	// }
-
-	// List<Status> loadAllStatus(Class<? extends StatusAttachable> entityClass,
-	// String pattern)
-	// throws DataAccessException;
-
 	/**
 	 * Loads all available entities of given type.
 	 *
@@ -105,16 +87,6 @@
 		return loadAll(entityClass, contextType, "*");
 	}
 
-	// default <T extends StatusAttachable> List<T> loadAll(Class<T>
-	// entityClass, Status status)
-	// throws DataAccessException {
-	// return loadAll(entityClass, status, "*");
-	// }
-
-	// <T extends StatusAttachable> List<T> loadAll(Class<T> entityClass, Status
-	// status, String pattern)
-	// throws DataAccessException;
-
 	/**
 	 * Loads all available entities of given type whose name fulfills the given
 	 * pattern.
@@ -185,15 +157,4 @@
 		return loadAll(entityClass, contextType, name).stream().filter(v -> v.nameEquals(name))
 				.filter(Versionable::isValid).max(Versionable.COMPARATOR);
 	}
-
-	// default <T extends StatusAttachable> List<T> loadChildren(Entity parent,
-	// Class<T> entityClass,
-	// Status status) throws DataAccessException {
-	// return loadChildren(parent, entityClass, status, "*");
-	// }
-
-	// <T extends StatusAttachable> List<T> loadChildren(Entity parent, Class<T>
-	// entityClass,
-	// Status status, String pattern) throws DataAccessException;
-
 }
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java
index cf2eb29..01304f2 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogAttribute.java
@@ -12,8 +12,8 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
 import org.eclipse.mdm.api.base.model.EnumRegistry;
@@ -59,9 +59,9 @@
 	public static final String ATTR_ACTION_REQUEST_CLASSNAME = "ActionRequestClassname";
 
 	/**
-	 * The <u>virtual</u> '{@literal @}EnumerationClass' attribute name.
+	 * The <u>virtual</u> '{@literal @}EnumerationName' attribute name.
 	 */
-	public static final String VATTR_ENUMERATION_CLASS = "@EnumerationClass";
+	public static final String VATTR_ENUMERATION_NAME = "@EnumerationName";
 
 	/**
 	 * The <u>virtual</u> '{@literal @}ScalarType' attribute name.
@@ -77,7 +77,7 @@
 	// Instance variables
 	// ======================================================================
 
-	private final Value enumerationClassValue;
+	private Enumeration<?> enumerationObj;
 	private final Value scalarTypeValue;
 	private final Value sequenceValue;
 
@@ -97,7 +97,11 @@
 		super(core);
 
 		Map<String, Value> values = core.getValues();
-		enumerationClassValue = values.remove(VATTR_ENUMERATION_CLASS);
+		EnumRegistry er = EnumRegistry.getInstance();
+		Value enumValue = values.remove(VATTR_ENUMERATION_NAME);
+		if (enumValue != null) {
+			enumerationObj = er.get(enumValue.extract(ValueType.STRING));
+		}
 		scalarTypeValue = values.remove(VATTR_SCALAR_TYPE);
 		sequenceValue = values.remove(VATTR_SEQUENCE);
 
@@ -243,8 +247,7 @@
 		if (!getValueType().isEnumerationType()) {
 			throw new IllegalStateException("Catalog attribute is not of type enumeration.");
 		}
-
-		return EnumRegistry.getInstance().get(enumerationClassValue.extract(ValueType.ENUMERATION).name());
+		return enumerationObj;
 	}
 
 	/**
@@ -281,9 +284,9 @@
 
 		sb.append(", Sequence = ").append((boolean) sequenceValue.extract());
 
-		Optional<Unit> unit = getUnit();
-		if (unit.isPresent()) {
-			sb.append(", Unit = ").append(unit.get());
+		Optional<Unit> catalogUnit = getUnit();
+		if (catalogUnit.isPresent()) {
+			sb.append(", Unit = ").append(catalogUnit.get());
 		}
 
 		sb.append(", ").append(getValues().values().stream().map(Value::toString).collect(Collectors.joining(", ")));
@@ -308,14 +311,14 @@
 	}
 
 	/**
-	 * Sets enumeration class of this catalog attribute.
+	 * Sets enumeration Object of this catalog attribute.
 	 *
-	 * @param enumerationValueClass
-	 *            The enumeration class.
+	 * @param enumerationObj
+	 *            The enumeration.
 	 */
-	void setEnumerationValueClass(Class<? extends EnumerationValue> enumerationValueClass) {
+	void setEnumerationObj(Enumeration<?> enumerationObj) {
 		setValueType(ValueType.ENUMERATION);
-		enumerationClassValue.set(enumerationValueClass.getName());
+		this.enumerationObj=enumerationObj;
 	}
 
 }
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java
index 7a3e89d..068e4e9 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogComponent.java
@@ -14,9 +14,9 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
 import org.eclipse.mdm.api.base.model.ContextType;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Datable;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java
index 377913a..f46f971 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/CatalogSensor.java
@@ -12,9 +12,9 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
 import org.eclipse.mdm.api.base.model.ContextType;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Datable;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java b/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java
index 4f5a0b2..802f954 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory.java
@@ -8,6 +8,8 @@
 

 package org.eclipse.mdm.api.dflt.model;

 

+import java.lang.reflect.Constructor;

+import java.lang.reflect.InvocationTargetException;

 import java.time.LocalDateTime;

 import java.util.Arrays;

 import java.util.HashSet;

@@ -16,14 +18,15 @@
 import java.util.Optional;

 import java.util.Set;

 

+import org.eclipse.mdm.api.base.adapter.Core;

+import org.eclipse.mdm.api.base.model.BaseEntity;

 import org.eclipse.mdm.api.base.model.BaseEntityFactory;

 import org.eclipse.mdm.api.base.model.ContextComponent;

 import org.eclipse.mdm.api.base.model.ContextRoot;

 import org.eclipse.mdm.api.base.model.ContextSensor;

 import org.eclipse.mdm.api.base.model.ContextType;

-import org.eclipse.mdm.api.base.model.Core;

 import org.eclipse.mdm.api.base.model.Entity;

-import org.eclipse.mdm.api.base.model.EnumerationValue;

+import org.eclipse.mdm.api.base.model.Enumeration;

 import org.eclipse.mdm.api.base.model.Measurement;

 import org.eclipse.mdm.api.base.model.ScalarType;

 import org.eclipse.mdm.api.base.model.Test;

@@ -56,11 +59,6 @@
 		throw new UnsupportedOperationException("Test requires a parent Pool.");

 	}

 

-	// @Override

-	// public TestStep createTestStep(String name, Test test) {

-	// throw new UnsupportedOperationException("Test step requires a status.");

-	// }

-

 	/**

 	 * Creates a new {@link Project}.

 	 *

@@ -90,8 +88,8 @@
 		Pool pool = new Pool(createCore(Pool.class));

 

 		// relations

-		getPermanentStore(pool).set(project);

-		getChildrenStore(project).add(pool);

+		getCore(pool).getPermanentStore().set(project);

+		getCore(project).getChildrenStore().add(pool);

 

 		// properties

 		pool.setName(name);

@@ -131,7 +129,7 @@
 		ContextRoot contextRoot = createContextRoot(templateRoot);

 

 		// relations

-		getMutableStore(testStep).set(contextRoot, templateRoot.getContextType());

+		getCore(testStep).getMutableStore().set(contextRoot, templateRoot.getContextType());

 

 		return contextRoot;

 	}

@@ -151,7 +149,7 @@
 		ContextRoot contextRoot = createContextRoot(templateRoot);

 

 		// relations

-		getMutableStore(measurement).set(contextRoot, templateRoot.getContextType());

+		getCore(measurement).getMutableStore().set(contextRoot, templateRoot.getContextType());

 

 		return contextRoot;

 	}

@@ -168,7 +166,7 @@
 		ContextRoot contextRoot = createContextRoot(templateRoot.getName(), templateRoot.getContextType());

 

 		// relations

-		getMutableStore(contextRoot).set(templateRoot);

+		getCore(contextRoot).getMutableStore().set(templateRoot);

 

 		// create default active and mandatory context components

 		templateRoot.getTemplateComponents().stream()

@@ -207,7 +205,7 @@
 						templateComponent.get().getCatalogComponent().getName(), contextRoot);

 

 				// relations

-				getMutableStore(contextComponent).set(templateComponent.get());

+				getCore(contextComponent).getMutableStore().set(templateComponent.get());

 

 				// properties

 				contextComponent.setName(name);

@@ -255,7 +253,7 @@
 					contextComponent);

 

 			// relations

-			getMutableStore(contextSensor).set(templateSensor.get());

+			getCore(contextSensor).getMutableStore().set(templateSensor.get());

 

 			// properties

 			contextSensor.setName(name);

@@ -356,8 +354,8 @@
 				createCore(CatalogAttribute.class, catalogComponent.getContextType()));

 

 		// relations

-		getPermanentStore(catalogAttribute).set(catalogComponent);

-		getChildrenStore(catalogComponent).add(catalogAttribute);

+		getCore(catalogAttribute).getPermanentStore().set(catalogComponent);

+		getCore(catalogComponent).getChildrenStore().add(catalogAttribute);

 

 		// properties

 		catalogAttribute.setName(name);

@@ -373,8 +371,8 @@
 	 *

 	 * @param name

 	 *            Name of the created {@code CatalogAttribute}.

-	 * @param enumerationValueClass

-	 *            The enumeration class.

+	 * @param enumerationObject

+	 *            The enumeration.

 	 * @param catalogComponent

 	 *            The parent {@code CatalogComponent}.

 	 * @return The created {@code CatalogAttribute} is returned.

@@ -382,10 +380,10 @@
 	 *             Thrown if given name is already in use or not allowed or

 	 *             given enumeration class is not supported.

 	 */

-	public CatalogAttribute createCatalogAttribute(String name, Class<? extends EnumerationValue> enumerationValueClass,

+	public CatalogAttribute createCatalogAttribute(String name, Enumeration<?> enumerationObj,

 			CatalogComponent catalogComponent) {

 		validateCatalogName(name, true);

-		validateEnum(enumerationValueClass);

+		validateEnum(enumerationObj);

 		if (catalogComponent.getCatalogAttribute(name).isPresent()) {

 			throw new IllegalArgumentException("Catalog attribute with name '" + name + "' already exists.");

 		}

@@ -394,151 +392,17 @@
 				createCore(CatalogAttribute.class, catalogComponent.getContextType()));

 

 		// relations

-		getPermanentStore(catalogAttribute).set(catalogComponent);

-		getChildrenStore(catalogComponent).add(catalogAttribute);

+		getCore(catalogAttribute).getPermanentStore().set(catalogComponent);

+		getCore(catalogComponent).getChildrenStore().add(catalogAttribute);

 

 		// properties

 		catalogAttribute.setName(name);

-		catalogAttribute.setEnumerationValueClass(enumerationValueClass);

+		catalogAttribute.setEnumerationObj(enumerationObj);

 		catalogAttribute.setSortIndex(nextIndex(catalogComponent.getCatalogAttributes()));

 

 		return catalogAttribute;

 	}

 

-	// public CatalogSensor createCatalogSensor(String name, CatalogComponent

-	// catalogComponent) {

-	// validateCatalogName(name, false);

-	//

-	// if(!catalogComponent.getContextType().isTestEquipment()) {

-	// throw new IllegalArgumentException("Catalog component is not of type

-	// 'TESTEQUIPMENT'");

-	// } else if(catalogComponent.getCatalogSensor(name).isPresent()) {

-	// throw new IllegalArgumentException("Catalog sensor with name '" + name +

-	// "' already exists.");

-	// }

-	//

-	// CatalogSensor catalogSensor = new

-	// CatalogSensor(createCore(CatalogSensor.class));

-	//

-	// // relations

-	// getPermanentStore(catalogSensor).set(catalogComponent);

-	// getChildrenStore(catalogComponent).add(catalogSensor);

-	//

-	// // properties

-	// catalogSensor.setName(name);

-	// catalogSensor.setDateCreated(LocalDateTime.now());

-	//

-	// return catalogSensor;

-	// }

-	//

-	//

-	// /**

-	// * Creates a new {@link CatalogAttribute} for given {@link

-	// CatalogComponent}.

-	// * The {@link ValueType} may be one of the following:

-	// *

-	// * <ul>

-	// * <li>{@link ValueType#STRING}</li>

-	// * <li>{@link ValueType#STRING_SEQUENCE}</li>

-	// * <li>{@link ValueType#DATE}</li>

-	// * <li>{@link ValueType#DATE_SEQUENCE}</li>

-	// * <li>{@link ValueType#BOOLEAN}</li>

-	// * <li>{@link ValueType#BOOLEAN_SEQUENCE}</li>

-	// * <li>{@link ValueType#BYTE}</li>

-	// * <li>{@link ValueType#BYTE_SEQUENCE}</li>

-	// * <li>{@link ValueType#SHORT}</li>

-	// * <li>{@link ValueType#SHORT_SEQUENCE}</li>

-	// * <li>{@link ValueType#INTEGER}</li>

-	// * <li>{@link ValueType#INTEGER_SEQUENCE}</li>

-	// * <li>{@link ValueType#LONG}</li>

-	// * <li>{@link ValueType#LONG_SEQUENCE}</li>

-	// * <li>{@link ValueType#FLOAT}</li>

-	// * <li>{@link ValueType#FLOAT_SEQUENCE}</li>

-	// * <li>{@link ValueType#DOUBLE}</li>

-	// * <li>{@link ValueType#DOUBLE_SEQUENCE}</li>

-	// * <li>{@link ValueType#BYTE_STREAM}</li>

-	// * <li>{@link ValueType#BYTE_STREAM_SEQUENCE}</li>

-	// * <li>{@link ValueType#FLOAT_COMPLEX}</li>

-	// * <li>{@link ValueType#FLOAT_COMPLEX_SEQUENCE}</li>

-	// * <li>{@link ValueType#DOUBLE_COMPLEX}</li>

-	// * <li>{@link ValueType#DOUBLE_COMPLEX_SEQUENCE}</li>

-	// * <li>{@link ValueType#FILE_LINK}</li>

-	// * <li>{@link ValueType#FILE_LINK_SEQUENCE_SEQUENCE}</li>

-	// * </ul>

-	// *

-	// *

-	// * @param name Name of the created {@code CatalogAttribute}.

-	// * @param valueType The {@code ValueType}.

-	// * @param catalogSensor The parent {@code CatalogSensor}.

-	// * @return The created {@code CatalogAttribute} is returned.

-	// * @throws IllegalArgumentException Thrown if given name is already in use

-	// * or given {@code ValueType} is not supported.

-	// */

-	// public CatalogAttribute createCatalogAttribute(String name, ValueType

-	// valueType, CatalogSensor catalogSensor) {

-	// validateCatalogName(name, true);

-	//

-	// if(catalogSensor.getCatalogAttribute(name).isPresent()) {

-	// throw new IllegalArgumentException("Catalog attribute with name '" + name

-	// + "' already exists.");

-	// } else if(valueType.isEnumerationType() || valueType.isByteStreamType()

-	// ||

-	// valueType.isUnknown() || valueType.isBlob()) {

-	// throw new IllegalArgumentException("Value type '" + valueType + "' is not

-	// allowed.");

-	// }

-	//

-	// CatalogAttribute catalogAttribute = new

-	// CatalogAttribute(createCore(CatalogAttribute.class));

-	//

-	// // relations

-	// getPermanentStore(catalogAttribute).set(catalogSensor);

-	// getChildrenStore(catalogSensor).add(catalogAttribute);

-	//

-	// // properties

-	// catalogAttribute.setName(name);

-	// catalogAttribute.setValueType(valueType);

-	// catalogAttribute.setSortIndex(nextIndex(catalogSensor.getCatalogAttributes()));

-	//

-	// return catalogAttribute;

-	// }

-	//

-	// /**

-	// * Creates a new {@link CatalogAttribute} for given {@link

-	// CatalogComponent}.

-	// *

-	// * @param name Name of the created {@code CatalogAttribute}.

-	// * @param enumerationClass The enumeration class.

-	// * @param catalogSensor The parent {@code CatalogSensor}.

-	// * @return The created {@code CatalogAttribute} is returned.

-	// * @throws IllegalArgumentException Thrown if given name is already in use

-	// * or not allowed or given enumeration class is not supported.

-	// */

-	// public CatalogAttribute createCatalogAttribute(String name, Class<?

-	// extends Enum<?>> enumerationClass,

-	// CatalogSensor catalogSensor) {

-	// validateCatalogName(name, true);

-	// validateEnum(enumerationClass);

-	// if(catalogSensor.getCatalogAttribute(name).isPresent()) {

-	// throw new IllegalArgumentException("Catalog attribute with name '" + name

-	// + "' already exists.");

-	// }

-	//

-	// CatalogAttribute catalogAttribute = new

-	// CatalogAttribute(createCore(CatalogAttribute.class));

-	//

-	// // relations

-	// getPermanentStore(catalogAttribute).set(catalogSensor);

-	// getChildrenStore(catalogSensor).add(catalogAttribute);

-	//

-	// // properties

-	// catalogAttribute.setName(name);

-	// catalogAttribute.setEnumerationClass(enumerationClass);

-	// catalogAttribute.setSortIndex(nextIndex(catalogSensor.getCatalogAttributes()));

-	//

-	// return catalogAttribute;

-	// }

-

 	/**

 	 * Creates a new {@link TemplateRoot} with given {@link ContextType} and

 	 * name.

@@ -589,9 +453,9 @@
 				createCore(TemplateComponent.class, templateRoot.getContextType()));

 

 		// relations

-		getPermanentStore(templateComponent).set(templateRoot);

-		getMutableStore(templateComponent).set(catalogComponent);

-		getChildrenStore(templateRoot).add(templateComponent);

+		getCore(templateComponent).getPermanentStore().set(templateRoot);

+		getCore(templateComponent).getMutableStore().set(catalogComponent);

+		getCore(templateRoot).getChildrenStore().add(templateComponent);

 

 		// properties

 		templateComponent.setName(name);

@@ -635,9 +499,9 @@
 				createCore(TemplateComponent.class, templateRoot.getContextType()));

 

 		// relations

-		getPermanentStore(templateComponent).set(partentComponentTemplate);

-		getMutableStore(templateComponent).set(catalogComponent);

-		getChildrenStore(partentComponentTemplate).add(templateComponent);

+		getCore(templateComponent).getPermanentStore().set(partentComponentTemplate);

+		getCore(templateComponent).getMutableStore().set(catalogComponent);

+		getCore(partentComponentTemplate).getChildrenStore().add(templateComponent);

 

 		// properties

 		templateComponent.setName(name);

@@ -676,9 +540,9 @@
 					createCore(TemplateAttribute.class, catalogComponent.getContextType()));

 

 			// relations

-			getPermanentStore(templateAttribute).set(templateComponent);

-			getMutableStore(templateAttribute).set(catalogAttribute.get());

-			getChildrenStore(templateComponent).add(templateAttribute);

+			getCore(templateAttribute).getPermanentStore().set(templateComponent);

+			getCore(templateAttribute).getMutableStore().set(catalogAttribute.get());

+			getCore(templateComponent).getChildrenStore().add(templateAttribute);

 

 			// properties

 			templateAttribute.setName(name);

@@ -753,9 +617,9 @@
 				createCore(TemplateTestStepUsage.class));

 

 		// relations

-		getPermanentStore(templateTestStepUsage).set(templateTest);

-		getMutableStore(templateTestStepUsage).set(templateTestStep);

-		getChildrenStore(templateTest).add(templateTestStepUsage);

+		getCore(templateTestStepUsage).getPermanentStore().set(templateTest);

+		getCore(templateTestStepUsage).getMutableStore().set(templateTestStep);

+		getCore(templateTest).getChildrenStore().add(templateTestStepUsage);

 

 		// properties

 		templateTestStepUsage.setName(name);

@@ -800,8 +664,8 @@
 		ValueListValue valueListValue = new ValueListValue(createCore(ValueListValue.class));

 

 		// relations

-		getPermanentStore(valueListValue).set(valueList);

-		getChildrenStore(valueList).add(valueListValue);

+		getCore(valueListValue).getPermanentStore().set(valueList);

+		getCore(valueList).getChildrenStore().add(valueListValue);

 

 		// properties

 		valueListValue.setName(name);

@@ -842,7 +706,7 @@
 		Test test = createTest(name, pool, statusTest);

 

 		// relations

-		getMutableStore(test).set(templateTest);

+		getCore(test).getMutableStore().set(templateTest);

 

 		// create default active and mandatory test steps according to the

 		// template

@@ -870,8 +734,8 @@
 		Test test = super.createTest(name);

 

 		// relations

-		getPermanentStore(test).set(pool);

-		getChildrenStore(pool).add(test);

+		getCore(test).getPermanentStore().set(pool);

+		getCore(pool).getChildrenStore().add(test);

 

 		if (status != null) {

 			status.assign(test);

@@ -919,7 +783,7 @@
 		TestStep testStep = createTestStep(templateTestStep.getName(), test, status);

 

 		// relations

-		getMutableStore(testStep).set(templateTestStep);

+		getCore(testStep).getMutableStore().set(templateTestStep);

 

 		// create initial context roots

 		templateTestStep.getTemplateRoots().forEach(templateRoot -> createContextRoot(testStep, templateRoot));

@@ -948,17 +812,34 @@
 

 		return testStep;

 	}

+	

+	/**

+	 * {@inheritDoc}

+	 */

+	@Override

+	protected <T extends BaseEntity> T createBaseEntity(Class<T> clazz, Core core) {

+		try {

+			Constructor<T> constructor = clazz.getDeclaredConstructor(Core.class);

+			try {

+				return constructor.newInstance(core);

+			} catch (IllegalAccessException exc) {

+				return super.createBaseEntity(clazz, core);

+			}

+		} catch (NoSuchMethodException | InvocationTargetException | InstantiationException exc) {

+			throw new IllegalStateException(exc.getMessage(), exc);

+		}

+	}

 

 	/**

-	 * Checks whether given enumeration class is defined in the application

+	 * Checks whether given enumeration is defined in the application

 	 * model or not.

 	 *

-	 * @param enumClass

+	 * @param enumerationObj

 	 *            The checked enumeration class.

 	 * @throws IllegalArgumentException

 	 *             Thrown if given enumeration class is not supported.

 	 */

-	protected abstract void validateEnum(Class<? extends EnumerationValue> enumClass);

+	protected abstract void validateEnum(Enumeration<?> enumerationObj);

 

 	// ======================================================================

 	// Private methods

@@ -975,7 +856,7 @@
 	 *             Thrown if given name is not allowed.

 	 */

 	private static void validateCatalogName(String name, boolean isAttributeName) {

-		if (name == null || name.isEmpty() || name.length() > 30) {

+		if (!isValidCatalogName(name)) {

 			throw new IllegalArgumentException(

 					"A catalog name is not allowed to be empty and " + "must not exceed 30 characters.");

 		} else if (name.toLowerCase(Locale.ROOT).startsWith("ao")) {

@@ -988,6 +869,17 @@
 					"A catalog attribute name is not allowed to be " + "'id', 'name' or 'mimetype' (case ignored).");

 		}

 	}

+	

+	/**

+	 * Checks whether given catalog name is valid

+	 *

+	 * @param name

+	 *            The checked name.

+	 * @return Returns {@code true} if name is a valid catalog name

+	 */

+	private static boolean isValidCatalogName(String name) {

+		return name != null && !name.isEmpty() && name.length() <= 30;

+	}

 

 	/**

 	 * Hides {@link Value} containers missing in the templates.

diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java b/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java
index 1b9e4ad..2682598 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/Pool.java
@@ -1,7 +1,7 @@
 package org.eclipse.mdm.api.dflt.model;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Test;
 
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java b/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java
index b338d88..479e64f 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/Project.java
@@ -1,7 +1,7 @@
 package org.eclipse.mdm.api.dflt.model;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 
 /**
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java b/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java
index cd96a42..d29e5ae 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/Status.java
@@ -11,8 +11,8 @@
 import java.util.List;
 import java.util.Optional;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Describable;
 import org.eclipse.mdm.api.base.model.StatusAttachable;
 import org.eclipse.mdm.api.base.model.Test;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java
index caa4b85..56411fe 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateAttribute.java
@@ -14,7 +14,9 @@
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -23,8 +25,8 @@
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.DoubleComplex;
 import org.eclipse.mdm.api.base.model.Enumeration;
@@ -74,6 +76,22 @@
 	 */
 	public static final String ATTR_OPTIONAL = "Obligatory";
 
+	private static final Map<ValueType<?>, Function<String, Object>> VALUETYPE_FUNCTION_MAP = new HashMap<>();
+
+	static {
+		VALUETYPE_FUNCTION_MAP.put(ValueType.STRING, v -> v);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.DATE, v -> LocalDateTime.parse(v, Value.LOCAL_DATE_TIME_FORMATTER));
+		VALUETYPE_FUNCTION_MAP.put(ValueType.BOOLEAN, Boolean::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.BYTE, Byte::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.SHORT, Short::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.INTEGER, Integer::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.LONG, Long::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.FLOAT, Float::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.DOUBLE, Double::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.FLOAT_COMPLEX, FloatComplex::valueOf);
+		VALUETYPE_FUNCTION_MAP.put(ValueType.DOUBLE_COMPLEX, DoubleComplex::valueOf);
+	}
+
 	// ======================================================================
 	// Constructors
 	// ======================================================================
@@ -105,7 +123,8 @@
 		String value = defaultValue.extract();
 		if (valueType.isEnumerationType()) {
 			Enumeration enumObject = getCatalogAttribute().getEnumerationObject();
-			return valueType.create(getName(), "", isValid, isValid ? enumObject.valueOf(value) : null, enumObject.getName());
+			return valueType.create(getName(), "", isValid, isValid ? enumObject.valueOf(value) : null,
+					enumObject.getName());
 		} else {
 			return valueType.create(getName(), isValid ? parse(value, valueType) : null);
 		}
@@ -132,25 +151,7 @@
 
 		String stringValue;
 		if (valueType.isFileLinkType()) {
-			FileLink[] values = sequence ? value.extract() : new FileLink[] { value.extract() };
-			stringValue = Stream.of(values).map(fl -> {
-				StringBuilder sb = new StringBuilder();
-				if (fl.getDescription().isEmpty()) {
-					sb.append(FileLinkParser.NO_DESC_MARKER);
-				} else {
-					sb.append(fl.getDescription());
-				}
-				sb.append('[').append(fl.getMimeType()).append(',');
-				if (fl.isRemote()) {
-					sb.append(fl.getRemotePath());
-				} else if (fl.isLocal()) {
-					sb.append(FileLinkParser.LOCAL_MARKER).append(fl.getLocalPath());
-				} else {
-					throw new IllegalStateException("File link is neither in local nor remote state: " + fl);
-				}
-
-				return sb.append(']');
-			}).collect(Collectors.joining(","));
+			stringValue = getStringValueForFileLinkType(value, sequence);
 		} else if (valueType.isDateType()) {
 			LocalDateTime[] values = sequence ? value.extract() : new LocalDateTime[] { value.extract() };
 			stringValue = Stream.of(values).map(ldt -> ldt.format(Value.LOCAL_DATE_TIME_FORMATTER))
@@ -311,34 +312,10 @@
 	 *             Thrown if a corresponding {@code String} is not supported.
 	 */
 	private static Function<String, Object> getParser(ValueType<?> valueType) {
-		Function<String, Object> converter;
-
-		if (valueType.isString()) {
-			converter = v -> v;
-		} else if (valueType.isDate()) {
-			converter = v -> LocalDateTime.parse(v, Value.LOCAL_DATE_TIME_FORMATTER);
-		} else if (valueType.isBoolean()) {
-			converter = Boolean::valueOf;
-		} else if (valueType.isByte()) {
-			converter = Byte::valueOf;
-		} else if (valueType.isShort()) {
-			converter = Short::valueOf;
-		} else if (valueType.isInteger()) {
-			converter = Integer::valueOf;
-		} else if (valueType.isLong()) {
-			converter = Long::valueOf;
-		} else if (valueType.isFloat()) {
-			converter = Float::valueOf;
-		} else if (valueType.isDouble()) {
-			converter = Double::valueOf;
-		} else if (valueType.isFloatComplex()) {
-			converter = FloatComplex::valueOf;
-		} else if (valueType.isDoubleComplex()) {
-			converter = DoubleComplex::valueOf;
-		} else {
+		Function<String, Object> converter = VALUETYPE_FUNCTION_MAP.get(valueType);
+		if (converter == null) {
 			throw new IllegalArgumentException("String conversion for value type '" + valueType + "' not supported.");
 		}
-
 		return converter;
 	}
 
@@ -403,4 +380,34 @@
 
 	}
 
+	/**
+	 * Get string value for FileLinkType
+	 *
+	 * @param value
+	 *            The {@code Value} value.
+	 * @param sequence
+	 *            The {@code boolean} sequence.
+	 * @return Return {@code String} string value for FileLinkType
+	 */
+	private String getStringValueForFileLinkType(Value value, boolean sequence) {
+		FileLink[] values = sequence ? value.extract() : new FileLink[] { value.extract() };
+		return Stream.of(values).map(fl -> {
+			StringBuilder sb = new StringBuilder();
+			if (fl.getDescription().isEmpty()) {
+				sb.append(FileLinkParser.NO_DESC_MARKER);
+			} else {
+				sb.append(fl.getDescription());
+			}
+			sb.append('[').append(fl.getMimeType()).append(',');
+			if (fl.isRemote()) {
+				sb.append(fl.getRemotePath());
+			} else if (fl.isLocal()) {
+				sb.append(FileLinkParser.LOCAL_MARKER).append(fl.getLocalPath());
+			} else {
+				throw new IllegalStateException("File link is neither in local nor remote state: " + fl);
+			}
+
+			return sb.append(']');
+		}).collect(Collectors.joining(","));
+	}
 }
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java
index 189917b..823b0e2 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateComponent.java
@@ -14,10 +14,10 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
 import org.eclipse.mdm.api.base.model.ContextComponent;
 import org.eclipse.mdm.api.base.model.ContextRoot;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Sortable;
 import org.eclipse.mdm.api.base.model.TestStep;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java
index cc980f7..3a9f0c7 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateRoot.java
@@ -13,10 +13,10 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
 import org.eclipse.mdm.api.base.model.ContextRoot;
 import org.eclipse.mdm.api.base.model.ContextType;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Value;
 
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java
index 330725c..c9d5c41 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateSensor.java
@@ -13,11 +13,11 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.AxisType;
 import org.eclipse.mdm.api.base.model.BaseEntity;
 import org.eclipse.mdm.api.base.model.ContextComponent;
 import org.eclipse.mdm.api.base.model.ContextSensor;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
 import org.eclipse.mdm.api.base.model.Quantity;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java
index 0a98273..35c1f4a 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTest.java
@@ -12,9 +12,9 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
 import org.eclipse.mdm.api.base.model.ContextComponent;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
 import org.eclipse.mdm.api.base.model.Test;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java
index d70879f..a140e6d 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStep.java
@@ -12,9 +12,9 @@
 import java.util.List;
 import java.util.Optional;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
 import org.eclipse.mdm.api.base.model.ContextType;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
 import org.eclipse.mdm.api.base.model.TestStep;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java
index e01a99d..b18c2de 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/TemplateTestStepUsage.java
@@ -10,8 +10,8 @@
 
 import java.util.function.Predicate;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Sortable;
 import org.eclipse.mdm.api.base.model.Test;
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java
index 64f538a..babe0e9 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueList.java
@@ -12,8 +12,8 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Datable;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
@@ -103,5 +103,6 @@
 
 		return sb.append(')').toString();
 	}
+	
 
 }
diff --git a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java
index 9102bf2..d6712e2 100644
--- a/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java
+++ b/src/main/java/org/eclipse/mdm/api/dflt/model/ValueListValue.java
@@ -8,8 +8,8 @@
 
 package org.eclipse.mdm.api.dflt.model;
 
+import org.eclipse.mdm.api.base.adapter.Core;
 import org.eclipse.mdm.api.base.model.BaseEntity;
-import org.eclipse.mdm.api.base.model.Core;
 import org.eclipse.mdm.api.base.model.Deletable;
 import org.eclipse.mdm.api.base.model.Describable;
 import org.eclipse.mdm.api.base.model.Sortable;
diff --git a/src/test/java/org/eclipse/mdm/api/dflt/model/EntityFactoryTest.java b/src/test/java/org/eclipse/mdm/api/dflt/model/EntityFactoryTest.java
new file mode 100644
index 0000000..24bfac2
--- /dev/null
+++ b/src/test/java/org/eclipse/mdm/api/dflt/model/EntityFactoryTest.java
@@ -0,0 +1,29 @@
+package org.eclipse.mdm.api.dflt.model;

+

+import static org.assertj.core.api.Assertions.assertThat;

+import static org.mockito.ArgumentMatchers.any;

+import static org.mockito.Mockito.mock;

+import static org.mockito.Mockito.when;

+

+import org.eclipse.mdm.api.base.model.Channel;

+import org.junit.Test;

+

+public class EntityFactoryTest {

+

+	@Test

+	public void createBaseEntities() {

+		EntityFactory entityFactory = mock(EntityFactory.class);

+		when(entityFactory.createBaseEntity(any(), any())).thenCallRealMethod();

+

+		// The Entities below were chosen as representatives of their respective

+		// packages since their constructors don't do anything with the Core instances

+		// passed to them, so a null pointer is sufficient for this test.

+

+		// Channel class is in package org.eclipse.mdm.api.base.model

+		// (BaseEntityFactory's package):

+		assertThat(entityFactory.createBaseEntity(Channel.class, null)).isInstanceOf(Channel.class);

+		// CatalogSensor class is in package org.eclipse.mdm.api.dflt.model

+		// (EntityFactory's package):

+		assertThat(entityFactory.createBaseEntity(CatalogSensor.class, null)).isInstanceOf(CatalogSensor.class);

+	}

+}