added Helperclass to generate names

Signed-off-by: Alexander Knoblauch <a.knoblauch@peak-solution.de>
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
index 7990f34..e3241f7 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
@@ -29,21 +29,10 @@
 
 import javax.management.ServiceNotFoundException;
 
-import org.asam.ods.AIDName;
-import org.asam.ods.AggrFunc;
 import org.asam.ods.AoException;
-import org.asam.ods.AoSession;
-import org.asam.ods.ApplicationElement;
 import org.asam.ods.ApplicationStructure;
 import org.asam.ods.ElemId;
 import org.asam.ods.InstanceElement;
-import org.asam.ods.JoinDef;
-import org.asam.ods.NameValueSeqUnitId;
-import org.asam.ods.QueryStructureExt;
-import org.asam.ods.ResultSetExt;
-import org.asam.ods.SelAIDNameUnitId;
-import org.asam.ods.SelItem;
-import org.asam.ods.SelOrder;
 import org.asam.ods.T_LONGLONG;
 import org.eclipse.mdm.api.atfxadapter.transaction.ATFXTransaction;
 import org.eclipse.mdm.api.base.ServiceNotProvidedException;
@@ -102,6 +91,16 @@
  * @see ODSEntityManager
  */
 public class ATFXEntityManager implements EntityManager {
+	private static final String AA_ID = "Id";
+
+	private static final String AE_TESTSTEP = "TestStep";
+
+	private static final String AE_TEST = "Test";
+
+	private static final String AE_STRUCTURE_LEVEL = "StructureLevel";
+
+	private static final String AE_PROJECT = "Project";
+
 	private static final Logger LOGGER = LoggerFactory.getLogger(ATFXEntityManager.class);
 
 	private static final Pattern PATTERN_TESTSTEP_ASAM_PATH = Pattern.compile(
@@ -118,7 +117,7 @@
 	private final EntityLoader entityLoader;
 	private final ExtSystem extSystem;
 
-	private String asamPathValue;
+	private NameHelper nameHelper;
 
 	/**
 	 * Constructor.
@@ -139,42 +138,15 @@
 		String property = System.getProperty(PROP_ASAMPATH);
 
 		if (!Strings.isNullOrEmpty(property)) {
-			initAsamPath(property);
-		}
-	}
+			try {
+				this.nameHelper = new NameHelper(odsModelManager.getAoSession(), getExtAttrComp(property),
+						getExtAttrAttr(property));
 
-	private void initAsamPath(String property) {
-
-		try {
-			AoSession aoSession = odsModelManager.getAoSession();
-			ApplicationElement applElem = aoSession.getApplicationStructure()
-					.getElementByName(getExtAttrComp(property));
-
-			QueryStructureExt qs = new QueryStructureExt();
-			AIDName aidName = new AIDName(applElem.getId(), getExtAttrAttr(property));
-			T_LONGLONG unit = new T_LONGLONG(0, 0);
-			SelAIDNameUnitId sel = new SelAIDNameUnitId(aidName, unit, AggrFunc.NONE);
-
-			qs.anuSeq = new SelAIDNameUnitId[] { sel };
-			qs.condSeq = new SelItem[0];
-			qs.groupBy = new AIDName[0];
-			qs.joinSeq = new JoinDef[0];
-			qs.orderBy = new SelOrder[0];
-
-			ResultSetExt[] instancesExt = aoSession.getApplElemAccess().getInstancesExt(qs, 0);
-
-			if (instancesExt.length > 0) {
-				NameValueSeqUnitId[] values = instancesExt[0].firstElems[0].values;
-
-				if (values.length > 0) {
-					asamPathValue = values[0].value.u.stringVal()[0];
-				}
+			} catch (AoException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
 			}
-
-		} catch (AoException e) {
-			LOGGER.error(e.getLocalizedMessage(), e);
 		}
-
 	}
 
 	/**
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/NameHelper.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/NameHelper.java
new file mode 100644
index 0000000..f067caf
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/NameHelper.java
@@ -0,0 +1,79 @@
+/**

+ * 

+ */

+package org.eclipse.mdm.api.atfxadapter;

+

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.regex.Pattern;

+

+import org.asam.ods.AoException;

+import org.asam.ods.AoSession;

+import org.asam.ods.ApplicationElement;

+import org.asam.ods.InstanceElement;

+import org.asam.ods.InstanceElementIterator;

+import org.asam.ods.Relationship;

+

+/**

+ * @author akn

+ *

+ */

+public class NameHelper {

+

+	private static final Pattern PATTERN_TESTSTEP_ASAM_PATH = Pattern.compile(

+			"\\/\\[Environment\\].+\\/\\[Project\\](.+)\\/\\[StructureLevel\\](.+)\\/\\[Test\\](.+)\\/\\[TestStep\\](.+)");

+

+	private final AoSession aoSession;

+	private final String compName;

+	private final String attrName;

+

+	private Map<String, String> asamAttrCache = new HashMap<>();

+

+	/**

+	 * @param aoSession

+	 * @param property

+	 * @throws AoException

+	 */

+	public NameHelper(AoSession aoSession, String compName, String attrName) throws AoException {

+		super();

+		this.aoSession = aoSession;

+		this.compName = compName;

+		this.attrName = attrName;

+		initCache();

+

+	}

+

+	private void initCache() throws AoException {

+		ApplicationElement testStep = this.aoSession.getApplicationStructure().getElementByName("TestStep");

+

+		InstanceElementIterator testStepInstances = testStep.getInstances("*");

+

+		List<InstanceElement> relatedIE = new ArrayList<>();

+

+		for (InstanceElement ie : testStepInstances.nextN(testStepInstances.getCount())) {

+			relatedIE.add(ie);

+			relatedIE.addAll(getParentIntances(ie));

+		}

+

+		int i = 0;

+

+	}

+

+	private List<InstanceElement> getParentIntances(InstanceElement ie) throws AoException {

+		List<InstanceElement> returnVal = new ArrayList<>();

+

+		InstanceElementIterator ieIterator = ie.getRelatedInstancesByRelationship(Relationship.FATHER, "*");

+

+		if (ieIterator != null && ieIterator.getCount() > 0) {

+			for (InstanceElement ieParent : ieIterator.nextN(ieIterator.getCount())) {

+				returnVal.add(ie);

+				returnVal.addAll(getParentIntances(ie));

+			}

+		}

+

+		return returnVal;

+	}

+

+}