Bug 364603 - JPA 2.0 - Support for element collection.
Add and update copyright.

Change-Id: I67a0abb10ff665d4798ea831ee878b2207964e9b
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/icons/ent/add_element-collection.gif b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/icons/ent/add_element-collection.gif
new file mode 100644
index 0000000..d03b399
--- /dev/null
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/icons/ent/add_element-collection.gif
Binary files differ
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/AddAttributeCommand.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/AddAttributeCommand.java
index 5c7d53e..1a693d8 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/AddAttributeCommand.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/AddAttributeCommand.java
@@ -1,5 +1,23 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.command;

 

+import java.util.Iterator;

+import java.util.List;

 import java.util.Locale;

 import java.util.Properties;

 

@@ -18,22 +36,43 @@
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorUtil;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JpaArtifactFactory;

 

-public class AddAttributeCommand implements Command{

+/**

+ * A new {@link Command} class that is called to create a new attribute in the

+ * selected persistent type.

+ * 

+ * @author i045693

+ * 

+ */

+public class AddAttributeCommand implements Command {

 

 	private IJPAEditorFeatureProvider fp;

 	private JavaPersistentType jpt;

-	private JavaPersistentType attributeType;

+	private String attributeType;

 	private String mapKeyType;

 	private String attributeName;

 	private String actName;

+	private String[] attrTypes;

+	private List<String> annotations;

 	private boolean isCollection;

-	private ICompilationUnit cu1;

-	private ICompilationUnit cu2;

-	

-	public AddAttributeCommand(IJPAEditorFeatureProvider fp, JavaPersistentType jpt, 

-			JavaPersistentType attributeType, String mapKeyType, String attributeName,

-			String actName, boolean isCollection, ICompilationUnit cu1,

-			ICompilationUnit cu2){

+	private ICompilationUnit cu;

+

+	/**

+	 * Constructor for the create new attribute command.

+	 * 

+	 * @param fp

+	 * @param jpt

+	 * @param attributeType

+	 * @param mapKeyType

+	 * @param attributeName

+	 * @param actName

+	 * @param isCollection

+	 * @param cu

+	 */

+	public AddAttributeCommand(IJPAEditorFeatureProvider fp,

+			JavaPersistentType jpt, String attributeType, String mapKeyType,

+			String attributeName, String actName, String[] attrTypes,

+			List<String> annotations,

+			boolean isCollection, ICompilationUnit cu) {

 		super();

 		this.fp = fp;

 		this.jpt = jpt;

@@ -41,140 +80,341 @@
 		this.mapKeyType = mapKeyType;

 		this.attributeName = attributeName;

 		this.actName = actName;

+		this.attrTypes = attrTypes;

+		this.annotations = annotations;

 		this.isCollection = isCollection;

-		this.cu1 = cu1;

-		this.cu2 = cu2;

+		this.cu = cu;

 	}

 

+	/**

+	 * Creates a new attribute.

+	 */

 	public void execute() {

 		IType type = null;

 		try {

-			JPAEditorUtil.createImport(cu1, cu2.getType(attributeType.getName()).getElementName());

-			type = cu1.findPrimaryType();	

+			JPAEditorUtil.createImport(cu, attributeType);

+			attributeType = JPAEditorUtil.returnSimpleName(attributeType);

+			type = cu.findPrimaryType();

 

-			if (isCollection) {

-				createAttributeOfCollectiontype(fp, jpt, attributeType,

-						mapKeyType, attributeName, actName, cu1, type);

-			} else {

-				createSimpleAttribute(attributeType, attributeName, actName,

-						isCollection, type);

+			if ((attrTypes != null) && (attrTypes.length > 0)) {

+				JPAEditorUtil.createImports(cu, attrTypes);

+			}

+

+			String contents = "";

+			if (annotations != null) {

+				Iterator<String> it = annotations.iterator();

+				while (it.hasNext()) {

+					String an = it.next();

+					contents += "   " + an + "\n"; //$NON-NLS-1$ //$NON-NLS-2$

+				}

 			}

 			

-			JavaPersistentAttribute attr  = jpt.getAttributeNamed(attributeName);

+			createAttribute(fp, jpt, attributeType, mapKeyType, attributeName,

+					actName, cu, type, isCollection, attrTypes, contents);

+

+			JavaPersistentAttribute attr = jpt.getAttributeNamed(actName);

 			int cnt = 0;

 			while ((attr == null) && (cnt < 25)) {

 				try {

 					Thread.sleep(250);

 				} catch (InterruptedException e) {

+					JPADiagramEditorPlugin.logError("Cannnot create a new attribute with name " + attributeName, e); //$NON-NLS-1$				

 				}

-				jpt.getJavaResourceType().getJavaResourceCompilationUnit().synchronizeWithJavaSource();

-				attr = jpt.getAttributeNamed(attributeName);

+				jpt.getJavaResourceType().getJavaResourceCompilationUnit()

+						.synchronizeWithJavaSource();

+				jpt.update();

+				attr = jpt.getAttributeNamed(actName);

 				cnt++;

 			}

-			

+

 		} catch (JavaModelException e) {

-			JPADiagramEditorPlugin.logError("Cannnot create a new attribute with name " + attributeName, e); //$NON-NLS-1$				

+			JPADiagramEditorPlugin

+					.logError(

+							"Cannnot create a new attribute with name " + attributeName, e); //$NON-NLS-1$				

 		}

 	}

-	

-	private void createSimpleAttribute(JavaPersistentType attributeType,

-			String attributeName, String actName, boolean isCollection,

-			IType type) throws JavaModelException {

-		type.createField("  private " + JPAEditorUtil.returnSimpleName(attributeType.getName()) + " " //$NON-NLS-1$ //$NON-NLS-2$

-			+ JPAEditorUtil.decapitalizeFirstLetter(actName) + ";", null, false, new NullProgressMonitor()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

-		type.createMethod(JpaArtifactFactory.instance().genGetterContents(attributeName,

-				JPAEditorUtil.returnSimpleName(attributeType.getName()), null,

-				actName, null, isCollection), null, false,

-				new NullProgressMonitor());

-		type.createMethod(JpaArtifactFactory.instance().genSetterContents(attributeName,

-				JPAEditorUtil.returnSimpleName(attributeType.getName()), null,

-				actName, isCollection), null, false,

-				new NullProgressMonitor());

+

+	/**

+	 * Creates an attribute the persistent type.

+	 * 

+	 * @param fp

+	 * @param jpt

+	 * @param attrTypeName

+	 * @param mapKeyType

+	 * @param attrName

+	 * @param actName

+	 * @param cu

+	 * @param type

+	 * @param isCollection

+	 * @throws JavaModelException

+	 */

+	private void createAttribute(IJPAEditorFeatureProvider fp,

+			JavaPersistentType jpt, String attrTypeName, String mapKeyType,

+			String attrName, String actName, ICompilationUnit cu, IType type,

+			boolean isCollection, String[] attrTypeElementNames, String annotationContents) throws JavaModelException {

+

+			if (isCollection) {

+				createAttributeOfCollectiontype(fp, jpt, attrTypeName,

+						mapKeyType, attrName, actName, cu, type);

+			} else {

+				createSimpleAttribute(attrTypeName, attrName, actName,

+						isCollection, type, attrTypeElementNames, annotationContents);

+			}

 	}

 

+	/**

+	 * Creates a new attribute of a basic type.

+	 * 

+	 * @param attributeType

+	 * @param attributeName

+	 * @param actName

+	 * @param isCollection

+	 * @param type

+	 * @throws JavaModelException

+	 */

+	private void createSimpleAttribute(String attributeType,

+			String attributeName, String actName, boolean isCollection,

+			IType type, String[] attrTypeElementNames, String annotationContents) throws JavaModelException {

+		

+		

+		String attrFieldContent = "    private " + attributeType + //$NON-NLS-1$

+				((attrTypes == null) ? "" : ("<" + JPAEditorUtil.createCommaSeparatedListOfSimpleTypeNames(attrTypes) + ">")) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

+				" " + JPAEditorUtil.decapitalizeFirstLetter(actName) + ";"; //$NON-NLS-1$ //$NON-NLS-2$

+		

+		String contents = "";

+		if(!JpaArtifactFactory.instance().isMethodAnnotated(jpt)){

+			contents = annotationContents + attrFieldContent;

+		} else {

+			contents = attrFieldContent;

+		}

+		

+		type.createField(contents, null, false, new NullProgressMonitor()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

+		

+		type.createMethod(

+				genGetterContents(attributeName, attributeType, actName, attrTypeElementNames, annotationContents), null,

+				false, new NullProgressMonitor());

+		type.createMethod(

+				genSetterContents(attributeName, attributeType, actName, attrTypeElementNames), null,

+				false, new NullProgressMonitor());

+	}

+

+	/**

+	 * Creates a new attribute of a collection type, depending on the specified

+	 * collection type in the Preference/Properties page.

+	 * 

+	 * @param fp

+	 * @param jpt

+	 * @param attributeType

+	 * @param mapKeyType

+	 * @param attributeName

+	 * @param actName

+	 * @param cu

+	 * @param type

+	 * @throws JavaModelException

+	 */

 	private void createAttributeOfCollectiontype(IJPAEditorFeatureProvider fp,

-			JavaPersistentType jpt, JavaPersistentType attributeType,

-			String mapKeyType, String attributeName, String actName,

-			ICompilationUnit cu1, IType type) throws JavaModelException {

+			JavaPersistentType jpt, String attributeType, String mapKeyType,

+			String attributeName, String actName, ICompilationUnit cu,

+			IType type) throws JavaModelException {

 		IProject project = jpt.getJpaProject().getProject();

 		Properties props = fp.loadProperties(project);

 		if (JPADiagramPropertyPage.isCollectionType(project, props)) {

 			createAttributeByCollectionMethodType(attributeType, null,

-					attributeName, actName, cu1, type, JPAEditorConstants.COLLECTION_TYPE);

+					attributeName, actName, cu, type,

+					JPAEditorConstants.COLLECTION_TYPE);

 		} else if (JPADiagramPropertyPage.isListType(project, props)) {

 			createAttributeByCollectionMethodType(attributeType, null,

-					attributeName, actName, cu1, type, JPAEditorConstants.LIST_TYPE);

+					attributeName, actName, cu, type,

+					JPAEditorConstants.LIST_TYPE);

 		} else if (JPADiagramPropertyPage.isSetType(project, props)) {

 			createAttributeByCollectionMethodType(attributeType, null,

-					attributeName, actName, cu1, type, JPAEditorConstants.SET_TYPE);

+					attributeName, actName, cu, type,

+					JPAEditorConstants.SET_TYPE);

 		} else {

 			createAttributeByCollectionMethodType(attributeType, mapKeyType,

-					attributeName, actName, cu1, type, JPAEditorConstants.MAP_TYPE);

+					attributeName, actName, cu, type,

+					JPAEditorConstants.MAP_TYPE);

 		}

 	}

 

-	

-	private void createAttributeByCollectionMethodType(

-			JavaPersistentType attributeType,  String mapKeyType, String attributeName,

-			String actName, ICompilationUnit cu1, IType type, String collectionType)

+	/**

+	 * Create attribute by the specified collection type in the

+	 * Preference/Properties page.

+	 * 

+	 * @param attributeType

+	 * @param mapKeyType

+	 * @param attributeName

+	 * @param actName

+	 * @param cu

+	 * @param type

+	 * @param collectionType

+	 * @throws JavaModelException

+	 */

+	private void createAttributeByCollectionMethodType(String attributeType,

+			String mapKeyType, String attributeName, String actName,

+			ICompilationUnit cu, IType type, String collectionType)

 			throws JavaModelException {

-		mapKeyType = createContentType(mapKeyType, attributeType, actName, cu1, type, collectionType);

-		type.createMethod(genGetterWithAppropriateType(attributeName, mapKeyType,

-				JPAEditorUtil.returnSimpleName(attributeType.getName()), 

-				actName, collectionType), null, false,

+		mapKeyType = createContentType(mapKeyType, attributeType, actName, cu,

+				type, collectionType);

+		type.createMethod(

+				genGetterWithAppropriateType(attributeName, mapKeyType,

+						attributeType, actName, collectionType), null, false,

 				new NullProgressMonitor());

-		type.createMethod(genSetterWithAppropriateType(attributeName, mapKeyType,

-				JPAEditorUtil.returnSimpleName(attributeType.getName()), 

-				actName, collectionType), null, false,

+		type.createMethod(

+				genSetterWithAppropriateType(attributeName, mapKeyType,

+						attributeType, actName, collectionType), null, false,

 				new NullProgressMonitor());

 	}

-	

-	private String createContentType(String mapKeyType, JavaPersistentType attributeType,

-			String actName, ICompilationUnit cu1, IType type, String collectionType)

-			throws JavaModelException {

-		

+

+	/**

+	 * Create field in the entity by the specified collection type.

+	 * 

+	 * @param mapKeyType

+	 * @param attributeType

+	 * @param actName

+	 * @param cu

+	 * @param type

+	 * @param collectionType

+	 * @return string representation of the field's collection type.

+	 * @throws JavaModelException

+	 */

+	private String createContentType(String mapKeyType, String attributeType,

+			String actName, ICompilationUnit cu, IType type,

+			String collectionType) throws JavaModelException {

+

 		if (mapKeyType != null) {

-			mapKeyType = JPAEditorUtil.createImport(cu1, mapKeyType); 

+			mapKeyType = JPAEditorUtil.createImport(cu, mapKeyType);

 		}

-		JPAEditorUtil.createImport(cu1, collectionType);

+		JPAEditorUtil.createImport(cu, collectionType);

 		type.createField(

-				"  private " + JPAEditorUtil.returnSimpleName(collectionType) + "<" +//$NON-NLS-1$ //$NON-NLS-2$

-				((mapKeyType != null) ? (mapKeyType + ", ") : "") +			//$NON-NLS-1$ //$NON-NLS-2$

-				JPAEditorUtil.returnSimpleName(attributeType.getName()) + "> " + JPAEditorUtil.decapitalizeFirstLetter(actName) +  //$NON-NLS-1$

-				";", null, false, new NullProgressMonitor()); //$NON-NLS-1$ 

+				"  private " + JPAEditorUtil.returnSimpleName(collectionType) + "<" + //$NON-NLS-1$ //$NON-NLS-2$

+						((mapKeyType != null) ? (mapKeyType + ", ") : "") + //$NON-NLS-1$ //$NON-NLS-2$

+						attributeType

+						+ "> " + JPAEditorUtil.decapitalizeFirstLetter(actName) + //$NON-NLS-1$

+						";", null, false, new NullProgressMonitor()); //$NON-NLS-1$ 

 		return mapKeyType;

 	}

-	

-	private String genGetterWithAppropriateType(String attrName, String mapKeyType, String attrType,

-			String actName, String type) {

+

+	/**

+	 * Create the attribute's getter method in entity's compilation unit with

+	 * the appropriate collection type, selected in the Preference/Properties

+	 * page.

+	 * 

+	 * @param attrName

+	 *            - the name of the attribute

+	 * @param attrType

+	 *            - the type of the attribute

+	 * @param attrTypeElementNames

+	 * @param actName

+	 * @param isCollection

+	 * @return the string representation of the attribute's getter method.

+	 */

+	private String genGetterWithAppropriateType(String attrName,

+			String mapKeyType, String attrType, String actName, String type) {

 

 		String attrNameWithCapitalA = actName.substring(0, 1).toUpperCase(

 				Locale.ENGLISH)

 				+ actName.substring(1);

-		String contents = "    public " + JPAEditorUtil.returnSimpleName(type) + 		//$NON-NLS-1$

-				"<" + ((mapKeyType != null) ? (mapKeyType + ", ") : "")  +  attrType + "> " +	//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

-				"get" + attrNameWithCapitalA + "() {\n" + 	//$NON-NLS-1$ //$NON-NLS-2$

-				"        return " 	//$NON-NLS-1$

-				+ JPAEditorUtil.decapitalizeFirstLetter(actName) + ";\n" + 		//$NON-NLS-1$

-				"    }\n"; 	//$NON-NLS-1$

+		String contents = "    public " + JPAEditorUtil.returnSimpleName(type) + //$NON-NLS-1$

+				"<"

+				+ ((mapKeyType != null) ? (mapKeyType + ", ") : "") + attrType + "> " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

+				"get" + attrNameWithCapitalA + "() {\n" + //$NON-NLS-1$ //$NON-NLS-2$

+				"        return " //$NON-NLS-1$

+				+ JPAEditorUtil.decapitalizeFirstLetter(actName) + ";\n" + //$NON-NLS-1$

+				"    }\n"; //$NON-NLS-1$

 		return contents;

 	}

-	

-	private String genSetterWithAppropriateType(String attrName, String mapKeyType, String attrType,

-			String actName, String type) {

+

+	/**

+	 * Create the attribute's setter method in entity's compilation unit with

+	 * the appropriate collection type, selected in the Preference/Properties

+	 * page.

+	 * 

+	 * @param attrName

+	 *            - the name of the attribute

+	 * @param attrType

+	 *            - the type of the attribute

+	 * @param attrTypeElementNames

+	 * @param actName

+	 * @param isCollection

+	 * @return the string representation of the attribute's setter method.

+	 */

+	private String genSetterWithAppropriateType(String attrName,

+			String mapKeyType, String attrType, String actName, String type) {

 

 		String attrNameWithCapitalA = actName.substring(0, 1).toUpperCase(

 				Locale.ENGLISH)

 				+ actName.substring(1);

-		String contents = "    public void set" + attrNameWithCapitalA + 			//$NON-NLS-1$

-				"(" + JPAEditorUtil.returnSimpleName(type) + 						//$NON-NLS-1$

-				"<" + ((mapKeyType != null) ? (mapKeyType + ", ") : "") + attrType + "> param) " +	//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

-				"{\n" +   	//$NON-NLS-1$

-				"        this." 	//$NON-NLS-1$

+		String contents = "    public void set" + attrNameWithCapitalA + //$NON-NLS-1$

+				"("

+				+ JPAEditorUtil.returnSimpleName(type)

+				+ //$NON-NLS-1$

+				"<"

+				+ ((mapKeyType != null) ? (mapKeyType + ", ") : "") + attrType + "> param) " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

+				"{\n"

+				+ //$NON-NLS-1$

+				"        this." //$NON-NLS-1$

 				+ JPAEditorUtil.decapitalizeFirstLetter(actName)

-				+ " = param;\n" + 	//$NON-NLS-1$

-				"    }\n"; 			//$NON-NLS-1$

+				+ " = param;\n" + //$NON-NLS-1$

+				"    }\n"; //$NON-NLS-1$

 		return contents;

 	}

-	

+

+	/**

+	 * Create the attribute's getter method in entity's compilation unit.

+	 * 

+	 * @param attrName

+	 *            - the name of the attribute

+	 * @param attrType

+	 *            - the type of the attribute

+	 * @param actName

+	 * @param annotationContents - the annotations as string representation

+	 * @return the string representation of the attribute's getter method.

+	 */

+	private String genGetterContents(String attrName, String attrType,

+			String actName, String[] attrTypeElementNames, String annotationContents) {

+		

+		String attrNameWithCapitalA = actName.substring(0, 1).toUpperCase(

+				Locale.ENGLISH)

+				+ actName.substring(1);

+		

+		String contents = "";

+		if(JpaArtifactFactory.instance().isMethodAnnotated(jpt)){

+			contents += annotationContents;

+		}

+		contents += "    public " + attrType + //$NON-NLS-1$

+				((attrTypeElementNames == null) ? "" : ("<" + JPAEditorUtil.createCommaSeparatedListOfSimpleTypeNames(attrTypeElementNames) + ">")) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

+				(attrType.equals("boolean") ? " is" : " get") + attrNameWithCapitalA + "() {\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 

+				"        return " //$NON-NLS-1$

+				+ JPAEditorUtil.decapitalizeFirstLetter(actName) + ";\n" + //$NON-NLS-1$ 

+				"    }\n"; //$NON-NLS-1$

+

+		return contents;

+	}

+

+	/**

+	 * Create the attribute's setter method in entity's compilation unit.

+	 * 

+	 * @param attrName

+	 *            - the name of the attribute

+	 * @param attrType

+	 *            - the type of the attribute

+	 * @return the string representation of the attribute's setter method.

+	 */

+	private String genSetterContents(String attrName, String attrType,

+			String actName, String[] attrTypeElementNames) {

+		

+		String attrNameWithCapitalA = actName.substring(0, 1).toUpperCase(

+				Locale.ENGLISH) + actName.substring(1);

+

+		String contents = "    public void set" + attrNameWithCapitalA + "(" + attrType + //$NON-NLS-1$ //$NON-NLS-2$

+				((attrTypeElementNames == null) ? "" : ("<" + JPAEditorUtil.createCommaSeparatedListOfSimpleTypeNames(attrTypeElementNames) + ">")) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

+				" param) {\n" //$NON-NLS-1$

+				+ "        this." //$NON-NLS-1$

+				+ JPAEditorUtil.decapitalizeFirstLetter(actName)

+				+ " = param;\n" + //$NON-NLS-1$ 

+				"    }\n";

+		return contents;

+	}

+

 }

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/CreateNewAttributeCommand.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/CreateNewAttributeCommand.java
deleted file mode 100644
index d6714db..0000000
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/CreateNewAttributeCommand.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package org.eclipse.jpt.jpadiagrameditor.ui.internal.command;

-

-import java.util.Iterator;

-import java.util.List;

-

-import org.eclipse.core.runtime.NullProgressMonitor;

-import org.eclipse.jdt.core.ICompilationUnit;

-import org.eclipse.jdt.core.IImportDeclaration;

-import org.eclipse.jdt.core.IType;

-import org.eclipse.jdt.core.JavaModelException;

-import org.eclipse.jpt.common.utility.command.Command;

-import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;

-import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;

-import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorUtil;

-import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JpaArtifactFactory;

-

-public class CreateNewAttributeCommand implements Command {

-	

-	private JavaPersistentType jpt;

-	private ICompilationUnit cu;

-	private String attrName;

-	private String attrTypeName;

-	private String[] attrTypes;

-	private String actName;

-	private List<String> annotations;

-	private boolean isCollection;

-	private boolean isMethodAnnotated;

-	

-	public CreateNewAttributeCommand(JavaPersistentType jpt, 

-		ICompilationUnit cu, String attrName, String attrTypeName,

-		String[] attrTypes, String actName,

-		List<String> annotations, boolean isCollection,

-		boolean isMethodAnnotated){

-		super();

-		this.jpt = jpt;

-		this.cu = cu;

-		this.attrName = attrName;

-		this.attrTypeName = attrTypeName;

-		this.attrTypes = attrTypes;

-		this.actName = actName;

-		this.annotations = annotations;

-		this.isCollection = isCollection;

-		this.isMethodAnnotated = isMethodAnnotated;

-	}

-

-	public void execute() {

-		try {

-		IType type = cu.findPrimaryType();

-		String contents = ""; 														//$NON-NLS-1$

-		isMethodAnnotated = (annotations != null) && (!annotations.isEmpty()) ? isMethodAnnotated

-				: JpaArtifactFactory.instance().isMethodAnnotated(jpt);

-		

-		if (!isMethodAnnotated) {

-			if (annotations != null) {

-				Iterator<String> it = annotations.iterator();

-				while (it.hasNext()) {

-					String an = it.next();

-					contents += "   " + an + "\n"; //$NON-NLS-1$ //$NON-NLS-2$

-				}							

-			}

-		}

-		

-		if(annotations!=null && annotations.contains("@Basic")){ //$NON-NLS-1$

-			if(!cu.getImport("javax.persistence.*").exists() && !cu.getImport("javax.persistence.Basic").exists()){ //$NON-NLS-1$ //$NON-NLS-2$

-				JPAEditorUtil.createImports(cu, "javax.persistence.Basic"); //$NON-NLS-1$

-			}

-		}

-		

-		boolean shouldAddImport = true;

-		IImportDeclaration[] importDeclarations = cu.getImports();

-		String attrShortTypeName = JPAEditorUtil.returnSimpleName(attrTypeName);

-		for(IImportDeclaration importDecl : importDeclarations){

-			String importedDeclarationFQN = importDecl.getElementName();

-			String importedDeclarationShortName = JPAEditorUtil.returnSimpleName(importedDeclarationFQN);

-			if(attrShortTypeName.equals(importedDeclarationShortName) && !attrTypeName.equals(importedDeclarationFQN))

-				shouldAddImport = false;

-		}

-		

-		if(shouldAddImport){

-			JPAEditorUtil.createImports(cu, attrTypeName);

-		    attrTypeName = JPAEditorUtil.returnSimpleName(attrTypeName);

-		}

-		if ((attrTypes != null) && (attrTypes.length > 0)) {

-			JPAEditorUtil.createImports(cu, attrTypes);

-		}

-		

-		contents += "    private " + attrTypeName + //$NON-NLS-1$

-				((attrTypes == null) ? "" : ("<" + JPAEditorUtil.createCommaSeparatedListOfSimpleTypeNames(attrTypes) + ">")) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

-				" " + attrName + ";"; //$NON-NLS-1$ //$NON-NLS-2$		

-

-		type.createMethod(

-				JpaArtifactFactory.instance().genSetterContents(attrName, attrTypeName, attrTypes,

-						actName, isCollection), null, false,

-				new NullProgressMonitor());

-		if (isMethodAnnotated) {

-			type.createMethod(

-					JpaArtifactFactory.instance().genGetterContents(attrName, attrTypeName,

-							attrTypes, actName, annotations,

-							isCollection), null, false,

-					new NullProgressMonitor());

-			type.createField(contents, null, false, new NullProgressMonitor());

-		} else {

-			type.createField(contents, null, false, new NullProgressMonitor());

-			type.createMethod(

-					JpaArtifactFactory.instance().genGetterContents(attrName, attrTypeName,

-							attrTypes, actName, null, isCollection),

-					null, false, new NullProgressMonitor());

-		}

-		

-	} catch (JavaModelException e) {

-		

-	}

-		

-		JavaPersistentAttribute attr  = jpt.getAttributeNamed(attrName);

-		int cnt = 0;

-		while ((attr == null) && (cnt < 25)) {

-			try {

-				Thread.sleep(250);

-			} catch (InterruptedException e) {

-			}

-			jpt.getJavaResourceType().getJavaResourceCompilationUnit().synchronizeWithJavaSource();

-			attr = jpt.getAttributeNamed(attrName);

-			cnt++;

-		}

-	}

-}

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/DeleteAttributeCommand.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/DeleteAttributeCommand.java
index 5877009..1e42dc2 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/DeleteAttributeCommand.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/DeleteAttributeCommand.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.command;

 

 import java.util.Locale;

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameAttributeCommand.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameAttributeCommand.java
index 37b4b0c..9e6e5c7 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameAttributeCommand.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameAttributeCommand.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.command;

 

 import java.lang.reflect.InvocationTargetException;

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameEntityCommand.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameEntityCommand.java
index f91a718..d62c293 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameEntityCommand.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/RenameEntityCommand.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.command;

 

 import org.eclipse.jdt.core.ICompilationUnit;

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/SetMappedByNewValueCommand.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/SetMappedByNewValueCommand.java
index 872c9a2..2da316d 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/SetMappedByNewValueCommand.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/command/SetMappedByNewValueCommand.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.command;

 

 import org.eclipse.jpt.common.core.resource.java.Annotation;

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddAllEntitiesFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddAllEntitiesFeature.java
index 1390704..70fe35a 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddAllEntitiesFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddAllEntitiesFeature.java
@@ -70,7 +70,6 @@
 		return true;
 	}
 	
-	@SuppressWarnings("restriction")
 	public void execute(ICustomContext context) {
 		Diagram d = getDiagram();
 		JpaProject project = getTargetJPAProject();
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddHasReferenceRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddHasReferenceRelationFeature.java
index 75dcf8e..16ac692 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddHasReferenceRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/AddHasReferenceRelationFeature.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.feature;

 

 import static org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.HasReferanceRelation.HasReferenceType.COLLECTION;

@@ -87,7 +103,6 @@
             IAddBendpointFeature ft = getFeatureProvider().getAddBendpointFeature(ctx);

             ft.addBendpoint(ctx);

         }

-        getFeatureProvider().getPeServiceUtil().setPropertyValue(connection, HasReferanceRelation.HAS_REFERENCE_CONNECTION_PROP_KEY, Boolean.TRUE.toString());

         addDecorators(connection, relation);

         addTextDecorators(connection, relation);

 

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/ClickAddAttributeButtonFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/ClickAddAttributeButtonFeature.java
index 4d9a785..8cc319b 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/ClickAddAttributeButtonFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/ClickAddAttributeButtonFeature.java
@@ -53,7 +53,7 @@
 		JavaPersistentType jpt = (JavaPersistentType)getFeatureProvider().getBusinessObjectForPictogramElement(entityShape);
 		String newAttrName = JpaArtifactFactory.instance().createNewAttribute(jpt, false, getFeatureProvider());
 
-		JavaPersistentAttribute newAttr = jpt.getAttributeNamed(newAttrName);
+		JavaPersistentAttribute newAttr = (JavaPersistentAttribute) jpt.resolveAttribute(newAttrName);
 
 		getFeatureProvider().addAddIgnore((JavaPersistentType)newAttr.getParent(), newAttr.getName());
 		addGraphicalRepresentation(context, newAttr);
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/ClickAddElementCollectionButtonFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/ClickAddElementCollectionButtonFeature.java
new file mode 100644
index 0000000..ac1e6d8
--- /dev/null
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/ClickAddElementCollectionButtonFeature.java
@@ -0,0 +1,89 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

+package org.eclipse.jpt.jpadiagrameditor.ui.internal.feature;

+

+import org.eclipse.graphiti.features.IFeatureProvider;

+import org.eclipse.graphiti.features.context.IContext;

+import org.eclipse.graphiti.features.context.ICreateContext;

+import org.eclipse.graphiti.features.impl.AbstractCreateFeature;

+import org.eclipse.graphiti.mm.pictograms.ContainerShape;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;

+import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;

+import org.eclipse.jpt.jpa.core.jpa2.MappingKeys2_0;

+import org.eclipse.jpt.jpa.core.jpa2.resource.java.ElementCollection2_0Annotation;

+import org.eclipse.jpt.jpadiagrameditor.ui.internal.i18n.JPAEditorMessages;

+import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.IJPAEditorFeatureProvider;

+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JpaArtifactFactory;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IWorkbenchSite;

+

+public class ClickAddElementCollectionButtonFeature extends AbstractCreateFeature {

+	

+	public ClickAddElementCollectionButtonFeature(IFeatureProvider provider) {

+		super(provider, "", "");	//$NON-NLS-1$ //$NON-NLS-2$

+	}

+	

+	public boolean canExecute(IContext context) {

+		return true;

+	}

+

+	public boolean canUndo(IContext context) {

+		return false;

+	}

+

+	public boolean canCreate(ICreateContext context) {

+		return true;

+	}

+	

+	public Object[] create(ICreateContext context) {

+		ContainerShape entityShape = context.getTargetContainer();

+		JavaPersistentType jpt = (JavaPersistentType)getFeatureProvider().getBusinessObjectForPictogramElement(entityShape);

+		String newAttrName = JpaArtifactFactory.instance().createNewAttribute(jpt, true, getFeatureProvider());

+

+		JavaPersistentAttribute newAttr = (JavaPersistentAttribute) jpt.resolveAttribute(newAttrName);

+		newAttr.setMappingKey(MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY);

+		newAttr.getResourceAttribute().addAnnotation(ElementCollection2_0Annotation.ANNOTATION_NAME);

+

+		getFeatureProvider().addAddIgnore((JavaPersistentType)newAttr.getParent(), newAttr.getName());

+		addGraphicalRepresentation(context, newAttr);

+        getFeatureProvider().getDirectEditingInfo().setActive(true);

+        

+        IWorkbenchSite ws = ((IEditorPart)getDiagramEditor()).getSite();

+        ICompilationUnit cu = getFeatureProvider().getCompilationUnit(jpt);

+        getFeatureProvider().getJPAEditorUtil().formatCode(cu, ws);

+

+		return new Object[] {newAttr};

+	}

+

+	public boolean isAvailable(IContext context) {

+		return true;

+	}

+

+	public String getName() {

+		return JPAEditorMessages.ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureName;  			

+	}

+

+	public String getDescription() {

+		return JPAEditorMessages.ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureDescription;  

+	}

+	

+	public IJPAEditorFeatureProvider getFeatureProvider() {

+		return (IJPAEditorFeatureProvider)super.getFeatureProvider();

+	}

+

+}

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateEmbeddableFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateEmbeddableFeature.java
index f25fa0f..7f73f3e 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateEmbeddableFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateEmbeddableFeature.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.feature;

 

 import java.util.List;

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateInheritedEntityFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateInheritedEntityFeature.java
index e7f47cd..6947fa7 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateInheritedEntityFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateInheritedEntityFeature.java
@@ -120,7 +120,6 @@
 		disableAllNotValidJPTs();
 	}
 	
-	@SuppressWarnings("restriction")
 	private void disableAllNotValidJPTs(){
 		Diagram d = getDiagram();
 		JpaProject project = ModelIntegrationUtil.getProjectByDiagram(d.getName());
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateJPAEntityFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateJPAEntityFeature.java
index 02d90ba..db45096 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateJPAEntityFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateJPAEntityFeature.java
@@ -100,7 +100,6 @@
         return context.getTargetContainer() instanceof Diagram;
     }
 
-    @SuppressWarnings("restriction")
 	public Object[] create(ICreateContext context) {
 		List<Shape> shapes = this.getFeatureProvider().getDiagramTypeProvider().getDiagram().getChildren();
 		IProject targetProject = null;
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyBiDirRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyBiDirRelationFeature.java
index af75f94..db16e24 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyBiDirRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyBiDirRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyUniDirRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyUniDirRelationFeature.java
index f227422..81fe2d3 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyUniDirRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToManyUniDirRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneBiDirRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneBiDirRelationFeature.java
index 1c6e2ff..e18cd35 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneBiDirRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneBiDirRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneUniDirRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneUniDirRelationFeature.java
index 7280e65..560e49c 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneUniDirRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateManyToOneUniDirRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToManyRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToManyRelationFeature.java
index bf531a0..a448461 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToManyRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToManyRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneBiDirRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneBiDirRelationFeature.java
index 6fb57c2..689fbf9 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneBiDirRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneBiDirRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneUniDirRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneUniDirRelationFeature.java
index 1e556db..6036ef3 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneUniDirRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateOneToOneUniDirRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateRelationFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateRelationFeature.java
index 6149fa8..fd6aef9 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateRelationFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/CreateRelationFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
@@ -173,7 +173,6 @@
 	 * For each unvalid relationship's target, change the color of the respective
 	 * java persistent type in gray to simulate disability of the persistent type.
 	 */
-	@SuppressWarnings("restriction")
 	private void disableUnvalidRelationTargets(){
 		Diagram d = getDiagram();
 		JpaProject project = ModelIntegrationUtil.getProjectByDiagram(d.getName());
@@ -234,7 +233,6 @@
 	 * registered in the persistence unit.
 	 * @param unit
 	 */
-	@SuppressWarnings("restriction")
 	private void disableAllEmbeddables() {
 		Diagram d = getDiagram();
 		JpaProject project = ModelIntegrationUtil.getProjectByDiagram(d.getName());
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedCollectionOfObjectsFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedCollectionOfObjectsFeature.java
index 90368bf..cd293a7 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedCollectionOfObjectsFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedCollectionOfObjectsFeature.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.feature;

 

 import java.util.Set;

@@ -14,6 +30,7 @@
 import org.eclipse.jpt.jpa.core.context.Entity;

 import org.eclipse.jpt.jpa.core.context.MappedSuperclass;

 import org.eclipse.jpt.jpa.core.context.PersistentType;

+import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute;

 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;

 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;

 import org.eclipse.jpt.jpa.core.context.persistence.ClassRef;

@@ -139,13 +156,21 @@
 	/**

 	 * Checks whether the connection is possible. If the source of the connection is embeddable and it already

 	 * embeds in itself an element collection of another embeddable, or if the target of the connection is already

-	 * embedded as an element connection in some entity, then the connection is not allowed by specification.

+	 * embedded as an element connection in some entity, or the if the target embeddable contains an attribute with

+	 * mapping element-collection, then the connection is not allowed by specification.

 	 * @param embeddingEntity - the source entity of the connection

 	 * @param embeddable - the target entity of the connection

 	 * @return true if the connection is possible, false otherwise.

 	 */

 	private boolean isNotAllowed(JavaPersistentType embeddingEntity, JavaPersistentType embeddable){

 		boolean notAllowed = false;

+		if(JpaArtifactFactory.instance().hasEmbeddableAnnotation(embeddable)){

+			for(ReadOnlyPersistentAttribute attr : embeddable.getAllAttributes()){

+				if(attr.getMappingKey().equals(MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY)){

+					return true;

+				}

+			}

+		}

 		if(JpaArtifactFactory.instance().hasEmbeddableAnnotation(embeddingEntity)){

 			notAllowed = isEmbeddableAlreadyEmbeddedAsElementCollection(embeddingEntity, false);

 		} else if(JpaArtifactFactory.instance().hasEntityAnnotation(embeddingEntity)){

@@ -181,7 +206,6 @@
 	 * For each unvalid relationship's target, change the color of the respective

 	 * java persistent type in gray to simulate disability of the persistent type.

 	 */

-	@SuppressWarnings("restriction")

 	private void disableUnvalidRelationTargets(){

 		Diagram d = getDiagram();

 		JpaProject project = ModelIntegrationUtil.getProjectByDiagram(d.getName());

@@ -233,7 +257,6 @@
 	 * registered in the persistence unit.

 	 * @param unit

 	 */

-	@SuppressWarnings("restriction")

 	private void disableAllMappedSuperclasses() {

 		Diagram d = getDiagram();

 		JpaProject project = ModelIntegrationUtil.getProjectByDiagram(d.getName());

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedSingleObjectFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedSingleObjectFeature.java
index 72fe587..b41f28c 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedSingleObjectFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/EmbedSingleObjectFeature.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.feature;

 

 import org.eclipse.graphiti.features.IFeatureProvider;

@@ -130,7 +146,6 @@
 	 * For each unvalid relationship's target, change the color of the respective

 	 * java persistent type in gray to simulate disability of the persistent type.

 	 */

-	@SuppressWarnings("restriction")

 	private void disableUnvalidRelationTargets(){

 		Diagram d = getDiagram();

 		JpaProject project = ModelIntegrationUtil.getProjectByDiagram(d.getName());

@@ -169,7 +184,6 @@
 	 * registered in the persistence unit.

 	 * @param unit

 	 */

-	@SuppressWarnings("restriction")

 	private void disableAllMappedSuperclasses() {

 		Diagram d = getDiagram();

 		JpaProject project = ModelIntegrationUtil.getProjectByDiagram(d.getName());

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/RefactorAttributeTypeFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/RefactorAttributeTypeFeature.java
index c5c4387..24fb6c8 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/RefactorAttributeTypeFeature.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/RefactorAttributeTypeFeature.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2011 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
@@ -17,6 +17,7 @@
 
 import java.text.MessageFormat;
 import java.util.List;
+
 import org.eclipse.graphiti.features.IFeatureProvider;
 import org.eclipse.graphiti.features.context.ICustomContext;
 import org.eclipse.graphiti.features.custom.AbstractCustomFeature;
@@ -25,7 +26,6 @@
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jpt.common.core.resource.java.JavaResourceAttribute;
-import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement.Kind;
 import org.eclipse.jpt.jpa.core.context.PersistentType;
 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;
 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;
@@ -37,10 +37,7 @@
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchSite;
 
-
 public class RefactorAttributeTypeFeature extends AbstractCustomFeature {
-
-	//private static final TracerI tracer = TracingManager.getTracer(RefactorAttributeTypeFeature.class);				
 	
 	public RefactorAttributeTypeFeature(IFeatureProvider fp) {
 		super(fp);
@@ -72,18 +69,20 @@
 		getFeatureProvider().addAddIgnore((JavaPersistentType)jpa.getParent(), jpa.getName());
 		JavaResourceAttribute jra = jpa.getResourceAttribute();
 		getFeatureProvider().addRemoveIgnore((JavaPersistentType)jpa.getParent(), jra.getName());
-		boolean isMethodAnnotated = jra.getKind() == Kind.METHOD;
 
 		List<String> annotations = JpaArtifactFactory.instance().getAnnotationStrings(jpa);
 		JpaArtifactFactory.instance().deleteAttribute((JavaPersistentType)jpa.getParent(), jpa.getName(),
-				getFeatureProvider());		
-		JavaPersistentAttribute newAt = JpaArtifactFactory.instance().createANewAttribute((JavaPersistentType)jpa.getParent(),
-				jpa.getName(), newTypeName, attributeTypeTypeNames, jpa.getName(), annotations,
-				false, isMethodAnnotated, getFeatureProvider());
+				getFeatureProvider());
+		
+		JavaPersistentAttribute newAt = JpaArtifactFactory.instance().makeNewAttribute(getFeatureProvider(), (JavaPersistentType)jpa.getParent(),
+				null, jpa.getName(), newTypeName, jpa.getName(), newTypeName, attributeTypeTypeNames, annotations, false);
+		
 		getFeatureProvider().replaceAttribute(jpa, newAt);
+		
         IWorkbenchSite ws = ((IEditorPart)getDiagramEditor()).getSite();
         ICompilationUnit cu = getFeatureProvider().getCompilationUnit((JavaPersistentType)newAt.getParent());
-        getFeatureProvider().getJPAEditorUtil().formatCode(cu, ws);					
+        getFeatureProvider().getJPAEditorUtil().formatCode(cu, ws);	
+        JPAEditorUtil.organizeImports(cu, ws);
 		JpaArtifactFactory.instance().remakeRelations(getFeatureProvider(), 
 				((Shape)pe).getContainer(), (JavaPersistentType)newAt.getParent());
 	}
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/JPAEditorMessages.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/JPAEditorMessages.java
index c577927..08c8b41 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/JPAEditorMessages.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/JPAEditorMessages.java
@@ -29,6 +29,10 @@
 	public static String ClickAddAttributeButtonFeature_createAttributeButtonDescription;
 	public static String ClickAddAttributeButtonFeature_createAttributeButtonLabel;
 	
+	public static String ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureDescription;
+
+	public static String ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureName;
+
 	public static String ClickRemoveAttributeButtonFeature_createAttributeButtonDescription;
 	public static String ClickRemoveAttributeButtonFeature_createAttributeButtonlabel;
 	public static String ClickRemoveAttributeButtonFeature_deleteAttributeQuestion;
@@ -176,6 +180,9 @@
 	public static String JPAEditorToolBehaviorProvider_openMiniatureViewDesc;
 
 	public static String JPAEditorToolBehaviorProvider_CompositionPaletteName;
+
+	public static String JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonLabel;
+	public static String JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonDescription;
 	public static String JPAEditorToolBehaviorProvider_expandAttrMenuItem;
 
 	public static String JPAEditorToolBehaviorProvider_expandAttrMenuItemDescr;
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/messages.properties b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/messages.properties
index 4f1314a..17ffd80 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/messages.properties
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/i18n/messages.properties
@@ -18,6 +18,8 @@
 AddJPAEntityFeature_relationAttributesShapes=Relation Attributes
 ClickAddAttributeButtonFeature_createAttributeButtonDescription=Create a new attribute of this persistent type.
 ClickAddAttributeButtonFeature_createAttributeButtonLabel=Create Attribute
+ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureDescription=Create a new attribute of a basic collection type in the persistent type.
+ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureName=Create Collection Attribute
 
 ClickRemoveAttributeButtonFeature_createAttributeButtonDescription=Create a new attribute of this persistent type.
 ClickRemoveAttributeButtonFeature_createAttributeButtonlabel=Create Attribute
@@ -148,6 +150,8 @@
 JPAEditorToolBehaviorProvider_openMiniatureView=Open Miniature View 
 JPAEditorToolBehaviorProvider_openMiniatureViewDesc=Open the Miniature view to display the diagram in a larger scale.
 JPAEditorToolBehaviorProvider_CompositionPaletteName=Composition
+JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonLabel=Create Collection Attribute
+JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonDescription=Create a new attribute of a basic collection type in the persistent type.
 JPAEditorToolBehaviorProvider_expandAttrMenuItem=Expand Attributes Group
 JPAEditorToolBehaviorProvider_expandAttrMenuItemDescr=Expand the attributes group.
 JPAEditorToolBehaviorProvider_expandCompartToolTip=Double click to expand "{0}" attributes group.
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/modelintegration/util/ModelIntegrationUtil.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/modelintegration/util/ModelIntegrationUtil.java
index 2a60010..bb49a50 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/modelintegration/util/ModelIntegrationUtil.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/modelintegration/util/ModelIntegrationUtil.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2011 SAP AG and others.
+ * Copyright (c) 2005, 2012 SAP AG 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorFeatureProvider.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorFeatureProvider.java
index c12e148..d1d8397 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorFeatureProvider.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorFeatureProvider.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorImageCreator.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorImageCreator.java
index 9baccf6..a4caab9 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorImageCreator.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/IJPAEditorImageCreator.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorFeatureProvider.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorFeatureProvider.java
index 53655ff..da59395 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorFeatureProvider.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorFeatureProvider.java
@@ -84,6 +84,7 @@
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.AddJPAEntityFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.AddRelationFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickAddAttributeButtonFeature;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickAddElementCollectionButtonFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickRemoveAttributeButtonFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.CollapseAllEntitiesFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.CollapseCompartmentShapeFeature;
@@ -144,6 +145,8 @@
 public class JPAEditorFeatureProvider extends DefaultFeatureProvider implements IJPAEditorFeatureProvider {
 	
 	private ClickAddAttributeButtonFeature clickAddAttBtnFeat = null;
+	private ClickAddElementCollectionButtonFeature clickAddCollectionAttBtnFeat = null;
+
 	private ClickRemoveAttributeButtonFeature clickRemoveAttBtnFeat = null;
 	private IPeServiceUtil peServiceUtil = new PeServiceUtilImpl();
 	private IPeService peService = Graphiti.getPeService();
@@ -189,12 +192,14 @@
 		EList<Connection> allCons = getDiagram().getConnections();
 		HashSet<HasReferanceRelation> res = new HashSet<HasReferanceRelation>();
 		for (Connection conn : allCons) {
-			if (HasReferanceRelation.isHasReferenceConnection(conn)) 
-				try {
-					HasReferanceRelation hasReferenceRelation = (HasReferanceRelation) getBusinessObjectForPictogramElement(conn);
+			try {
+				Object ob = getBusinessObjectForPictogramElement(conn);
+				if(ob instanceof HasReferanceRelation) {
+					HasReferanceRelation hasReferenceRelation = (HasReferanceRelation) ob;
 					res.add(hasReferenceRelation);
-				} catch (NullPointerException e) {
 				}
+			} catch (NullPointerException e) {
+			}
 		}
 		return res;
 	}
@@ -494,6 +499,13 @@
     	return clickAddAttBtnFeat;
     }
     
+    public ClickAddElementCollectionButtonFeature getClickAddElementCollectionButtonFeature() {
+    	if (clickAddCollectionAttBtnFeat == null) {
+    		clickAddCollectionAttBtnFeat = new ClickAddElementCollectionButtonFeature(this);
+    	}
+    	return clickAddCollectionAttBtnFeat;
+    }
+    
     public ClickRemoveAttributeButtonFeature getClickRemoveAttributeButtonFeature() {
     	if (clickRemoveAttBtnFeat == null) {
     		clickRemoveAttBtnFeat = new ClickRemoveAttributeButtonFeature(this);
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageCreator.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageCreator.java
index 75efe4a..403ca00 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageCreator.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageCreator.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageProvider.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageProvider.java
index 824c9b2..224a860 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageProvider.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorImageProvider.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
@@ -24,15 +24,16 @@
     
     public static final String JPA_ENTITY 				= PREFIX + "entity"; 							//$NON-NLS-1$
     public static final String MAPPED_SUPERCLASS 		= PREFIX + "mapped_superclass"; 				//$NON-NLS-1$
-    public static final String EMBEDDABLE 		        = PREFIX + "embeddable"; 				//$NON-NLS-1$
+    public static final String EMBEDDABLE 		        = PREFIX + "embeddable"; 				        //$NON-NLS-1$
     public static final String ADD_JPA_ENTITY 			= PREFIX + "add_entity"; 						//$NON-NLS-1$    
     public static final String ADD_INHERITED_ENTITY 	= PREFIX + "add_inherited_entity";		        //$NON-NLS-1$
     public static final String ADD_MAPPED_SUPERCLASS	= PREFIX + "add_mapped_superclass";	        	//$NON-NLS-1$    
-    public static final String ADD_EMBEDDABLE	        = PREFIX + "add_embeddable";	        	//$NON-NLS-1$    
+    public static final String ADD_EMBEDDABLE	        = PREFIX + "add_embeddable";	        	    //$NON-NLS-1$    
     
     public static final String PRIMARY_KEY 				= PREFIX + "pk"; 								//$NON-NLS-1$
     public static final String ICON_BASIC 				= PREFIX + "field"; 							//$NON-NLS-1$
     public static final String ADD_ATTRIBUTE 			= PREFIX + "add_attribute"; 					//$NON-NLS-1$
+    public static final String ADD_ELEMENT_COLLECTION 	= PREFIX + "add_element-collection.gif";    	//$NON-NLS-1$
     public static final String REMOVE_ATTRIBUTE 		= PREFIX + "remove_attribute"; 					//$NON-NLS-1$
     public static final String ICON_ONE_TO_ONE 			= PREFIX + "one_to_one_relation"; 				//$NON-NLS-1$
     public static final String ICON_ONE_TO_MANY 		= PREFIX + "one_to_many_relation"; 				//$NON-NLS-1$
@@ -42,7 +43,7 @@
     public static final String ICON_VERSION 			= PREFIX + "version"; 							//$NON-NLS-1$ 
     public static final String ICON_TRANSIENT 			= PREFIX + "transient"; 						//$NON-NLS-1$  
     public static final String ICON_EMBEDDED 			= PREFIX + "embedded"; 							//$NON-NLS-1$ 
-    public static final String ICON_ELEMENT_COLLECTION  = PREFIX + "element-collection"; 							//$NON-NLS-1$ 
+    public static final String ICON_ELEMENT_COLLECTION  = PREFIX + "element-collection"; 				//$NON-NLS-1$ 
     public static final String ICON_UNMAPPED 			= PREFIX + "unmapped"; 							//$NON-NLS-1$  
 
 
@@ -71,13 +72,14 @@
         addImageFilePath(ICON_BASIC, ROOT_FOLDER_FOR_IMG + "ent/basic.gif");							//$NON-NLS-1$
         addImageFilePath(JPA_ENTITY, ROOT_FOLDER_FOR_IMG + "ent/entity.gif");							//$NON-NLS-1$
         addImageFilePath(MAPPED_SUPERCLASS, ROOT_FOLDER_FOR_IMG + "ent/mapped-superclass.gif");			//$NON-NLS-1$
-        addImageFilePath(EMBEDDABLE, ROOT_FOLDER_FOR_IMG + "ent/embeddable.gif");			//$NON-NLS-1$
+        addImageFilePath(EMBEDDABLE, ROOT_FOLDER_FOR_IMG + "ent/embeddable.gif");			            //$NON-NLS-1$
         addImageFilePath(ADD_JPA_ENTITY, ROOT_FOLDER_FOR_IMG + "ent/add_entity.gif");					//$NON-NLS-1$        
         addImageFilePath(ADD_INHERITED_ENTITY, ROOT_FOLDER_FOR_IMG + "ent/add_entity.gif"); 			//$NON-NLS-1$
         addImageFilePath(ADD_MAPPED_SUPERCLASS, ROOT_FOLDER_FOR_IMG + "ent/add_mapped-superclass.gif"); //$NON-NLS-1$
-        addImageFilePath(ADD_EMBEDDABLE, ROOT_FOLDER_FOR_IMG + "ent/add_embeddable.gif"); //$NON-NLS-1$
+        addImageFilePath(ADD_EMBEDDABLE, ROOT_FOLDER_FOR_IMG + "ent/add_embeddable.gif");               //$NON-NLS-1$
         addImageFilePath(PRIMARY_KEY, ROOT_FOLDER_FOR_IMG + "ent/id.gif");								//$NON-NLS-1$
         addImageFilePath(ADD_ATTRIBUTE, ROOT_FOLDER_FOR_IMG + "ent/add_attribute.gif");					//$NON-NLS-1$
+        addImageFilePath(ADD_ELEMENT_COLLECTION, ROOT_FOLDER_FOR_IMG + "ent/add_element-collection.gif"); //$NON-NLS-1$
         addImageFilePath(REMOVE_ATTRIBUTE, ROOT_FOLDER_FOR_IMG + "ent/remove_attribute.gif");			//$NON-NLS-1$
         addImageFilePath(ICON_ONE_TO_ONE, ROOT_FOLDER_FOR_IMG + "ent/one-to-one.gif");					//$NON-NLS-1$
         addImageFilePath(ICON_ONE_TO_MANY, ROOT_FOLDER_FOR_IMG + "ent/one-to-many.gif");				//$NON-NLS-1$
@@ -87,7 +89,7 @@
         addImageFilePath(ICON_VERSION, ROOT_FOLDER_FOR_IMG + "ent/version.gif"); 						//$NON-NLS-1$
         addImageFilePath(ICON_TRANSIENT, ROOT_FOLDER_FOR_IMG + "ent/transient.gif"); 					//$NON-NLS-1$
         addImageFilePath(ICON_EMBEDDED, ROOT_FOLDER_FOR_IMG + "ent/embedded.gif"); 						//$NON-NLS-1$
-        addImageFilePath(ICON_ELEMENT_COLLECTION, ROOT_FOLDER_FOR_IMG + "ent/element-collection.gif"); 						//$NON-NLS-1$
+        addImageFilePath(ICON_ELEMENT_COLLECTION, ROOT_FOLDER_FOR_IMG + "ent/element-collection.gif"); 	//$NON-NLS-1$
         addImageFilePath(ICON_UNMAPPED, ROOT_FOLDER_FOR_IMG + "ent/null-attribute-mapping.gif"); 		//$NON-NLS-1$
 
         addImageFilePath(ICON_ONE_TO_ONE_1_DIR, ROOT_FOLDER_FOR_IMG + "ent/one-to-one-1-dir.gif");		//$NON-NLS-1$
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorToolBehaviorProvider.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorToolBehaviorProvider.java
index bc02b90..f4d319c 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorToolBehaviorProvider.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/provider/JPAEditorToolBehaviorProvider.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
@@ -66,6 +66,7 @@
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.facade.EclipseFacade;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.AddAllEntitiesFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickAddAttributeButtonFeature;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickAddElementCollectionButtonFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickRemoveAttributeButtonFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.CollapseAllEntitiesFeature;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.CollapseCompartmentShapeFeature;
@@ -169,6 +170,17 @@
 			button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_createAttributeButtonDescription);
 			button.setIconId(JPAEditorImageProvider.ADD_ATTRIBUTE);
 			data.getDomainSpecificContextButtons().add(button);
+			
+			if(!JPAEditorUtil.checkJPAFacetVersion(getTargetJPAProject(), JPAEditorUtil.JPA_PROJECT_FACET_10)){
+				ClickAddElementCollectionButtonFeature addCollectionfeature = getConcreteFeatureProvider().getClickAddElementCollectionButtonFeature();
+				createCtx = new CreateContext();
+				createCtx.setTargetContainer(cs);
+				button = new ContextButtonEntry(addCollectionfeature, createCtx);
+				button.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonLabel);
+				button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonDescription);
+				button.setIconId(JPAEditorImageProvider.ADD_ELEMENT_COLLECTION);
+				data.getDomainSpecificContextButtons().add(button);
+			}
 
 			PictogramElementContext c = (PictogramElementContext) context;
 			RemoveAndSaveEntityFeature ft2 = new RemoveAndSaveEntityFeature(getFeatureProvider());
@@ -550,18 +562,7 @@
         		expandCompartmentMenuItem.setSubmenu(false);
         		return new IContextMenuEntry[] {collapseCompartmentMenuItem, expandCompartmentMenuItem};
             }
-            
-            /*
-            //Apply Pattern menu
-            
-            ICustomFeature applyPatternFeature = new ApplyPatternFeature(getFeatureProvider());
-            ContextMenuEntry applyPatternMenuItem = new ContextMenuEntry(applyPatternFeature, context);
-            applyPatternMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_applyPattern);
-            applyPatternMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_applyPatternDesc);
-            applyPatternMenuItem.setSubmenu(false);
-            //Apply Pattern menu
-             */
-            
+
             ContextMenuEntry refactorClassSubmenu = new ContextMenuEntry(null, null);
             refactorClassSubmenu.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorSubMenu);
             refactorClassSubmenu.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorSubMenu);
@@ -593,22 +594,21 @@
             		                             expandEntityMenuItem,
             		                             expandAllMenuItem,
             		                             restoreEntityMenuItem,
-            									 //applyPatternMenuItem, 
             									 removeAllEntitiesSubmenu,
             									 openJPADetailsViewMenuItem,
             									 openMiniatureViewMenuItem};
-            
-    		customFeature = new RefactorAttributeTypeFeature(getFeatureProvider());     		
+
+            customFeature = new RefactorAttributeTypeFeature(getFeatureProvider());     		
             ContextMenuEntry refactorAttributeTypeMenuItem = new ContextMenuEntry(customFeature, context);
             refactorAttributeTypeMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorAttributeType);
             refactorAttributeTypeMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorAttributeTypeDesc);
             refactorAttributeTypeMenuItem.setSubmenu(false);                   
 
+            
         	return new IContextMenuEntry[] { refactorClassSubmenu, 
         									 refactorAttributeTypeMenuItem, 
         									 collapseAllMenuItem,
         									 expandAllMenuItem,
-        									 //applyPatternMenuItem, 
         									 openJPADetailsViewMenuItem,
         									 openMiniatureViewMenuItem};
     	}
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasCollectionReferenceRelation.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasCollectionReferenceRelation.java
index 59972c8..e4ba675 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasCollectionReferenceRelation.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasCollectionReferenceRelation.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.relations;

 

 import org.eclipse.graphiti.mm.pictograms.Connection;

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasReferanceRelation.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasReferanceRelation.java
index d044a9f..da8c575 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasReferanceRelation.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasReferanceRelation.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.relations;

 

 import java.util.Hashtable;

@@ -9,11 +25,9 @@
 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.IJPAEditorFeatureProvider;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorConstants;

-import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorUtil;

 

 public abstract class HasReferanceRelation {

 	protected final static String SEPARATOR = ";hasReference;";							//$NON-NLS-1$

-	public final static String HAS_REFERENCE_CONNECTION_PROP_KEY = "is_has_reference_connection";	//$NON-NLS-1$

 

 	protected JavaPersistentType embeddingEntity;

 	protected JavaPersistentType embeddable;

@@ -58,14 +72,9 @@
 	public JavaPersistentType getEmbeddingEntity() {

 		return embeddingEntity; 

 	}

-	

-	public static boolean isHasReferenceConnection(Connection conn) {

-		String val = JPAEditorUtil.getPeUtil().getPropertyValue(conn, HAS_REFERENCE_CONNECTION_PROP_KEY);

-		return (Boolean.TRUE.toString().equals(val));

-	}

 

 	public String getId() {

-		return generateId(embeddable, embeddingEntity, embeddedAnnotatedAttribute.getName(), getReferenceType());

+		return generateId(embeddingEntity, embeddable, embeddedAnnotatedAttribute.getName(), getReferenceType());

 	}

 

 	public static String generateId(JavaPersistentType startJpt, JavaPersistentType endJpt, String embeddedAttributeName, HasReferenceType relType) {		

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasSingleReferenceRelation.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasSingleReferenceRelation.java
index 48c204d..807f064 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasSingleReferenceRelation.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/HasSingleReferenceRelation.java
@@ -1,3 +1,19 @@
+/*******************************************************************************

+ * <copyright>

+ *

+ * Copyright (c) 2012 SAP AG 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

+ *

+ * Contributors:

+ *    Petya Sabeva - initial API, implementation and documentation

+ *

+ * </copyright>

+ *

+ *******************************************************************************/

+

 package org.eclipse.jpt.jpadiagrameditor.ui.internal.relations;

 

 import org.eclipse.graphiti.mm.pictograms.Connection;

diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToManyBiDirRelation.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToManyBiDirRelation.java
index df0af0a..b57a95f 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToManyBiDirRelation.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToManyBiDirRelation.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
@@ -70,7 +70,6 @@
 		
 		mapKeyType = getMapKeyType(isMap, owner, embeddingEntity);
 		if(JpaArtifactFactory.instance().hasEmbeddableAnnotation(owner)){
-//			inverseAnnotatedAttribute = JpaArtifactFactory.instance().addEmbeddedAttribute(owner, inverse, mapKeyType, true, fp);
 			inverseAnnotatedAttribute = JPAEditorUtil.addAnnotatedAttribute(fp, inverse, embeddingEntity, true, mapKeyType);
 
 		} else {
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToOneBiDirRelation.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToOneBiDirRelation.java
index 96c025b..e83431c 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToOneBiDirRelation.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/ManyToOneBiDirRelation.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
@@ -60,7 +60,6 @@
 		boolean isMap = JPADiagramPropertyPage.isMapType(owner.getJpaProject().getProject());
 		String mapKeyType = getMapKeyType(isMap, owner, embeddingEntity);
 		if(JpaArtifactFactory.instance().hasEmbeddableAnnotation(owner)){
-//			inverseAnnotatedAttribute = JpaArtifactFactory.instance().addEmbeddedAttribute(owner, inverse, mapKeyType, true, fp);
 			inverseAnnotatedAttribute = JPAEditorUtil.addAnnotatedAttribute(fp, inverse, embeddingEntity, true, mapKeyType);
 
 		} else {
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/OneToOneBiDirRelation.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/OneToOneBiDirRelation.java
index 8784131..56ef135 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/OneToOneBiDirRelation.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/relations/OneToOneBiDirRelation.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
@@ -57,7 +57,6 @@
 		ownerAnnotatedAttribute = JPAEditorUtil.addAnnotatedAttribute(fp, owner, inverse, false, null);
 		
 		if(JpaArtifactFactory.instance().hasEmbeddableAnnotation(owner)){
-//			inverseAnnotatedAttribute = JpaArtifactFactory.instance().addEmbeddedAttribute(owner, inverse, null, false, fp);
 			inverseAnnotatedAttribute = JPAEditorUtil.addAnnotatedAttribute(fp, inverse, embeddingEntity, false, null);
 		} else {
 			inverseAnnotatedAttribute = JPAEditorUtil.addAnnotatedAttribute(fp, inverse, owner, false, null);
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/EntitiesCoordinatesXML.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/EntitiesCoordinatesXML.java
index 884e466..971ae1a 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/EntitiesCoordinatesXML.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/EntitiesCoordinatesXML.java
@@ -1,3 +1,19 @@
+/*******************************************************************************
+ * <copyright>
+ *
+ * Copyright (c) 2010, 2012 SAP AG 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
+ *
+ * Contributors:
+ *    Petya Sabeva - initial API, implementation and documentation
+ *
+ * </copyright>
+ *
+ *******************************************************************************/
+
 package org.eclipse.jpt.jpadiagrameditor.ui.internal.util;
 
 import java.io.Closeable;
@@ -42,6 +58,7 @@
 import org.w3c.dom.Text;
 import org.xml.sax.SAXException;
 
+@SuppressWarnings("resource")
 public class EntitiesCoordinatesXML {
 	
 	private Document document;
@@ -88,10 +105,8 @@
 		return (JpaProjectManager) ResourcesPlugin.getWorkspace().getAdapter(JpaProjectManager.class);
 	}
 	
-    private Closeable findXMLFile(boolean inputStream) throws FileNotFoundException{
-    	
-    	Iterator<JpaProject> iter = getJpaProjectManager().getJpaProjects().iterator();
-    	
+	private Closeable findXMLFile(boolean inputStream) throws FileNotFoundException{
+    	    	
     	IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
 		try {
 			IResource[] resources = project.members();
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorPredefinedRenderingStyle.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorPredefinedRenderingStyle.java
index d38ac35..bf657a1 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorPredefinedRenderingStyle.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorPredefinedRenderingStyle.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorUtil.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorUtil.java
index e0b5f3d..b43aeb0 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorUtil.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/IJPAEditorUtil.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorConstants.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorConstants.java
index dca88e1..3929af2 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorConstants.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorConstants.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorPredefinedColoredAreas.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorPredefinedColoredAreas.java
index 1038671..fd75cdd 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorPredefinedColoredAreas.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorPredefinedColoredAreas.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtil.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtil.java
index a4c5b15..07d3f0d 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtil.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtil.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2011 SAP AG and others.
+ * Copyright (c) 2005, 2012 SAP AG 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
@@ -1411,12 +1411,10 @@
 		actNameWithNonCapitalLetter = produceUniqueAttributeName(referencingJPT, actNameWithNonCapitalLetter);
 
 		ICompilationUnit referencingCU = JPAEditorUtil.getCompilationUnit(referencingJPT);
-		ICompilationUnit referencedCU = JPAEditorUtil.getCompilationUnit(referencedJPT);
 		return JpaArtifactFactory.instance().addAttribute(fp, referencingJPT, referencedJPT, mapKeyType,
 																			 nameWithNonCapitalLetter, 
 																			 actNameWithNonCapitalLetter, isCollection, 
-																			 referencingCU,
-																			 referencedCU);
+																			 referencingCU);
 	}
 	
 }
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtilImpl.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtilImpl.java
index b111c76..87a11d0 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtilImpl.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPAEditorUtilImpl.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2010 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java
index 5a3ee9e..e9ad502 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * <copyright>
  *
- * Copyright (c) 2005, 2011 SAP AG.
+ * Copyright (c) 2005, 2012 SAP AG.
  * 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
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JpaArtifactFactory.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JpaArtifactFactory.java
index 8df8768..5703776 100644
--- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JpaArtifactFactory.java
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JpaArtifactFactory.java
@@ -86,7 +86,6 @@
 import org.eclipse.jpt.jpa.core.resource.java.TableAnnotation;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.JPADiagramEditorPlugin;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.command.AddAttributeCommand;
-import org.eclipse.jpt.jpadiagrameditor.ui.internal.command.CreateNewAttributeCommand;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.command.DeleteAttributeCommand;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.command.RenameAttributeCommand;
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.command.RenameEntityCommand;
@@ -572,32 +571,6 @@
 			gje.setSpecifiedName(newName);
 		}
 	}
-
-	/**
-	 * Create inverseSideAttribute of the bidirectional relationship between an embeddable class
-	 * and an entity.
-	 * @param embeddableOwner - the embeddable class
-	 * @param inverseEntity - the entity class
-	 * @param mapKeyType
-	 * @param isCollection - whether the attribute is of a collection type
-	 * @param fp
-	 * @return the inverse attribute of the relationship.
-	 */
-	public JavaPersistentAttribute addEmbeddedAttribute(JavaPersistentType embeddableOwner, JavaPersistentType inverseEntity, String mapKeyType, boolean isCollection, IJPAEditorFeatureProvider fp){
-		ICompilationUnit ijl = fp.getCompilationUnit(inverseEntity);
-		JavaPersistentType embeddingEntity = null;
-		String attributeName = ""; //$NON-NLS-1$
-		String actName = ""; //$NON-NLS-1$
-		ICompilationUnit cu2 = null;
-		HasReferanceRelation ref = findFisrtHasReferenceRelationByEmbeddable(embeddableOwner, fp);
-		if(ref != null){
-			embeddingEntity = ref.getEmbeddingEntity();
-			attributeName = JPAEditorUtil.decapitalizeFirstLetter(embeddingEntity.getSimpleName());
-			actName = JPAEditorUtil.decapitalizeFirstLetter(embeddingEntity.getSimpleName());
-			cu2 = JPAEditorUtil.getCompilationUnit(embeddingEntity);
-		}
-		return  addAttribute(fp, inverseEntity, embeddingEntity, mapKeyType, attributeName, actName, isCollection, ijl, cu2);
-	}
 	
 	/**
 	 * Find the first {@link HasReferenceRelation} for the given embeddable class from all existing
@@ -655,33 +628,23 @@
 	 * @param attributeName - the name of the attribute
 	 * @param actName - the actual name of the attribute
 	 * @param isCollection - whether the attribute is of a collection type
-	 * @param cu1 - the {@link ICompilationUnit} of the referencing {@link JavaPersistentType}
-	 * @param cu2 - the {@link ICompilationUnit} of the referenced {@link JavaPersistentType}
+	 * @param cu - the {@link ICompilationUnit} of the referencing {@link JavaPersistentType}
 	 * @return the newly created relationship attribute.
 	 */
 	public JavaPersistentAttribute addAttribute(IJPAEditorFeatureProvider fp, JavaPersistentType jpt, 
 			JavaPersistentType attributeType, String mapKeyType, String attributeName,
-			String actName, boolean isCollection, ICompilationUnit cu1,
-			ICompilationUnit cu2) {
+			String actName, boolean isCollection, ICompilationUnit cu) {
 				
 		try {
 			if (doesAttributeExist(jpt, actName)) {
-				return (JavaPersistentAttribute) jpt
-						.resolveAttribute(attributeName);
+				return (JavaPersistentAttribute) jpt.resolveAttribute(attributeName);
 			}
-
 		} catch (JavaModelException e) {
 			JPADiagramEditorPlugin.logError("Cannnot create a new attribute with name " + attributeName, e); //$NON-NLS-1$				
 		}
 		
-		Command addAttributeCommand = new AddAttributeCommand(fp, jpt, attributeType, mapKeyType, attributeName, actName, isCollection, cu1, cu2);
-		try {
-			getJpaProjectManager().execute(addAttributeCommand, SynchronousUiCommandExecutor.instance());
-		} catch (InterruptedException e) {
-			JPADiagramEditorPlugin.logError("Cannot add a new attribute with name " + actName, e); //$NON-NLS-1$		
-		}
-
-		JavaPersistentAttribute res = jpt.getAttributeNamed(actName);
+		JavaPersistentAttribute res = makeNewAttribute(fp, jpt, cu, attributeName, attributeType.getName(), actName, mapKeyType, null, null, isCollection);
+		
 		return res;
 	}
 	
@@ -759,72 +722,31 @@
 	public String createNewAttribute(JavaPersistentType jpt, 
 			boolean isCollection, IJPAEditorFeatureProvider fp) {
 		
-		ICompilationUnit ijl = fp.getCompilationUnit(jpt);
 		String attrTypeName = "java.lang.String"; 																	//$NON-NLS-1$
 		String newAttrName = genUniqueAttrName(jpt, attrTypeName, fp);
-		return addNewAttribute(jpt, ijl, newAttrName, attrTypeName,
-				"", newAttrName, isCollection, fp); //$NON-NLS-1$
+		ICompilationUnit cu = fp.getCompilationUnit(jpt);
+		makeNewAttribute(fp, jpt, cu, newAttrName, attrTypeName, newAttrName, attrTypeName, null, null, isCollection);
+		return newAttrName;
 	}
-	
-	public String addNewAttribute(JavaPersistentType jpt, ICompilationUnit cu,
-			String attrName, String attrTypeName, String annotation,
-			String actName, boolean isCollection, IJPAEditorFeatureProvider fp) {
-		
-		try {
-			List<String> annotations = new LinkedList<String>();
-			annotations.add(annotation);
-			boolean isMethodAnnotated = JpaArtifactFactory.instance()
-					.isMethodAnnotated(jpt);
-			makeNewAttribute(fp, jpt, cu, attrName, attrTypeName, null, actName,
-					annotations, isCollection, isMethodAnnotated);
-		} catch (JavaModelException e) {
-			JPADiagramEditorPlugin.logError("Cannot create a new attribute with name " + attrName, e); //$NON-NLS-1$		
+
+	public JavaPersistentAttribute makeNewAttribute(IJPAEditorFeatureProvider fp, JavaPersistentType jpt, ICompilationUnit cu, String attrName, String attrTypeName,
+			String actName, String mapKeyType, String[] attrTypes, List<String> annotations, boolean isCollection) {
+
+		if(cu == null){
+			cu = fp.getCompilationUnit(jpt);
 		}
-		return attrName;				
-	}
-	
-	public JavaPersistentAttribute createANewAttribute(JavaPersistentType jpt, 
-			String attrName, String attrTypeName, String[] attrTypeElementNames,
-			String actName, List<String> annotations, boolean isCollection,
-			boolean isMethodAnnotated, IJPAEditorFeatureProvider fp) {
 		
-		ICompilationUnit ijl = fp.getCompilationUnit(jpt);
-		return addANewAttribute(jpt, ijl, attrName, attrTypeName,
-				attrTypeElementNames, actName, annotations, isCollection,
-				isMethodAnnotated, fp);
-	}
-	
-	private JavaPersistentAttribute addANewAttribute(JavaPersistentType jpt, 
-			ICompilationUnit cu, String attrName, String attrTypeName,
-			String[] attrTypeElementNames, String actName,
-			List<String> annotations, boolean isCollection,
-			boolean isMethodAnnotated, IJPAEditorFeatureProvider fp) {
-		
-		JavaPersistentAttribute attr = null;
-		try {
-			attr = makeNewAttribute(fp, jpt, cu, attrName, attrTypeName,
-					attrTypeElementNames, actName, annotations, isCollection,
-					isMethodAnnotated);
-		} catch (JavaModelException e) {
-			JPADiagramEditorPlugin.logError("Cannot create a new attribute with name " + attrName, e); //$NON-NLS-1$		
-		}
-		return attr;						
-	}
-	
-	public JavaPersistentAttribute makeNewAttribute(IFeatureProvider fp, JavaPersistentType jpt, 
-			ICompilationUnit cu, String attrName, String attrTypeName,
-			String[] attrTypes, String actName,
-			List<String> annotations, boolean isCollection,
-			boolean isMethodAnnotated) throws JavaModelException {
-				
-		Command createNewAttributeCommand = new CreateNewAttributeCommand(jpt, cu, attrName, attrTypeName, attrTypes, actName, annotations, isCollection, isMethodAnnotated);
+		Command createNewAttributeCommand = new AddAttributeCommand(fp, jpt, attrTypeName, mapKeyType, attrName, actName, attrTypes, annotations, isCollection, cu);
 		try {
 			getJpaProjectManager().execute(createNewAttributeCommand, SynchronousUiCommandExecutor.instance());
 		} catch (InterruptedException e) {
 			JPADiagramEditorPlugin.logError("Cannot create a new attribute with name " + attrName, e); //$NON-NLS-1$		
 		}
 
-		JavaPersistentAttribute jpa = jpt.getAttributeNamed(attrName);		
+		JavaPersistentAttribute jpa = jpt.getAttributeNamed(attrName);
+		if(jpa == null){
+			jpa = jpt.getAttributeNamed(actName);
+		}
 		return jpa;
 	}
 		
@@ -936,7 +858,7 @@
 		CompilationUnit jdtCU = jpt.getJavaResourceType().getJavaResourceCompilationUnit().buildASTRoot();
 		JavaResourceAttribute jrpt = persistentAttribite.getResourceAttribute();
 		List<String> res = new LinkedList<String>();
-		for (Annotation an : jrpt.getAnnotations()) {
+		for (Annotation an : jrpt.getTopLevelAnnotations()) {
 			org.eclipse.jdt.core.dom.Annotation jdtAn = an.getAstAnnotation(jdtCU);
 			res.add(jdtAn.toString());
 		}
@@ -1591,81 +1513,6 @@
 		return false;
 	}
 	
-	/**
-	 * Create the attribute's getter method in entity's compilation unit.
-	 * @param attrName - the name of the attribute
-	 * @param attrType - the type of the attribute
-	 * @param attrTypeElementNames
-	 * @param actName
-	 * @param annotations
-	 * @param isCollection
-	 * @return the string representation of the attribute's getter method.
-	 */
-	public String genGetterContents(String attrName, String attrType,
-			String[] attrTypeElementNames, String actName,
-			List<String> annotations, boolean isCollection) {
-		
-		String attrNameWithCapitalA = actName.substring(0, 1).toUpperCase(Locale.ENGLISH)
-				+ actName.substring(1);
-		String contents = ""; //$NON-NLS-1$
-		if (annotations != null) {
-			Iterator<String> it = annotations.iterator();
-			while (it.hasNext()) {
-				String an = it.next();
-				contents += "   " + an + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		}
-		if (isCollection) {
-			contents += "    public Collection<"+ attrType + "> get" + attrNameWithCapitalA + "() {\n" +  	//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-					"        return "	//$NON-NLS-1$
-					+ JPAEditorUtil.decapitalizeFirstLetter(actName) + ";\n" + //$NON-NLS-1$ 
-			  "    }\n";  //$NON-NLS-1$			
-		} else {
-			contents += "    public "+ attrType + //$NON-NLS-1$
-							((attrTypeElementNames == null)?"":("<" + JPAEditorUtil.createCommaSeparatedListOfSimpleTypeNames(attrTypeElementNames) + ">")) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-							(attrType.equals("boolean") ? " is" : " get") + attrNameWithCapitalA + "() {\n" +  	//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
-					"        return "	//$NON-NLS-1$
-					+ JPAEditorUtil.decapitalizeFirstLetter(actName) + ";\n" + //$NON-NLS-1$ 
-			  "    }\n";  																//$NON-NLS-1$			
-		}
-		return contents;
-	}
-	
-	/**
-	 * Create the attribute's setter method in entity's compilation unit.
-	 * @param attrName - the name of the attribute
-	 * @param attrType - the type of the attribute
-	 * @param attrTypeElementNames
-	 * @param actName
-	 * @param isCollection
-	 * @return the string representation of the attribute's setter method.
-	 */
-	public String genSetterContents(String attrName, String attrType,
-			String[] attrTypeElementNames, String actName, boolean isCollection) {
-		
-		String attrNameWithCapitalA = actName.substring(0, 1).toUpperCase(Locale.ENGLISH)
-				+ actName.substring(1);
-		String contents = ""; //$NON-NLS-1$
-		if (isCollection) {
-			contents = "    public void set" + attrNameWithCapitalA + "(Collection<" + attrType + "> param) " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-					"{\n" + //$NON-NLS-1$ 
-					"        this."	//$NON-NLS-1$
-					+ JPAEditorUtil.decapitalizeFirstLetter(actName)
-					+ " = param;\n" + //$NON-NLS-1$ 
-						  "    }\n";  	//$NON-NLS-1$
-		} else {
-			contents = "    public void set" + attrNameWithCapitalA + "(" + attrType + //$NON-NLS-1$ //$NON-NLS-2$
-								((attrTypeElementNames == null)?"":("<" + JPAEditorUtil.createCommaSeparatedListOfSimpleTypeNames(attrTypeElementNames) + ">")) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-					" param) {\n"	//$NON-NLS-1$
-					+ 
-					"        this."	//$NON-NLS-1$
-					+ JPAEditorUtil.decapitalizeFirstLetter(actName)
-					+ " = param;\n" + //$NON-NLS-1$ 
-			  "    }\n";  			//$NON-NLS-1$			
-		}
-		return contents;
-	}
-	
 	private boolean doesAttributeExist(JavaPersistentType jpt, String name)
 											throws JavaModelException {
 		boolean exists = false;
diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/internal/JPACreateFactory.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/internal/JPACreateFactory.java
index 3de6230..cec84fa 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/internal/JPACreateFactory.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/internal/JPACreateFactory.java
@@ -593,7 +593,7 @@
 		if (javaPersistentType == null)
 			throw new RuntimeException("The entity could not be created");
 		ICompilationUnit compilationUnit = JavaCore.createCompilationUnitFrom(entity);
-		JpaArtifactFactory.instance().addNewAttribute(javaPersistentType, compilationUnit, attName, attType, annotation, attActName, isCollection, null);
+		JpaArtifactFactory.instance().makeNewAttribute(null, javaPersistentType, compilationUnit, attName, attType, attActName, attType, null, null, isCollection);
 	}
 	
 	private IFile createFieldAnnotatedEntity(IFolder folder, String packageName, String entityName) throws IOException, CoreException {
diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EditorProxy.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EditorProxy.java
index ccfbd64..7fc8418 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EditorProxy.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EditorProxy.java
@@ -25,8 +25,11 @@
 import org.eclipse.gef.LayerConstants;

 import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;

 import org.eclipse.graphiti.features.IFeatureProvider;

+import org.eclipse.graphiti.internal.ExternalPictogramLink;

+import org.eclipse.graphiti.mm.Property;

 import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;

 import org.eclipse.graphiti.mm.pictograms.PictogramElement;

+import org.eclipse.graphiti.services.Graphiti;

 import org.eclipse.graphiti.ui.internal.contextbuttons.ContextButton;

 import org.eclipse.graphiti.ui.internal.contextbuttons.ContextButtonPad;

 import org.eclipse.graphiti.ui.internal.parts.DiagramEditPart;

@@ -35,7 +38,9 @@
 import org.eclipse.jface.dialogs.IDialogConstants;

 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;

 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;

+import org.eclipse.jpt.jpa.core.jpa2.MappingKeys2_0;

 import org.eclipse.jpt.jpa.ui.internal.details.JptUiDetailsMessages;

+import org.eclipse.jpt.jpadiagrameditor.swtbot.tests.internal.Utils;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.i18n.JPAEditorMessages;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.IJPAEditorFeatureProvider;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.HasReferanceRelation;

@@ -63,6 +68,8 @@
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotStyledText;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;

+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;

+import org.eclipse.swtbot.swt.finder.widgets.TimeoutException;

 import org.eclipse.ui.IEditorPart;

 import org.eclipse.ui.IEditorReference;

 

@@ -73,7 +80,7 @@
 	protected SWTGefBot bot;

 

 	private SWTBotGefEditor jpaDiagramEditor;

-	

+

 	/**

 	 * Create proxy object.

 	 * 

@@ -84,19 +91,22 @@
 		this.bot = bot;

 	}

 

-	public SWTBotGefEditor openDiagramOnJPAContentNode(String name, boolean isJPA20) {

+	public SWTBotGefEditor openDiagramOnJPAContentNode(String name,

+			boolean isJPA20) {

 		SWTBotTree projectTree = workbenchBot.viewByTitle("Project Explorer")

 				.bot().tree();

-		projectTree.expandNode(name).expandNode("JPA Content").select();

+		SWTBotTreeItem item = projectTree.expandNode(name)

+				.expandNode("JPA Content").select();

+		assertTrue("The JPA Content node is disabled.", item.isEnabled());

 		ContextMenuHelper.clickContextMenu(projectTree, "Open Diagram");

 

-		if(isJPA20) {

+		if (isJPA20) {

 			workbenchBot

-				.waitUntil(

-						shellIsActive(JPAEditorMessages.OpenJpaDiagramActionDelegate_jpaSupportWarningTitle),

-						10000);

+					.waitUntil(

+							shellIsActive(JPAEditorMessages.OpenJpaDiagramActionDelegate_jpaSupportWarningTitle),

+							10000);

 			SWTBotShell jpaSupportWarningDialog = workbenchBot

-				.shell(JPAEditorMessages.OpenJpaDiagramActionDelegate_jpaSupportWarningTitle);

+					.shell(JPAEditorMessages.OpenJpaDiagramActionDelegate_jpaSupportWarningTitle);

 			getOkButton(jpaSupportWarningDialog).click();

 		}

 

@@ -137,7 +147,8 @@
 	 * @param attribute

 	 * @return the "Select Type" dialog

 	 */

-	public SWTBotShell getSelectNewAttributeTypeDialog(SWTBotGefEditPart attribute) {

+	public SWTBotShell getSelectNewAttributeTypeDialog(

+			SWTBotGefEditPart attribute) {

 		attribute.click();

 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorAttributeType);

@@ -176,7 +187,8 @@
 	 * @param fp

 	 * @return the value of the attribute's type

 	 */

-	public String getAttributeType(String attributeName, final IFeatureProvider fp) {

+	public String getAttributeType(String attributeName,

+			final IFeatureProvider fp) {

 		SWTBotGefEditPart attribute = jpaDiagramEditor

 				.getEditPart(attributeName);

 		PictogramElement el = (PictogramElement) attribute.part().getModel();

@@ -198,15 +210,51 @@
 	 */

 	public SWTBotGefEditPart addAttributeToJPT(SWTBotGefEditPart jptType,

 			String attributeName) {

-		pressEntityContextButton(jptType,

+		

+		JavaPersistentType jpt = getJPTObjectForGefElement(jptType);

+		

+		System.out.println(">>>>>> Attribute is trying to be added in " + jpt.getName());

+		

+		pressEntityContextButton(

+				jptType,

 				JPAEditorMessages.JPAEditorToolBehaviorProvider_createAttributeButtonlabel);

 

 		bot.waitUntil(new ElementIsShown(jpaDiagramEditor, attributeName),

 				10000);

 		List<SWTBotGefEditPart> editParts = new ArrayList<SWTBotGefEditPart>();

 		editParts.add(jptType);

-		SWTBotGefEditPart attribute = jpaDiagramEditor

-				.getEditpart(attributeName, editParts);

+		SWTBotGefEditPart attribute = jpaDiagramEditor.getEditpart(

+				attributeName, editParts);

+		assertNotNull("Atrribute is not added.", attribute);

+		

+		System.out.println(">>>>>> Attribute is successfully added in " + jpt.getName());

+

+		assertTrue("The newly added attribute must be selected.",

+				jpaDiagramEditor.selectedEditParts().size() == 1);

+		// assertTrue("The newly added attribute must be selected.",

+		// jpaDiagramEditor.selectedEditParts().contains(attribute));

+

+		assertTrue(

+				"\"Other Attributes\" section must be visible!",

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+						jptType));

+

+		return attribute;

+	}

+

+	public SWTBotGefEditPart addElementCollectionAttributeToJPT(

+			SWTBotGefEditPart jptType, String attributeName) {

+		pressEntityContextButton(

+				jptType,

+				JPAEditorMessages.JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonLabel);

+

+		bot.waitUntil(new ElementIsShown(jpaDiagramEditor, attributeName),

+				10000);

+		List<SWTBotGefEditPart> editParts = new ArrayList<SWTBotGefEditPart>();

+		editParts.add(jptType);

+		SWTBotGefEditPart attribute = jpaDiagramEditor.getEditpart(

+				attributeName, editParts);

 		assertNotNull("Atrribute is not added.", attribute);

 

 		assertTrue("The newly added attribute must be selected.",

@@ -214,8 +262,17 @@
 		assertTrue("The newly added attribute must be selected.",

 				jpaDiagramEditor.selectedEditParts().contains(attribute));

 

-		assertTrue("\"Other Attributes\" section must be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, jptType));

+		assertTrue(

+				"\"Other Attributes\" section must be visible!",

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+						jptType));

+

+		JavaPersistentAttribute jpa = getJPAObjectForGefElement(attribute);

+		assertEquals(

+				"The newly added attribute must be mapped as element-collection.",

+				MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY,

+				jpa.getMappingKey());

 

 		return attribute;

 	}

@@ -228,7 +285,8 @@
 	 * @return true, if the section with the specified name is visible, false

 	 *         otherwise

 	 */

-	public boolean isSectionVisible(String sectionTitle, SWTBotGefEditPart editPart) {

+	public boolean isSectionVisible(String sectionTitle,

+			SWTBotGefEditPart editPart) {

 		List<SWTBotGefEditPart> editParts = new ArrayList<SWTBotGefEditPart>();

 		editParts.add(editPart);

 		SWTBotGefEditPart section = jpaDiagramEditor.getEditpart(sectionTitle,

@@ -249,8 +307,21 @@
 		jpaDiagramEditor

 				.activateTool(JPAEditorMessages.CreateJPAEntityFeature_jpaEntityFeatureName);

 		jpaDiagramEditor.doubleClick(x, y);

-		bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 10000);

 

+		try{

+			bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 30000);

+		} catch (TimeoutException e){

+			jpaDiagramEditor.activateDefaultTool();

+			

+			Utils.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> yavno tova e");

+			

+			jpaDiagramEditor

+			.activateTool(JPAEditorMessages.CreateJPAEntityFeature_jpaEntityFeatureName);

+			jpaDiagramEditor.doubleClick(x, y);

+	

+			bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 30000);

+		}

+		

 		List<SWTBotGefEditPart> entities = jpaDiagramEditor.mainEditPart()

 				.children();

 		assertFalse("Editor must contains at least one entity!",

@@ -264,13 +335,19 @@
 

 		assertTrue(

 				"\"Primary Key\" section must be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_primaryKeysShape, entity));

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_primaryKeysShape,

+						entity));

 		assertFalse(

 				"\"Relation Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes, entity));

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes,

+						entity));

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, entity));

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+						entity));

 

 		return entity;

 	}

@@ -282,11 +359,25 @@
 	 *            - the name of the mapped superclass to be added

 	 * @return the added mapped superclass

 	 */

-	public SWTBotGefEditPart addMappedSuperclassToDiagram(int x, int y, String entityName) {

+	public SWTBotGefEditPart addMappedSuperclassToDiagram(int x, int y,

+			String entityName) {

 		jpaDiagramEditor

 				.activateTool(JPAEditorMessages.CreateMappedSuperclassFeature_createMappedSuperclassFeatureName);

 		jpaDiagramEditor.doubleClick(x, y);

-		bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 10000);

+				

+		try{

+			bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 30000);

+		} catch (TimeoutException e){

+			jpaDiagramEditor.activateDefaultTool();

+			

+			Utils.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> yavno tova e");

+			

+			jpaDiagramEditor

+			.activateTool(JPAEditorMessages.CreateMappedSuperclassFeature_createMappedSuperclassFeatureName);

+			jpaDiagramEditor.doubleClick(x, y);

+	

+			bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 30000);

+		}

 

 		List<SWTBotGefEditPart> entities = jpaDiagramEditor.mainEditPart()

 				.children();

@@ -299,22 +390,26 @@
 

 		List<SWTBotGefEditPart> parts = new ArrayList<SWTBotGefEditPart>();

 		parts.add(mappedSuperclass);

-		

-		SWTBotGefEditPart idAttribute = jpaDiagramEditor.getEditpart("id", parts);

+

+		SWTBotGefEditPart idAttribute = jpaDiagramEditor.getEditpart("id",

+				parts);

 		assertNull("Mapped superclass must not have a primary key attribute!",

 				idAttribute);

 

 		assertFalse(

 				"\"Primary Key\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_primaryKeysShape,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_primaryKeysShape,

 						mappedSuperclass));

 		assertFalse(

 				"\"Relation Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes,

 						mappedSuperclass));

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						mappedSuperclass));

 

 		return mappedSuperclass;

@@ -327,11 +422,26 @@
 	 *            - the name of the mapped superclass to be added

 	 * @return the added mapped superclass

 	 */

-	public SWTBotGefEditPart addEmbeddableToDiagram(int x, int y, String entityName) {

-		jpaDiagramEditor.activateTool(JPAEditorMessages.CreateEmbeddableFeature_EmbeddableFeatureName);

+	public SWTBotGefEditPart addEmbeddableToDiagram(int x, int y,

+			String entityName) {

+		jpaDiagramEditor

+				.activateTool(JPAEditorMessages.CreateEmbeddableFeature_EmbeddableFeatureName);

 		jpaDiagramEditor.doubleClick(x, y);

-		bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 10000);

-

+		

+		try{

+			bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 30000);

+		} catch (TimeoutException e){

+			jpaDiagramEditor.activateDefaultTool();

+			

+			Utils.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> yavno tova e");

+			

+			jpaDiagramEditor

+			.activateTool(JPAEditorMessages.CreateEmbeddableFeature_EmbeddableFeatureName);

+			jpaDiagramEditor.doubleClick(x, y);

+	

+			bot.waitUntil(new ElementIsShown(jpaDiagramEditor, entityName), 30000);

+		}

+		

 		List<SWTBotGefEditPart> entities = jpaDiagramEditor.mainEditPart()

 				.children();

 		assertFalse("Editor must contains at least one embeddable!",

@@ -349,15 +459,18 @@
 

 		assertFalse(

 				"\"Primary Key\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_primaryKeysShape,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_primaryKeysShape,

 						embeddable));

 		assertFalse(

 				"\"Relation Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes,

 						embeddable));

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						embeddable));

 

 		return embeddable;

@@ -429,8 +542,10 @@
 	 * menu is pressed. Press the OK button.

 	 */

 	public void confirmRemoveEntitiesFromDiagramDialog() {

-		workbenchBot.waitUntil(

-			shellIsActive(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAllEntitiesMenu), 10000);

+		workbenchBot

+				.waitUntil(

+						shellIsActive(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAllEntitiesMenu),

+						10000);

 		SWTBotShell shell = workbenchBot

 				.shell(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAllEntitiesMenu);

 		assertTrue("Ok button is disabled", getOkButton(shell).isEnabled());

@@ -450,8 +565,8 @@
 

 		List<SWTBotGefEditPart> entitiesInDiagram = jpaDiagramEditor

 				.mainEditPart().children();

-		assertFalse("Diagram must contain at least one entity!",

-				entitiesInDiagram.isEmpty());

+//		assertFalse("Diagram must contain at least one entity!",

+//				entitiesInDiagram.isEmpty());

 

 		for (int i = 0; i < entitiesInDiagram.size(); i++) {

 			SWTBotGefEditPart editPart = entitiesInDiagram.get(i);

@@ -467,14 +582,14 @@
 		waitASecond();

 		entitiesInDiagram = jpaDiagramEditor.mainEditPart().children();

 		assertTrue("Diagram must be empty!", entitiesInDiagram.isEmpty());

-		assertTrue("Editor must be dirty!", jpaDiagramEditor.isDirty());

+//		assertTrue("Editor must be dirty!", jpaDiagramEditor.isDirty());

 	}

 

 	public void deleteAttributeInJPT(SWTBotGefEditPart jpt, String attributeName) {

-		

+

 		waitASecond();

 		jpaDiagramEditor.activateDefaultTool();

-		

+

 		List<SWTBotGefEditPart> jptParts = new ArrayList<SWTBotGefEditPart>();

 		jptParts.add(jpt);

 		SWTBotGefEditPart attribute = jpaDiagramEditor.getEditpart(

@@ -483,8 +598,8 @@
 		attribute.click();

 		jpaDiagramEditor.clickContextMenu("Delete");

 		confirmDelete();

-		bot.waitUntil(new ElementDisappears(jpaDiagramEditor, jpt, attributeName),

-				10000);

+		bot.waitUntil(new ElementDisappears(jpaDiagramEditor, jpt,

+				attributeName), 10000);

 	}

 

 	/**

@@ -494,7 +609,8 @@
 	 * @param contextButtonName

 	 *            - the name of the button to be pressed

 	 */

-	public void pressEntityContextButton(SWTBotGefEditPart part, String contextButtonName) {

+	public void pressEntityContextButton(SWTBotGefEditPart part,

+			String contextButtonName) {

 		pressContextButton(part, contextButtonName);

 	}

 

@@ -503,7 +619,8 @@
 	 * 

 	 */

 	public void pressAttributeDeleteContextButton(SWTBotGefEditPart part) {

-		pressContextButton(part,

+		pressContextButton(

+				part,

 				JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteAttributeButtonlabel);

 	}

 

@@ -514,7 +631,8 @@
 	 * @param contextButtonName

 	 *            - the name of the button to be pressed.

 	 */

-	private void pressContextButton(SWTBotGefEditPart part, String contextButtonName) {

+	private void pressContextButton(SWTBotGefEditPart part,

+			String contextButtonName) {

 		jpaDiagramEditor.click(0, 0);

 		jpaDiagramEditor.click(part);

 

@@ -658,14 +776,22 @@
 	 * @return the IRelation object for the given GEF Connection

 	 */

 	@SuppressWarnings("restriction")

-	public HasReferanceRelation getHasReferenceConnection(SWTBotGefConnectionEditPart gefConn) {

+	public HasReferanceRelation getHasReferenceConnection(

+			SWTBotGefConnectionEditPart gefConn) {

 		IFeatureProvider fp = ((DiagramEditPart) jpaDiagramEditor

 				.mainEditPart().part()).getFeatureProvider();

 		FreeFormConnection conn = (FreeFormConnection) gefConn.part()

 				.getModel();

+		assertNotNull("Relation is not created.", conn);

+			

 		Object ob = fp.getBusinessObjectForPictogramElement(conn);

+		

+		assertNotNull("Such a relation must exists.", ob);

 		if (ob instanceof HasReferanceRelation) {

+			System.out.println("======================= axam axam");

 			return (HasReferanceRelation) ob;

+		} else if (ob instanceof IRelation) {

+			System.out.println("++++++++++++ dobre");

 		}

 

 		return null;

@@ -678,7 +804,8 @@
 	 * @return the java persistent type for the given element, null if the

 	 *         selected element is not an entity

 	 */

-	public JavaPersistentType getJPTObjectForGefElement(SWTBotGefEditPart element) {

+	public JavaPersistentType getJPTObjectForGefElement(

+			SWTBotGefEditPart element) {

 		final IFeatureProvider fp = ((DiagramEditPart) jpaDiagramEditor

 				.mainEditPart().part()).getFeatureProvider();

 		PictogramElement el = (PictogramElement) element.part().getModel();

@@ -689,7 +816,8 @@
 		return null;

 	}

 

-	public JavaPersistentAttribute getJPAObjectForGefElement(SWTBotGefEditPart element) {

+	public JavaPersistentAttribute getJPAObjectForGefElement(

+			SWTBotGefEditPart element) {

 		final IFeatureProvider fp = ((DiagramEditPart) jpaDiagramEditor

 				.mainEditPart().part()).getFeatureProvider();

 		PictogramElement el = (PictogramElement) element.part().getModel();

@@ -774,11 +902,13 @@
 		assertNotNull(jpaDiagramEditor.getEditPart(inverseAttributeName));

 		assertTrue(

 				"\"Relation Attributes\" section of the owner entity must be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 		assertTrue(

 				"\"Relation Attributes\" section of the inverse entity must be visible!",

-				isSectionVisible(entity2,

+				isSectionVisible(

+						entity2,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -807,7 +937,8 @@
 		assertNotNull(jpaDiagramEditor.getEditPart(inverseAttributeName));

 		assertTrue(

 				"\"Relation Attributes\" section of the owner entity must be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -836,11 +967,13 @@
 		assertNotNull(jpaDiagramEditor.getEditPart(attributeName));

 		assertTrue(

 				"\"Relation Attributes\" section of the owner entity must be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 		assertFalse(

 				"\"Relation Attributes\" section of the inverse entity must not be visible!",

-				isSectionVisible(entity2,

+				isSectionVisible(

+						entity2,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -867,7 +1000,8 @@
 		assertNotNull(jpaDiagramEditor.getEditPart(attributeName));

 		assertTrue(

 				"\"Relation Attributes\" section of the owner entity must be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -883,9 +1017,9 @@
 	 * @param ownerAttributeName

 	 * @param inverseAttributeName

 	 */

-	public void assertBiDirRelationIsDeleted(SWTBotGefEditPart entity1, SWTBotGefEditPart entity2,

-			SWTBotGefConnectionEditPart connection, String ownerAttributeName,

-			String inverseAttributeName) {

+	public void assertBiDirRelationIsDeleted(SWTBotGefEditPart entity1,

+			SWTBotGefEditPart entity2, SWTBotGefConnectionEditPart connection,

+			String ownerAttributeName, String inverseAttributeName) {

 		connection.select();

 		jpaDiagramEditor.clickContextMenu("Delete");

 		confirmDelete();

@@ -895,14 +1029,16 @@
 		assertTrue(entity2.targetConnections().isEmpty());

 		assertNull(jpaDiagramEditor.getEditPart(ownerAttributeName));

 		assertNull(jpaDiagramEditor.getEditPart(inverseAttributeName));

-				

+

 		assertFalse(

 				"\"Relation Attributes\" section of the owner entity must not be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 		assertFalse(

 				"\"Relation Attributes\" section of the inverse entity must not be visible!",

-				isSectionVisible(entity2,

+				isSectionVisible(

+						entity2,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -931,7 +1067,8 @@
 		assertNull(jpaDiagramEditor.getEditPart(inverseAttributeName));

 		assertFalse(

 				"\"Relation Attributes\" section of the owner entity must not be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -947,8 +1084,9 @@
 	 * @param ownerAttributeName

 	 * @param inverseAttributeName

 	 */

-	public void assertUniDirRelationIsDeleted(SWTBotGefEditPart entity1, SWTBotGefEditPart entity2,

-			SWTBotGefConnectionEditPart connection, String attributeName) {

+	public void assertUniDirRelationIsDeleted(SWTBotGefEditPart entity1,

+			SWTBotGefEditPart entity2, SWTBotGefConnectionEditPart connection,

+			String attributeName) {

 		connection.select();

 		jpaDiagramEditor.clickContextMenu("Delete");

 		confirmDelete();

@@ -959,11 +1097,13 @@
 		assertNull(jpaDiagramEditor.getEditPart(attributeName));

 		assertFalse(

 				"\"Relation Attributes\" section of the owner entity must not be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 		assertFalse(

 				"\"Relation Attributes\" section of the inverse entity must not be visible!",

-				isSectionVisible(entity2,

+				isSectionVisible(

+						entity2,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -990,7 +1130,8 @@
 		assertNull(jpaDiagramEditor.getEditPart(attributeName));

 		assertFalse(

 				"\"Relation Attributes\" section of the owner entity must not be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

@@ -1001,8 +1142,8 @@
 	 * @param entity1

 	 * @param entity2

 	 */

-	public void assertConnectionIsCreated(SWTBotGefEditPart entity1, SWTBotGefEditPart entity2,

-			boolean isBiDIr) {

+	public void assertConnectionIsCreated(SWTBotGefEditPart entity1,

+			SWTBotGefEditPart entity2, boolean isBiDIr) {

 		// assert that there is exactly one relationship, which start from

 		// entity1

 		// and that there is no relationship which starts from entity2

@@ -1014,26 +1155,30 @@
 		// and that there is no relationship which end in entity1.

 		assertFalse(entity2.targetConnections().isEmpty());

 		assertEquals(1, entity2.targetConnections().size());

-//		assertTrue(entity1.targetConnections().isEmpty());

+		// assertTrue(entity1.targetConnections().isEmpty());

 

 		assertTrue(

 				"\"Relation Attributes\" section of the owner entity must be visible!",

-				isSectionVisible(entity1,

+				isSectionVisible(

+						entity1,

 						JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 		if (isBiDIr) {

 			assertTrue(

 					"\"Relation Attributes\" section of the inverse entity must be visible!",

-					isSectionVisible(entity2,

+					isSectionVisible(

+							entity2,

 							JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 		} else {

 			assertFalse(

 					"\"Relation Attributes\" section of the inverse entity must not be visible!",

-					isSectionVisible(entity2,

+					isSectionVisible(

+							entity2,

 							JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 		}

 	}

 

-	public void assertIsARelationExists(SWTBotGefEditPart entity1, SWTBotGefEditPart entity2) {

+	public void assertIsARelationExists(SWTBotGefEditPart entity1,

+			SWTBotGefEditPart entity2) {

 		// assert that there is exactly one relationship, which start from

 		// entity2 and that there is no relationship which starts from entity2

 		assertFalse(entity2.sourceConnections().isEmpty());

@@ -1063,7 +1208,8 @@
 		assertFalse(entity1.targetConnections().isEmpty());

 		assertEquals(1, entity1.targetConnections().size());

 

-		assertTrue(isSectionVisible(entity1, JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

+		assertTrue(isSectionVisible(entity1,

+				JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

 	/**

@@ -1125,7 +1271,8 @@
 	 * @return true, if the sections is visible, false otherwise

 	 */

 	@SuppressWarnings("deprecation")

-	public boolean isSectionVisible(SWTBotGefEditPart editPart, String sectionTitle) {

+	public boolean isSectionVisible(SWTBotGefEditPart editPart,

+			String sectionTitle) {

 		List<SWTBotGefEditPart> children = editPart.children();

 		SWTBotGefEditPart section = jpaDiagramEditor.getEditpart(sectionTitle,

 				children);

@@ -1134,7 +1281,8 @@
 		return figure.isVisible() || figure.isShowing();

 	}

 

-	public SWTBotGefEditPart getSectionInJPT(SWTBotGefEditPart editPart, String sectionTitle) {

+	public SWTBotGefEditPart getSectionInJPT(SWTBotGefEditPart editPart,

+			String sectionTitle) {

 		List<SWTBotGefEditPart> children = editPart.children();

 		SWTBotGefEditPart section = jpaDiagramEditor.getEditpart(sectionTitle,

 				children);

@@ -1216,39 +1364,62 @@
 	 *            - the expected type mapping

 	 */

 	public void assertTypeIsCorretlyMapped(String typeName, String typeMapping) {

-		workbenchBot.viewByTitle("JPA Details").close();

-		

-		SWTBotGefEditPart type = jpaDiagramEditor.getEditPart(typeName);

-		type.click();

-		

-		jpaDiagramEditor

-				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_openJPADetailsView);

+		// workbenchBot.viewByTitle("JPA Details").close();

+

+//		SWTBotGefEditPart type = jpaDiagramEditor.getEditPart(typeName);

+

+//		JavaPersistentType jpt = getJPTObjectForGefElement(type);

+//		assertEquals("Type is not mapped correctly.", jpt.getMappingKey(),

+//				typeMapping);

+

+		// type.click();

+		//

+		// jpaDiagramEditor

+		// .clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_openJPADetailsView);

+		// // assert that the JPA Details view is opened

+		// SWTBotView jpaDetailsView = workbenchBot.viewByTitle("JPA Details");

+		// assertTrue("JPA Details view must be opened!",

+		// jpaDetailsView.isActive());

+		//

+		// // assert that the default entity's attribute is mapped as the given

+		// // mapping key

+		// SWTBot jpaDetailsBot = jpaDetailsView.bot();

+		// SWTBotStyledText styledText = jpaDetailsBot.styledText();

+		// assertEquals("Type '" + typeName + "' is mapped as " + typeMapping

+		// + ".", styledText.getText());

+

 		// assert that the JPA Details view is opened

 		SWTBotView jpaDetailsView = workbenchBot.viewByTitle("JPA Details");

+		jpaDetailsView.setFocus();

 		assertTrue("JPA Details view must be opened!",

 				jpaDetailsView.isActive());

 

-		// assert that the default entity's attribute is mapped as the given

-		// mapping key

+		SWTBotGefEditPart type = jpaDiagramEditor.getEditPart(typeName);

+

+		type.select();

+		type.click();

+

+		// assert that the default entity's attribute is mapped as primary key

 		SWTBot jpaDetailsBot = jpaDetailsView.bot();

 		SWTBotStyledText styledText = jpaDetailsBot.styledText();

-		assertEquals("Type '" + typeName + "' is mapped as " + typeMapping

-				+ ".", styledText.getText());

+		assertEquals("Type '" + typeName + "' is mapped as "

+				+ typeMapping + ".", styledText.getText());

 	}

 

 	public void deleteJPTViaButton(SWTBotGefEditPart jptType) {

 

-		String jptName = getJPTObjectForGefElement(jptType)

-				.getSimpleName();

+		String jptName = getJPTObjectForGefElement(jptType).getSimpleName();

 

-		pressEntityContextButton(jptType,

+		pressEntityContextButton(

+				jptType,

 				JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteEntityFromModelButtonLabel);

 		denyDelete();

 

 		jptType = jpaDiagramEditor.getEditPart(jptName);

 		assertNotNull("Entity is deleted!", jptType);

 

-		pressEntityContextButton(jptType,

+		pressEntityContextButton(

+				jptType,

 				JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteEntityFromModelButtonLabel);

 		confirmDelete();

 		bot.waitUntil(new ElementDisappears(jpaDiagramEditor, jptName), 10000);

@@ -1258,8 +1429,7 @@
 

 	public void deleteJPTViaMenu(SWTBotGefEditPart jptType) {

 

-		String jptName = getJPTObjectForGefElement(jptType)

-				.getSimpleName();

+		String jptName = getJPTObjectForGefElement(jptType).getSimpleName();

 

 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteEntityFromModelButtonLabel);

@@ -1276,12 +1446,14 @@
 		assertNull("Entity is not deleted!", jptType);

 	}

 

-	public void removeAttributeViaButton(SWTBotGefEditPart jptType, String attributeName) {

+	public void removeAttributeViaButton(SWTBotGefEditPart jptType,

+			String attributeName) {

 

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

 

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						jptType));

 

 		SWTBotGefEditPart attribute = addAttributeToJPT(jptType, attributeName);

@@ -1303,15 +1475,18 @@
 		jpaDiagramEditor.save();

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						jptType));

 

 	}

 

-	public void removeAttributeViaMenu(SWTBotGefEditPart jptType, String attributeName) {

+	public void removeAttributeViaMenu(SWTBotGefEditPart jptType,

+			String attributeName) {

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						jptType));

 

 		SWTBotGefEditPart attribute = addAttributeToJPT(jptType, attributeName);

@@ -1334,15 +1509,18 @@
 

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						jptType));

 	}

 

-	public void directEditAttribute(SWTBotGefEditPart jptType, String attributeName) {

+	public void directEditAttribute(SWTBotGefEditPart jptType,

+			String attributeName) {

 

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						jptType));

 

 		SWTBotGefEditPart attribute = addAttributeToJPT(jptType, attributeName);

@@ -1373,7 +1551,7 @@
 

 		pressEntityContextButton(jptType, "Expand");

 		waitASecond();

-		

+

 		newHeight = ((PictogramElement) jptType.part().getModel())

 				.getGraphicsAlgorithm().getHeight();

 		assertEquals("Entity must be expanded!", heigth, newHeight);

@@ -1384,13 +1562,13 @@
 

 		int heigth = ((PictogramElement) jptType.part().getModel())

 				.getGraphicsAlgorithm().getHeight();

-		

+

 		jpaDiagramEditor.click(jptType);

 

 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseEntityMenuItem);

 		waitASecond();

-		

+

 		int newHeight = ((PictogramElement) jptType.part().getModel())

 				.getGraphicsAlgorithm().getHeight();

 		assertEquals("Entity must be collapsed!",

@@ -1400,14 +1578,15 @@
 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandEntityMenuItem);

 		waitASecond();

-		

+

 		newHeight = ((PictogramElement) jptType.part().getModel())

 				.getGraphicsAlgorithm().getHeight();

 		assertEquals("Entity must be expanded!", heigth, newHeight);

 		assertTrue(newHeight > JPAEditorConstants.ENTITY_MIN_HEIGHT);

 	}

 

-	public void collapseExpandAllJPTsViaMenu(SWTBotGefEditPart jptType1, SWTBotGefEditPart jptType2) {

+	public void collapseExpandAllJPTsViaMenu(SWTBotGefEditPart jptType1,

+			SWTBotGefEditPart jptType2) {

 

 		int heigth1 = ((PictogramElement) jptType1.part().getModel())

 				.getGraphicsAlgorithm().getHeight();

@@ -1418,7 +1597,7 @@
 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseAllEntitiesMenuItem);

 		waitASecond();

-		

+

 		// check that entity1 is collapsed

 		int newHeight1 = ((PictogramElement) jptType1.part().getModel())

 				.getGraphicsAlgorithm().getHeight();

@@ -1436,7 +1615,7 @@
 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandAllEntitiesMenuItem);

 		waitASecond();

-		

+

 		// check that entity1 is expanded

 		newHeight1 = ((PictogramElement) jptType1.part().getModel())

 				.getGraphicsAlgorithm().getHeight();

@@ -1454,7 +1633,8 @@
 

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						jptType));

 		assertFalse(isJPTDirty(jptType));

 

@@ -1465,7 +1645,8 @@
 		jptType.click();

 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_discardChangesMenuItem);

-		SWTBotGefEditPart attribute = jpaDiagramEditor.getEditPart(attributeName);

+		SWTBotGefEditPart attribute = jpaDiagramEditor

+				.getEditPart(attributeName);

 		assertNull("Changes must be discard!", attribute);

 		assertFalse(isJPTDirty(jptType));

 	}

@@ -1480,7 +1661,9 @@
 

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, jptType));

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+						jptType));

 		assertFalse(isJPTDirty(jptType));

 

 		addAttributeToJPT(jptType, attributeName);

@@ -1496,6 +1679,9 @@
 

 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_showAllTheEntities);

+		

+		bot.waitUntil(new ElementAppearsInDiagram(jpaDiagramEditor), 20000);

+		

 		assertFalse("Diagram must contain at least one entity!",

 				jpaDiagramEditor.mainEditPart().children().isEmpty());

 

@@ -1506,7 +1692,8 @@
 		assertFalse(isJPTDirty(jptType));

 	}

 

-	public void removeAndSaveChangesViaMenu(SWTBotGefEditPart jptType, String attributeName) {

+	public void removeAndSaveChangesViaMenu(SWTBotGefEditPart jptType,

+			String attributeName) {

 

 		assertFalse("Diagram must contain at least one entity!",

 				jpaDiagramEditor.mainEditPart().children().isEmpty());

@@ -1515,7 +1702,9 @@
 

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, jptType));

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+						jptType));

 		assertFalse(isJPTDirty(jptType));

 

 		addAttributeToJPT(jptType, attributeName);

@@ -1531,6 +1720,9 @@
 

 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_showAllTheEntities);

+		

+		bot.waitUntil(new ElementAppearsInDiagram(jpaDiagramEditor), 20000);

+		

 		assertFalse("Diagram must contain at least one entity!",

 				jpaDiagramEditor.mainEditPart().children().isEmpty());

 

@@ -1545,7 +1737,8 @@
 

 		assertFalse(

 				"\"Other Attributes\" section must not be visible!",

-				isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

+				isSectionVisible(

+						JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes,

 						jptType));

 		assertFalse(isJPTDirty(jptType));

 

@@ -1560,8 +1753,9 @@
 		assertFalse(isJPTDirty(jptType));

 	}

 

-	public void testUniDirRelation(String relationFeatureName, SWTBotGefEditPart owner,

-			SWTBotGefEditPart inverse, RelType reltype, String linkLabel) {

+	public void testUniDirRelation(String relationFeatureName,

+			SWTBotGefEditPart owner, SWTBotGefEditPart inverse,

+			RelType reltype, String linkLabel) {

 

 		jpaDiagramEditor.activateTool(relationFeatureName, 0);

 

@@ -1584,42 +1778,41 @@
 		String attributeName = testOwnerRelationAttributeProperties(rel);

 		assertNull(rel.getInverseAnnotatedAttribute());

 

-		assertAttributeIsCorretlyMapped(attributeName,

-				linkLabel);

+		assertAttributeIsCorretlyMapped(attributeName, linkLabel);

 

-		assertUniDirRelationIsNotDeleted(owner, inverse,

-				connection, attributeName);

+		assertUniDirRelationIsNotDeleted(owner, inverse, connection,

+				attributeName);

 

-		assertUniDirRelationIsDeleted(owner, inverse,

-				connection, attributeName);

+		assertUniDirRelationIsDeleted(owner, inverse, connection, attributeName);

 	}

-	

-	public void testSelfUniDirRelation(String relationFeatureName, SWTBotGefEditPart entity,

-			RelType reltype, String linkLabel){

-		

-		jpaDiagramEditor.activateTool(relationFeatureName, 0);		

+

+	public void testSelfUniDirRelation(String relationFeatureName,

+			SWTBotGefEditPart entity, RelType reltype, String linkLabel) {

+

+		jpaDiagramEditor.activateTool(relationFeatureName, 0);

 		jpaDiagramEditor.click(entity);

 		jpaDiagramEditor.click(entity);

 		bot.waitUntil(new ConnectionIsShown(entity));

-		

+

 		waitASecond();

 		jpaDiagramEditor.activateDefaultTool();

-		

+

 		assertSelfConnectionIsCreated(entity);

-		

-		SWTBotGefConnectionEditPart connection = entity.sourceConnections().get(0);

+

+		SWTBotGefConnectionEditPart connection = entity.sourceConnections()

+				.get(0);

 		IRelation rel = getConnection(connection);

 		assertNotNull(rel);

 		assertEquals(IRelation.RelDir.UNI, rel.getRelDir());

 		assertEquals(reltype, rel.getRelType());

-		

+

 		String attributeName = testOwnerRelationAttributeProperties(rel);

 		assertNull(rel.getInverseAnnotatedAttribute());

-		

+

 		assertAttributeIsCorretlyMapped(attributeName, linkLabel);

-		

+

 		assertSelfUniDirRelationIsNotDeleted(entity, connection, attributeName);

-		

+

 		assertSelfUniDirRelationIsDeleted(entity, connection, attributeName);

 	}

 

@@ -1661,19 +1854,21 @@
 		assertTrue(owner.sourceConnections().isEmpty());

 		assertTrue(inverse.targetConnections().isEmpty());

 		assertNull(jpaDiagramEditor.getEditPart(attributeName));

-		assertFalse(isSectionVisible(owner, JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

+		assertFalse(isSectionVisible(owner,

+				JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

-	public void testBiDirRel(String relationFeatureName, SWTBotGefEditPart owner,

-			SWTBotGefEditPart inverse, RelType reltype, String linkLabel) {

-		testBiDirRelWithTwoMappingTypes(relationFeatureName,

-				owner, inverse, reltype, linkLabel, linkLabel);

-	}

-	

-	public void testSelfBiDirRel(String relationFeatureName, SWTBotGefEditPart owner,

+	public void testBiDirRel(String relationFeatureName,

+			SWTBotGefEditPart owner, SWTBotGefEditPart inverse,

 			RelType reltype, String linkLabel) {

-		testSelfBiDirRelWithTwoMappings(relationFeatureName,

-				owner, reltype, linkLabel, linkLabel);

+		testBiDirRelWithTwoMappingTypes(relationFeatureName, owner, inverse,

+				reltype, linkLabel, linkLabel);

+	}

+

+	public void testSelfBiDirRel(String relationFeatureName,

+			SWTBotGefEditPart owner, RelType reltype, String linkLabel) {

+		testSelfBiDirRelWithTwoMappings(relationFeatureName, owner, reltype,

+				linkLabel, linkLabel);

 	}

 

 	public void testBiDirRelWithTwoMappingTypes(String relationFeatureName,

@@ -1704,56 +1899,60 @@
 		assertAttributeIsCorretlyMapped(ownerAttributeName, ownerLinkLabel);

 		assertAttributeIsCorretlyMapped(inverseAttributeName, inverseLinkLabel);

 

-		assertBiDirRelationIsNotDeleted(owner, inverse,

-				connection, ownerAttributeName, inverseAttributeName);

+		assertBiDirRelationIsNotDeleted(owner, inverse, connection,

+				ownerAttributeName, inverseAttributeName);

 

-		assertBiDirRelationIsDeleted(owner, inverse,

-				connection, ownerAttributeName, inverseAttributeName);

+		assertBiDirRelationIsDeleted(owner, inverse, connection,

+				ownerAttributeName, inverseAttributeName);

 	}

-	

+

 	public void testSelfBiDirRelWithTwoMappings(String relationFeatureName,

-			SWTBotGefEditPart entity, RelType reltype, String ownerLinkLabel, String inverseLinkLabel){

-		

-		jpaDiagramEditor.activateTool(relationFeatureName, 1);		

+			SWTBotGefEditPart entity, RelType reltype, String ownerLinkLabel,

+			String inverseLinkLabel) {

+

+		jpaDiagramEditor.activateTool(relationFeatureName, 1);

 		jpaDiagramEditor.click(entity);

-		jpaDiagramEditor.click(entity);		

+		jpaDiagramEditor.click(entity);

 		bot.waitUntil(new ConnectionIsShown(entity));

-		

+

 		waitASecond();

 		jpaDiagramEditor.activateDefaultTool();

-		

+

 		assertSelfConnectionIsCreated(entity);

-		

-		SWTBotGefConnectionEditPart connection = entity.sourceConnections().get(0);

+

+		SWTBotGefConnectionEditPart connection = entity.sourceConnections()

+				.get(0);

 		IRelation rel = getConnection(connection);

 		assertNotNull(rel);

 		assertEquals(IRelation.RelDir.BI, rel.getRelDir());

 		assertEquals(reltype, rel.getRelType());

-		

+

 		String ownerAttributeName = testOwnerRelationAttributeProperties(rel);

-		

+

 		String inverseAttributeName = testInverseRelationAttributeProperties(rel);

-		

+

 		assertAttributeIsCorretlyMapped(ownerAttributeName, ownerLinkLabel);

 		assertAttributeIsCorretlyMapped(inverseAttributeName, inverseLinkLabel);

-		

-		assertSelfBiDirRelationIsNotDeleted(entity, connection, ownerAttributeName,

-				inverseAttributeName);

-		

-		assertSelfBiDirRelationIsDeleted(entity, connection, ownerAttributeName, inverseAttributeName);

+

+		assertSelfBiDirRelationIsNotDeleted(entity, connection,

+				ownerAttributeName, inverseAttributeName);

+

+		assertSelfBiDirRelationIsDeleted(entity, connection,

+				ownerAttributeName, inverseAttributeName);

 	}

 

 	public void testBiDirRelRemoveInverseAttribute(String relationFeatureName,

 			SWTBotGefEditPart owner, SWTBotGefEditPart inverse,

 			RelType reltype, String linkLabel) {

 

-		testBiDirRelWithTwoMappingsWithoutInverseAttr(relationFeatureName, owner, inverse, reltype, linkLabel,

-				linkLabel);

+		testBiDirRelWithTwoMappingsWithoutInverseAttr(relationFeatureName,

+				owner, inverse, reltype, linkLabel, linkLabel);

 	}

 

-	public void testBiDirRelWithTwoMappingsWithoutInverseAttr(String relationFeatureName,

-			SWTBotGefEditPart owner, SWTBotGefEditPart inverse,

-			RelType reltype, String ownerLinkLabel, String inverseLinkLabel) {

+	public void testBiDirRelWithTwoMappingsWithoutInverseAttr(

+			String relationFeatureName, SWTBotGefEditPart owner,

+			SWTBotGefEditPart inverse, RelType reltype, String ownerLinkLabel,

+			String inverseLinkLabel) {

 

 		jpaDiagramEditor.activateTool(relationFeatureName, 1);

 		jpaDiagramEditor.click(owner);

@@ -1776,7 +1975,7 @@
 

 		String inverseAttributeName = testInverseRelationAttributeProperties(rel);

 

-		assertAttributeIsCorretlyMapped(ownerAttributeName,	ownerLinkLabel);

+		assertAttributeIsCorretlyMapped(ownerAttributeName, ownerLinkLabel);

 		assertAttributeIsCorretlyMapped(inverseAttributeName, inverseLinkLabel);

 

 		// delete the inverse attribute

@@ -1797,13 +1996,12 @@
 		assertEquals(ownerAttributeName,

 				testOwnerRelationAttributeProperties(rel));

 		assertNull(rel.getInverseAnnotatedAttribute());

-		assertAttributeIsCorretlyMapped(ownerAttributeName,

-				ownerLinkLabel);

+		assertAttributeIsCorretlyMapped(ownerAttributeName, ownerLinkLabel);

 

 		// delete the owner attribute

 		SWTBotGefEditPart ownerAttr = jpaDiagramEditor

 				.getEditPart(ownerAttributeName);

-		ownerAttr.click();

+		ownerAttr.select();

 		jpaDiagramEditor.clickContextMenu("Delete");

 		confirmDelete();

 		bot.waitUntil(new ElementDisappears(jpaDiagramEditor,

@@ -1819,16 +2017,17 @@
 				JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

-	public void testBiDirRelRemoveOwnerAttr(String relationFeatureName, SWTBotGefEditPart owner,

-			SWTBotGefEditPart inverse, RelType reltype, String linkLabel) {

-		testBiDirRelWithTwoMappingsWithoutOwnerAttr(

-				relationFeatureName, owner, inverse, reltype, linkLabel,

-				linkLabel);

+	public void testBiDirRelRemoveOwnerAttr(String relationFeatureName,

+			SWTBotGefEditPart owner, SWTBotGefEditPart inverse,

+			RelType reltype, String linkLabel) {

+		testBiDirRelWithTwoMappingsWithoutOwnerAttr(relationFeatureName, owner,

+				inverse, reltype, linkLabel, linkLabel);

 	}

 

-	public void testBiDirRelWithTwoMappingsWithoutOwnerAttr(String relationFeatureName,

-			SWTBotGefEditPart owner, SWTBotGefEditPart inverse,

-			RelType reltype, String ownerLinkLabel, String inverseLinkLabel) {

+	public void testBiDirRelWithTwoMappingsWithoutOwnerAttr(

+			String relationFeatureName, SWTBotGefEditPart owner,

+			SWTBotGefEditPart inverse, RelType reltype, String ownerLinkLabel,

+			String inverseLinkLabel) {

 

 		jpaDiagramEditor.activateTool(relationFeatureName, 1);

 		jpaDiagramEditor.click(owner);

@@ -1851,7 +2050,7 @@
 

 		String inverseAttributeName = testInverseRelationAttributeProperties(rel);

 

-		assertAttributeIsCorretlyMapped(ownerAttributeName,	ownerLinkLabel);

+		assertAttributeIsCorretlyMapped(ownerAttributeName, ownerLinkLabel);

 		assertAttributeIsCorretlyMapped(inverseAttributeName, inverseLinkLabel);

 

 		// delete the owner attribute

@@ -1875,10 +2074,12 @@
 				JPAEditorMessages.AddJPAEntityFeature_relationAttributesShapes));

 	}

 

-	public void createInheritedEntity(SWTBotGefEditPart superclass, String subclassName,

-			String superclassMappingLinkLabel, boolean byMappedSuperclass) {

+	public void createInheritedEntity(SWTBotGefEditPart superclass,

+			String subclassName, String superclassMappingLinkLabel,

+			boolean byMappedSuperclass) {

 

-		String superclassName = getJPTObjectForGefElement(superclass).getSimpleName();

+		String superclassName = getJPTObjectForGefElement(superclass)

+				.getSimpleName();

 

 		jpaDiagramEditor

 				.activateTool(JPAEditorMessages.CreateJPAEntityFromMappedSuperclassFeature_createInheritedEntityFeatureName);

@@ -1890,7 +2091,7 @@
 		SWTBotGefEditPart inheritedEntity = jpaDiagramEditor

 				.getEditPart(subclassName);

 		assertNotNull(inheritedEntity);

-		if(byMappedSuperclass){

+		if (byMappedSuperclass) {

 			assertTrue(isSectionVisible(inheritedEntity,

 					JPAEditorMessages.AddJPAEntityFeature_primaryKeysShape));

 		} else {

@@ -1914,17 +2115,19 @@
 		IsARelation rel = getIsARelationship();

 		assertNotNull(rel);

 

-		assertEquals(getJPTObjectForGefElement(inheritedEntity), rel.getSubclass());

-		assertEquals(getJPTObjectForGefElement(superclass),	rel.getSuperclass());

+		assertEquals(getJPTObjectForGefElement(inheritedEntity),

+				rel.getSubclass());

+		assertEquals(getJPTObjectForGefElement(superclass), rel.getSuperclass());

 

 		assertTypeIsCorretlyMapped(superclassName, superclassMappingLinkLabel);

-		assertTypeIsCorretlyMapped(subclassName, JptUiDetailsMessages.EntityUiProvider_linkLabel);

+		assertTypeIsCorretlyMapped(subclassName,

+				JptUiDetailsMessages.EntityUiProvider_linkLabel);

 	}

-	

+

 	public void testNoConnectionIsCreated(String relationFeatureName,

 			int indexInPallete, SWTBotGefEditPart owner,

 			SWTBotGefEditPart inverse) {

-		

+

 		jpaDiagramEditor.activateTool(relationFeatureName, indexInPallete);

 

 		jpaDiagramEditor.click(owner);

@@ -1932,18 +2135,18 @@
 

 		waitASecond();

 

-		assertTrue("There is no connection created.", owner

-				.sourceConnections().isEmpty());

+		assertTrue("There is no connection created.", owner.sourceConnections()

+				.isEmpty());

 		assertTrue("There is no connection created.", inverse

 				.sourceConnections().isEmpty());

 		assertTrue("There is no connection.", inverse.targetConnections()

 				.isEmpty());

 	}

-	

-	public void testNoConnectionIsCreatedWithEmbeddable(String relationFeatureName,

-			int indexInPallete, SWTBotGefEditPart owner,

-			SWTBotGefEditPart inverse) {

-		

+

+	public void testNoConnectionIsCreatedWithEmbeddable(

+			String relationFeatureName, int indexInPallete,

+			SWTBotGefEditPart owner, SWTBotGefEditPart inverse) {

+

 		jpaDiagramEditor.activateTool(relationFeatureName, indexInPallete);

 

 		jpaDiagramEditor.click(owner);

@@ -1951,16 +2154,16 @@
 

 		waitASecond();

 

-		assertTrue("There is no connection created.", owner

-				.sourceConnections().isEmpty());

+		assertTrue("There is no connection created.", owner.sourceConnections()

+				.isEmpty());

 		assertTrue("There is no connection created.", inverse

 				.sourceConnections().isEmpty());

 	}

-	

+

 	public void testNoEmbeddedConnectionIsCreated(String relationFeatureName,

 			int indexInPallete, SWTBotGefEditPart owner,

 			SWTBotGefEditPart inverse, boolean alreadyEmbed) {

-		

+

 		jpaDiagramEditor.activateTool(relationFeatureName, indexInPallete);

 

 		jpaDiagramEditor.click(owner);

@@ -1968,9 +2171,9 @@
 

 		waitASecond();

 

-		assertTrue("There is no connection created.", owner

-				.sourceConnections().isEmpty());

-		if(alreadyEmbed){

+		assertTrue("There is no connection created.", owner.sourceConnections()

+				.isEmpty());

+		if (alreadyEmbed) {

 			assertFalse("There is no connection created.", inverse

 					.sourceConnections().isEmpty());

 		} else {

diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/ElementAppearsInDiagram.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/ElementAppearsInDiagram.java
new file mode 100644
index 0000000..572690e
--- /dev/null
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/ElementAppearsInDiagram.java
@@ -0,0 +1,23 @@
+package org.eclipse.jpt.jpadiagrameditor.swtbot.tests.ui.editor;

+

+import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditor;

+import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;

+

+public class ElementAppearsInDiagram extends DefaultCondition{

+	

+	private SWTBotGefEditor gefEditor;

+	

+	public ElementAppearsInDiagram(SWTBotGefEditor gefEditor){

+		super();

+		this.gefEditor = gefEditor;

+	}

+

+	public boolean test() throws Exception {

+		return !(gefEditor.mainEditPart().children().isEmpty());

+	}

+

+	public String getFailureMessage() {

+		return "Diagram is still empty.";

+	}

+

+}

diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EmbeddableInDiagramSWTBotTest.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EmbeddableInDiagramSWTBotTest.java
index c0aeadd..5dea59e 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EmbeddableInDiagramSWTBotTest.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EmbeddableInDiagramSWTBotTest.java
@@ -1,10 +1,10 @@
 package org.eclipse.jpt.jpadiagrameditor.swtbot.tests.ui.editor;

 

+import java.util.ArrayList;

+import java.util.Iterator;

 import java.util.List;

+import java.util.ListIterator;

 

-import org.eclipse.core.resources.IProject;

-import org.eclipse.core.resources.IResource;

-import org.eclipse.core.resources.ResourcesPlugin;

 import org.eclipse.core.runtime.CoreException;

 import org.eclipse.core.runtime.NullProgressMonitor;

 import org.eclipse.graphiti.features.IFeatureProvider;

@@ -12,7 +12,9 @@
 import org.eclipse.jdt.core.JavaModelException;

 import org.eclipse.jpt.jpa.core.JpaProject;

 import org.eclipse.jpt.jpa.core.MappingKeys;

+import org.eclipse.jpt.jpa.core.context.PersistentType;

 import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;

+import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit;

 import org.eclipse.jpt.jpa.core.jpa2.MappingKeys2_0;

 import org.eclipse.jpt.jpa.ui.internal.details.JptUiDetailsMessages;

 import org.eclipse.jpt.jpa.ui.internal.jpa2.details.JptUiDetailsMessages2_0;

@@ -22,6 +24,7 @@
 import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.HasReferanceRelation;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.HasReferanceRelation.HasReferenceType;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.IRelation;

+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorUtil;

 import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JpaArtifactFactory;

 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;

 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor;

@@ -35,8 +38,7 @@
 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;

-import org.eclipse.swtbot.swt.finder.widgets.TimeoutException;

-import org.junit.AfterClass;

+import org.junit.After;

 import org.junit.BeforeClass;

 import org.junit.Ignore;

 import org.junit.Test;

@@ -94,6 +96,8 @@
 	public void testAddEmbeddable() {

 		Utils.sayTestStarted("testAddEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+		

 		editorProxy.addEmbeddableToDiagram(50, 50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

 

@@ -114,6 +118,8 @@
 	public void testRemoveEmnbeddableViaButton() {

 		Utils.sayTestStarted("testRemoveEmnbeddableViaButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+		

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -134,6 +140,8 @@
 	public void testRemoveEmbeddableViaContextMenu() {

 		Utils.sayTestStarted("testRemoveEmbeddableViaContextMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -154,6 +162,8 @@
 	public void testAddAttributeToEmbeddablle() {

 		Utils.sayTestStarted("testAddAttributeToEmbeddablle");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -174,6 +184,74 @@
 

 		Utils.sayTestFinished("testAddAttributeToEmbeddablle");

 	}

+	

+	@Test

+	public void testAddElementCollectionAttributeToEmbeddable(){

+		Utils.sayTestStarted("testAddElementCollectionAttributeToEmbeddable");

+

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

+		SWTBotGefEditPart entity = editorProxy.addEmbeddableToDiagram(50, 50, "Embeddable1");

+

+		assertFalse(

+				"\"Other Attributes\" section must not be visible!",

+				editorProxy.isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, entity));

+

+		editorProxy.addElementCollectionAttributeToJPT(entity, "attribute1");

+		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

+

+		entity.click();

+		editorProxy.deleteDiagramElements();

+		jpaDiagramEditor.save();

+

+		Utils.sayTestFinished("testAddElementCollectionAttributeToEmbeddable");

+	}

+	

+	

+	/**

+	 * Add two embeddables and one entity in the diagram. Add an attribute of collection type to

+	 * the first embeddable. Check that it is not possible to embed a collection of the first

+	 * embeddable neither into the second embeddable, nor into the entity, but it is possible to embed

+	 * a collection of the second embeddable to the first embeddable.

+	 */

+	

+	@Test

+	public void testEmbedCollectionOfObjectsWithCollectionAttribute() {

+		Utils.sayTestStarted("testEmbedCollectionOfObjectsWithCollectionAttribute");

+

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

+		SWTBotGefEditPart embeddable1 = editorProxy.addEmbeddableToDiagram(50,

+				50, "Embeddable1");

+		SWTBotGefEditPart embeddable2 = editorProxy.addEmbeddableToDiagram(50,

+				200, "Embeddable2");

+		

+		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(200, 50, "Entity1");

+

+		assertFalse(

+				"\"Other Attributes\" section must not be visible!",

+				editorProxy.isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, embeddable1));

+

+		editorProxy.addElementCollectionAttributeToJPT(embeddable1, "attribute1");

+		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

+		

+		editorProxy.testNoEmbeddedConnectionIsCreated(

+				JPAEditorMessages.EmbedCollectionOfObjectsFeature_ElementCollectionFeatureName, 0, entity, embeddable1, false);

+		

+		editorProxy.testNoEmbeddedConnectionIsCreated(

+				JPAEditorMessages.EmbedCollectionOfObjectsFeature_ElementCollectionFeatureName, 0, embeddable2, embeddable1, false);

+

+		_testEmbeddedConnection(JPAEditorMessages.EmbedCollectionOfObjectsFeature_ElementCollectionFeatureName, embeddable1,

+				embeddable2, HasReferenceType.COLLECTION,

+				MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY,

+				JptUiDetailsMessages2_0.ElementCollectionMapping2_0_linkLabel,

+				3);

+

+		editorProxy.deleteDiagramElements();

+		jpaDiagramEditor.save();

+

+		Utils.sayTestFinished("testEmbedCollectionOfObjectsWithCollectionAttribute");

+	}

 

 	/**

 	 * Removes the attribute using the "Delete Attribute" context button.

@@ -182,6 +260,8 @@
 	public void testRemoveAttributeFromEmbeddableViaContextButton() {

 		Utils.sayTestStarted("testRemoveAttributeFromEmbeddableViaContextButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -202,6 +282,8 @@
 	public void testRemoveAttributeFromEmbeddableViaMenu() {

 		Utils.sayTestStarted("testRemoveAttributeFromEmbeddableViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -222,6 +304,8 @@
 	public void testDirectEditingAttributeInEmbeddable() {

 		Utils.sayTestStarted("testDirectEditingAttributeInEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -244,6 +328,8 @@
 	public void testDirectEditingEmbeddable() {

 		Utils.sayTestStarted("testDirectEditingEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -278,6 +364,8 @@
 	public void testDoubleClickOnEmbeddable() {

 		Utils.sayTestStarted("testDoubleClickOnEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -304,6 +392,8 @@
 	public void testChangeAttributeTypeInEmbeddable() {

 		Utils.sayTestStarted("testChangeAttributeTypeInEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -383,6 +473,8 @@
 	public void testRenameEmbeddableViaMenu() {

 		Utils.sayTestStarted("testRenameEmbeddableViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -429,6 +521,8 @@
 	public void testMoveEmbeddableViaMenu() throws JavaModelException {

 		Utils.sayTestStarted("testMoveEmbeddableViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -472,6 +566,8 @@
 	public void testCollapseExapandEmbeddableViaContextButton() {

 		Utils.sayTestStarted("testCollapseExapandEmbeddableViaContextButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -493,6 +589,8 @@
 	public void testCollapseExapandEmbeddableViaMenu() {

 		Utils.sayTestStarted("testCollapseExapandEmbeddableViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -508,41 +606,17 @@
 	}

 

 	/**

-	 * Collapse/expand all embeddables using the context menus

-	 */

-	@Test

-	public void testCollapseExapandAllEmbeddablesViaMenu() {

-		Utils.sayTestStarted("testCollapseExapandAllEmbeddablesViaMenu");

-

-		SWTBotGefEditPart embeddable1 = editorProxy.addEmbeddableToDiagram(50,

-				50, "Embeddable1");

-		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

-

-		editorProxy.addAttributeToJPT(embeddable1, "attribute1");

-

-		SWTBotGefEditPart embeddable2 = editorProxy.addEmbeddableToDiagram(300,

-				50, "Embeddable2");

-		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

-

-		editorProxy.addAttributeToJPT(embeddable2, "attribute1");

-

-		editorProxy.collapseExpandAllJPTsViaMenu(embeddable1, embeddable2);

-

-		editorProxy.deleteDiagramElements();

-		jpaDiagramEditor.save();

-

-		Utils.sayTestFinished("testCollapseExapandAllEmbeddablesViaMenu");

-	}

-

-	/**

 	 * Add a new attribute without saving the embeddable and call the

 	 * "Discard Changes" context menu. Assert that the newly added attribute is

 	 * removed and the embeddable does not contain unsaved changes.

 	 */

+	@Ignore

 	@Test

 	public void testDiscardChangesFromEmbeddable() {

 		Utils.sayTestStarted("testDiscardChangesFromEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -567,6 +641,8 @@
 	public void testRemoveAndDiscardChangesFromEmbeddableViaMenu() {

 		Utils.sayTestStarted("testRemoveAndDiscardChangesFromEmbeddableViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -591,6 +667,8 @@
 	public void testRemoveAndSaveChangesToEmbeddableViaMenu() {

 		Utils.sayTestStarted("testRemoveAndSaveChangesToEmbeddableViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -613,6 +691,8 @@
 	public void testSaveOnlyEmbeddable() {

 		Utils.sayTestStarted("testSaveOnlyEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

@@ -634,6 +714,8 @@
 	public void testEmbedSingleObjectInEntity() {

 		Utils.sayTestStarted("testEmbedSingleObjectInEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -656,10 +738,13 @@
 	 * the embeddable into the entity and checks that the connection exists and

 	 * a new embedded attribute is added to the entity.

 	 */

+	@Ignore

 	@Test

 	public void testEmbedCollectionOfObjectsInEntity() {

 		Utils.sayTestStarted("testEmbedCollectionOfObjectsInEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -687,6 +772,8 @@
 	public void testEmbedSingleObjectInEmbeddable() {

 		Utils.sayTestStarted("testEmbedSingleObjectInEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable1 = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		SWTBotGefEditPart embeddable2 = editorProxy.addEmbeddableToDiagram(50,

@@ -709,10 +796,13 @@
 	 * embeddable into the second embeddable and checks that the connection

 	 * exists and a new embedded attribute is added to the second embeddable.

 	 */

+	

 	@Test

 	public void testEmbedCollectionOfObjectsInEmbeddable() {

 		Utils.sayTestStarted("testEmbedCollectionOfObjectsInEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable1 = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		SWTBotGefEditPart embeddable2 = editorProxy.addEmbeddableToDiagram(50,

@@ -737,10 +827,13 @@
 	 * embed a collection of the second embeddable into the entity, but it is

 	 * possible to embed a collection of the first embeddable to the entity.

 	 */

+	

 	@Test

 	public void testEmbedCollectionOfObjectsInEmbeddableAndEntity() {

 		Utils.sayTestStarted("testEmbedCollectionOfObjectsInEmbeddableAndEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart embeddable1 = editorProxy.addEmbeddableToDiagram(50,

 				50, "Embeddable1");

 		SWTBotGefEditPart embeddable2 = editorProxy.addEmbeddableToDiagram(50,

@@ -773,7 +866,53 @@
 

 		Utils.sayTestFinished("testEmbedCollectionOfObjectsInEmbeddableAndEntity");

 	}

+	

+	/**

+	 * Add three embeddables in the diagram. Embed a collection of

+	 * the first embeddable to the second one. Check that it is not possible to

+	 * embed a collection of the second embeddable into the third one, but it is

+	 * possible to embed a collection of the first embeddable to the third embeddable.

+	 */

+	

+	@Test

+	public void testEmbedCollectionOfObjectsInTwoEmbeddables() {

+		Utils.sayTestStarted("testEmbedCollectionOfObjectsInTwoEmbeddables");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

+		SWTBotGefEditPart embeddable1 = editorProxy.addEmbeddableToDiagram(50,

+				50, "Embeddable1");

+		SWTBotGefEditPart embeddable2 = editorProxy.addEmbeddableToDiagram(50,

+				200, "Embeddable2");

+

+		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

+

+		embedConnection(JPAEditorMessages.EmbedCollectionOfObjectsFeature_ElementCollectionFeatureName, embeddable1,

+				embeddable2, HasReferenceType.COLLECTION,

+				MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY,

+				JptUiDetailsMessages2_0.ElementCollectionMapping2_0_linkLabel,

+				2);

+

+		SWTBotGefEditPart embeddable3 = editorProxy.addEmbeddableToDiagram(200, 50,

+				"Embeddable3");

+

+		editorProxy.testNoEmbeddedConnectionIsCreated(

+				JPAEditorMessages.EmbedCollectionOfObjectsFeature_ElementCollectionFeatureName, 0, embeddable3, embeddable1, true);

+

+		_testEmbeddedConnection(JPAEditorMessages.EmbedCollectionOfObjectsFeature_ElementCollectionFeatureName, embeddable3,

+				embeddable2, HasReferenceType.COLLECTION,

+				MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY,

+				JptUiDetailsMessages2_0.ElementCollectionMapping2_0_linkLabel,

+				4);

+

+		editorProxy.deleteAttributeInJPT(embeddable1, "embeddable2");

+

+		editorProxy.deleteDiagramElements();

+		jpaDiagramEditor.save();

+

+		Utils.sayTestFinished("testEmbedCollectionOfObjectsInTwoEmbeddables");

+	}

+	

 	/**

 	 * Test no one-to-one unidirectional relationship from entity to embeddable

 	 * is created.

@@ -782,6 +921,8 @@
 	public void testOneToOneUniDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testOneToOneUniDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -806,6 +947,8 @@
 	public void testOneToOneBiDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testOneToOneBiDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -830,6 +973,8 @@
 	public void testOneToManyUniDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testOneToManyUniDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -854,6 +999,8 @@
 	public void testManyToOneUniDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testManyToOneUniDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -878,6 +1025,8 @@
 	public void testManyToOneBiDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testManyToOneBiDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -902,6 +1051,8 @@
 	public void testManyToManyUniDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testManyToManyUniDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -926,6 +1077,8 @@
 	public void testManyToManyBiDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testManyToManyBiDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -955,6 +1108,8 @@
 	public void testOneToOneBiDirRelationFromEmbeddableToEntity() {

 		Utils.sayTestStarted("testOneToOneBiDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1016,6 +1171,8 @@
 	public void testManyToOneBiDirRelationFromEmbeddableToEntity() {

 		Utils.sayTestStarted("testManyToOneBiDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1081,6 +1238,8 @@
 	public void testManyToManyBiDirRelationFromEmbeddableToEntity() {

 		Utils.sayTestStarted("testManyToManyBiDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1141,6 +1300,8 @@
 	public void testOneToOneUniDirRelationFromEmbeddableToEntity() {

 		Utils.sayTestStarted("testOneToOneUniDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1193,6 +1354,8 @@
 	public void testManyToOneUniDirRelationFromEmbeddableToEntity() {

 		Utils.sayTestStarted("testManyToOneUniDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1245,6 +1408,8 @@
 	public void testManyToManyUniDirRelationFromEmbeddableToEntity() {

 		Utils.sayTestStarted("testManyToManyUniDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1297,6 +1462,8 @@
 	public void testOneToOneBiDirRelationFromEmbeddedCollectionToEntity() {

 		Utils.sayTestStarted("testOneToOneBiDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1354,10 +1521,13 @@
 	 * Check that if the owner attribute will be deleted, the relationship will

 	 * disappear.

 	 */

+	

 	@Test

 	public void testManyToOneBiDirRelationFromEmbeddedCollectionToEntity() {

 		Utils.sayTestStarted("testManyToOneBiDirRelationFromEmbeddableToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1418,6 +1588,8 @@
 	public void testNoOneToOneBiDirConnectionIsCreatedInEmbeddableInTwoEntities() {

 		Utils.sayTestStarted("testNoOneToOneBiDirConnectionIsCreatedInEmbeddableInTwoEntities");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1474,6 +1646,8 @@
 	public void testNoManyToOneBiDirConnectionIsCreatedInEmbeddableInTwoEntities() {

 		Utils.sayTestStarted("testNoBiDirConnectionIsCreatedInEmbeddableInTwoEntities");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1530,6 +1704,8 @@
 	public void testNoManyToManyBiDirConnectionIsCreatedInEmbeddableInTwoEntities() {

 		Utils.sayTestStarted("testNoManyToManyBiDirConnectionIsCreatedInEmbeddableInTwoEntities");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1590,6 +1766,8 @@
 	public void testOneToOneUniDirRelationFromEmbeddedCollectionToEntity() {

 		Utils.sayTestStarted("testOneToOneUniDirRelationFromEmbeddedCollectionToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1643,6 +1821,8 @@
 	public void testManyToOneUniDirRelationFromEmbeddedCollectionToEntity() {

 		Utils.sayTestStarted("testManyToOneUniDirRelationFromEmbeddedCollectionToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1693,6 +1873,8 @@
 	public void testManyToManyRelationFromEmbeddedCollectionToEntity() {

 		Utils.sayTestStarted("testManyToManyRelationFromEmbeddedCollectionToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1741,6 +1923,8 @@
 	public void testOneToManyRelationFromEmbeddedCollectionToEntity() {

 		Utils.sayTestStarted("testOneToManyRelationFromEmbeddedCollectionToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart embeddable = editorProxy.addEmbeddableToDiagram(50,

@@ -1766,7 +1950,7 @@
 						0, embeddable, entity);

 

 		editorProxy.deleteDiagramElements();

-		jpaDiagramEditor.save();

+		jpaDiagramEditor.saveAndClose();

 

 		Utils.sayTestFinished("testOneToManyRelationFromEmbeddedCollectionToEntity");

 	}

@@ -1946,7 +2130,7 @@
 			HasReferenceType refType, String embeddedMappingKey,

 			String linkLabel) {

 		

-		bot.waitUntil(new ConnectionIsShown(embeddingEntity), 15000);

+		bot.waitUntil(new ConnectionIsShown(embeddingEntity), 30000);

 

 //		List<SWTBotGefEditPart> entitiesInDiagram = jpaDiagramEditor

 //				.mainEditPart().children();

@@ -1957,6 +2141,17 @@
 				.sourceConnections().isEmpty());

 		SWTBotGefConnectionEditPart connection = embeddingEntity

 				.sourceConnections().get(0);

+		

+		JavaPersistentType emb = editorProxy.getJPTObjectForGefElement(embeddable);

+		String embAttr = JPAEditorUtil.decapitalizeFirstLetter(emb.getSimpleName());

+		

+		List<SWTBotGefEditPart> editParts = new ArrayList<SWTBotGefEditPart>();

+		editParts.add(embeddingEntity);

+		SWTBotGefEditPart attribute = jpaDiagramEditor.getEditpart(

+				embAttr, editParts);

+		

+		assertNotNull("Embedded attribute must be added.", attribute);

+

 		HasReferanceRelation rel = editorProxy

 				.getHasReferenceConnection(connection);

 		assertNotNull(rel);

@@ -1980,13 +2175,19 @@
 		return attributeName;

 	}

 	

-	@AfterClass

-	public static void afterClass() throws CoreException{

-		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();

-		for(IProject project : projects){

-			project.delete(true, true, new NullProgressMonitor());

-		}

+	@After

+	public void tearDown() throws Exception {

+		editorProxy.deleteDiagramElements();

+		Utils.printFormatted(">>>>>>>>>>>> elements are deleted from the diagram.");

 		

-		ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());

+		ListIterator<PersistenceUnit> lit = jpaProject.getRootContextNode().getPersistenceXml().getRoot().getPersistenceUnits().iterator();		

+		PersistenceUnit pu = lit.next();

+		Iterator<PersistentType> persistentTypesIterator = (Iterator<PersistentType>) pu.getPersistentTypes().iterator();

+		while(persistentTypesIterator.hasNext()){

+			Utils.printFormatted(">>>>>>>>>>>>>> persistent type resource must be deleted.");

+			PersistentType type = persistentTypesIterator.next();

+			type.getResource().delete(true, new NullProgressMonitor());

+		}

 	}

 }

+

diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EntitiesInDiagramSWTBotTest.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EntitiesInDiagramSWTBotTest.java
index 41cbb15..32be204 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EntitiesInDiagramSWTBotTest.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/EntitiesInDiagramSWTBotTest.java
@@ -1,17 +1,17 @@
 package org.eclipse.jpt.jpadiagrameditor.swtbot.tests.ui.editor;

 

+import java.util.Iterator;

 import java.util.List;

+import java.util.ListIterator;

 

-import org.eclipse.core.resources.IProject;

-import org.eclipse.core.resources.IResource;

-import org.eclipse.core.resources.ResourcesPlugin;

-import org.eclipse.core.runtime.CoreException;

 import org.eclipse.core.runtime.NullProgressMonitor;

 import org.eclipse.graphiti.features.IFeatureProvider;

 import org.eclipse.graphiti.mm.pictograms.PictogramElement;

 import org.eclipse.graphiti.ui.internal.parts.DiagramEditPart;

 import org.eclipse.jdt.core.JavaModelException;

 import org.eclipse.jpt.jpa.core.JpaProject;

+import org.eclipse.jpt.jpa.core.context.PersistentType;

+import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit;

 import org.eclipse.jpt.jpa.ui.internal.details.JptUiDetailsMessages;

 import org.eclipse.jpt.jpadiagrameditor.swtbot.tests.internal.JPACreateFactory;

 import org.eclipse.jpt.jpadiagrameditor.swtbot.tests.internal.Utils;

@@ -32,7 +32,7 @@
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotStyledText;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;

-import org.junit.AfterClass;

+import org.junit.After;

 import org.junit.BeforeClass;

 import org.junit.Ignore;

 import org.junit.Test;

@@ -88,6 +88,8 @@
 	public void testAddEntity() {

 		Utils.sayTestStarted("testAddEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		editorProxy.addEntityToDiagram(50, 50, "Entity1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

 

@@ -108,6 +110,8 @@
 	public void testRemoveEntityViaButton() {

 		Utils.sayTestStarted("testRemoveEntityViaButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.deleteJPTViaButton(entity);

@@ -126,6 +130,8 @@
 	public void testRemoveEntityViaContextMenu() {

 		Utils.sayTestStarted("testRemoveEntityViaContextMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.deleteJPTViaMenu(entity);

@@ -142,7 +148,9 @@
 	 */

 	@Test

 	public void testAddAttribute() {

-		Utils.sayTestStarted("testRemoveEntityViaContextMenu");

+		Utils.sayTestStarted("testAddAttribute");

+

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

 

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

@@ -157,7 +165,29 @@
 		editorProxy.deleteDiagramElements();

 		jpaDiagramEditor.save();

 

-		Utils.sayTestFinished("testRemoveEntityViaContextMenu");

+		Utils.sayTestFinished("testAddAttribute");

+	}

+	

+	@Test

+	public void testAddElementCollectionAttribute(){

+		Utils.sayTestStarted("testAddElementCollectionAttribute");

+

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

+		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

+

+		assertFalse(

+				"\"Other Attributes\" section must not be visible!",

+				editorProxy.isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, entity));

+

+		editorProxy.addElementCollectionAttributeToJPT(entity, "attribute1");

+		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

+

+		entity.click();

+		editorProxy.deleteDiagramElements();

+		jpaDiagramEditor.save();

+

+		Utils.sayTestFinished("testAddElementCollectionAttribute");

 	}

 

 	/**

@@ -167,6 +197,8 @@
 	public void testRemoveAttributeViaContextButton() {

 		Utils.sayTestStarted("testRemoveAttributeViaContextButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.removeAttributeViaButton(entity, "attribute1");

@@ -185,6 +217,8 @@
 	public void testRemoveAttributeViaMenu() {

 		Utils.sayTestStarted("testRemoveAttributeViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.removeAttributeViaMenu(entity, "attribute1");

@@ -203,6 +237,8 @@
 	public void testDirectEditingAttribute() {

 		Utils.sayTestStarted("testDirectEditingAttribute");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.directEditAttribute(entity, "attribute1");

@@ -223,6 +259,8 @@
 	public void testDirectEditingEntity() {

 		Utils.sayTestStarted("testDirectEditingEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

 

@@ -255,6 +293,8 @@
 	public void testDoubleClickOnEntity() {

 		Utils.sayTestStarted("testDoubleClickOnEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

 		editorProxy.moveMouse(100, 70);

@@ -279,6 +319,8 @@
 	public void testChangeAttributeType() {

 		Utils.sayTestStarted("testChangeAttributeType");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		assertFalse("\"Other Attributes\" section must not be visible!", 

@@ -349,6 +391,8 @@
 	public void testRenameEntityViaMenu() {

 		Utils.sayTestStarted("testRenameEntityViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		entity.click();

@@ -393,6 +437,8 @@
 	public void testMoveEntityViaMenu() throws JavaModelException {

 		Utils.sayTestStarted("testMoveEntityViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 		JpaArtifactFactory factory = JpaArtifactFactory.instance();

 

@@ -433,6 +479,8 @@
 	public void testCollapseExapandEntityViaContextButton() {

 		Utils.sayTestStarted("testCollapseExapandEntityViaContextButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.collapseExpandJPTViaButton(entity);

@@ -450,6 +498,8 @@
 	public void testCollapseExapandEntityViaMenu() {

 		Utils.sayTestStarted("testCollapseExapandEntityViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.collapseExpandJPTViaMenu(entity);

@@ -467,6 +517,8 @@
 	public void testCollapseExapandAllEntitiesViaMenu() {

 		Utils.sayTestStarted("testCollapseExapandAllEntitiesViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(300, 50, "Entity2");

 

@@ -487,6 +539,8 @@
 	public void testDiscardChanges() {

 		Utils.sayTestStarted("testDiscardChanges");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.discardChanges(entity, "attribute1");

@@ -508,6 +562,8 @@
 	public void testRemoveAndDiscardChangesViaMenu() {

 		Utils.sayTestStarted("testRemoveAndDiscardChangesViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.removeAndDiscardChangesViaMenu(entity,

@@ -531,6 +587,8 @@
 	public void testRemoveAndSaveChangesViaMenu() {

 		Utils.sayTestStarted("testRemoveAndSaveChangesViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.removeAndSaveChangesViaMenu(entity, "attribute1");

@@ -551,6 +609,8 @@
 	public void testSaveOnlyEntity() {

 		Utils.sayTestStarted("testSaveOnlyEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 		editorProxy.saveOnlyJPT(entity, "attribute1");

 

@@ -571,11 +631,15 @@
 	public void testShowAllEntities() throws Exception {

 		Utils.sayTestStarted("testShowAllEntities");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		factory.createEntity(jpaProject, "com.sap.test.Customer");

 		assertTrue(jpaDiagramEditor.mainEditPart().children().isEmpty());

 

 		jpaDiagramEditor

 				.clickContextMenu(JPAEditorMessages.JPAEditorToolBehaviorProvider_showAllTheEntities);

+		

+		bot.waitUntil(new ElementAppearsInDiagram(jpaDiagramEditor), 20000);

 

 		List<SWTBotGefEditPart> entities = jpaDiagramEditor.mainEditPart()

 				.children();

@@ -599,6 +663,8 @@
 	public void testCollapseExpandCompartmentByDoubleClick() {

 		Utils.sayTestStarted("testCollapseExpandCompartmentByDoubleClick");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.moveMouse(100, 100);

@@ -643,6 +709,8 @@
 	public void testCollapseExpandCompartmentByContextMenu() {

 		Utils.sayTestStarted("testCollapseExpandCompartmentByContextMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// editorProxy.moveMouse(jpaDiagramEditor, 100, 100);

@@ -699,6 +767,8 @@
 	public void testChangeEntityMappingTypeViaJPADetailsView() {

 		Utils.sayTestStarted("testChangeEntityMappingTypeViaJPADetailsView");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		workbenchBot.viewByTitle("JPA Details").close();

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

@@ -799,6 +869,8 @@
 	public void testChangeAttributeMappingTypeViaJPADetailsView() {

 		Utils.sayTestStarted("testChangeAttributeMappingTypeViaJPADetailsView");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		workbenchBot.viewByTitle("JPA Details").close();

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

@@ -933,8 +1005,10 @@
 	public void testOneToOneUniDirRelationship() {

 		Utils.sayTestStarted("testOneToOneUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+		

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

-		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(50, 200, "Entity2");

+		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(200, 50, "Entity2");

 

 		// create One-to-One unidirectional relation from entity1 to entity2

 		editorProxy.testUniDirRelation(JPAEditorMessages.CreateOneToOneUniDirRelationFeature_oneToOneUniDirFeatureName,

@@ -963,6 +1037,8 @@
 	public void testSelfOneToOneUniDirRelationship() {

 		Utils.sayTestStarted("testSelfOneToOneUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// create One-to-One unidirectional self relation from entity1 to

@@ -992,8 +1068,10 @@
 	public void testOneToOneBiDirRelationship() {

 		Utils.sayTestStarted("testOneToOneBiDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

-		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(50, 200, "Entity2");

+		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(200, 50, "Entity2");

 

 		// create One-to-One bidirectional relation from entity1 to entity2

 		editorProxy.testBiDirRel(

@@ -1029,6 +1107,8 @@
 	public void testSelfOneToOneBiDirRelationship() {

 		Utils.sayTestStarted("testSelfOneToOneBiDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// create One-to-One bidirectional self relation from entity1 to entity1

@@ -1055,8 +1135,10 @@
 	public void testOneToManyUniDirRelationship() {

 		Utils.sayTestStarted("testOneToManyUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

-		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(50, 200, "Entity2");

+		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(200, 50, "Entity2");

 

 		// create One-to-Many unidirectional relation from entity1 to entity2

 		editorProxy.testUniDirRelation(

@@ -1086,6 +1168,8 @@
 	public void testSelfOneToManyUniDirRelationship() {

 		Utils.sayTestStarted("testSelfOneToManyUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// create One-to-Many unidirectional self relation from entity1 to

@@ -1114,8 +1198,10 @@
 	public void testManyToOneUniDirRelationship() {

 		Utils.sayTestStarted("testManyToOneUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

-		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(50, 200, "Entity2");

+		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(200, 50, "Entity2");

 

 		// create Many-to-One unidirectional relation from entity1 to entity2

 		editorProxy.testUniDirRelation(

@@ -1145,6 +1231,8 @@
 	public void testSelfManyToOneUniDirRelationship() {

 		Utils.sayTestStarted("testSelfManyToOneUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// create Many-to-One unidirectional self relation from entity1 to

@@ -1174,8 +1262,10 @@
 	public void testManyToOneBiDirRelationship() {

 		Utils.sayTestStarted("testManyToOneBiDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

-		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(50, 200, "Entity2");

+		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(200, 50, "Entity2");

 

 		// create Many-to-One bidirectional relation from entity1 to entity2

 		editorProxy.testBiDirRelWithTwoMappingTypes(

@@ -1214,6 +1304,8 @@
 	public void testSelfManyToOneBiDirRelationship() {

 		Utils.sayTestStarted("testSelfManyToOneBiDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// create Many-to-Many bidirectional self relation from entity1 to

@@ -1241,8 +1333,10 @@
 	public void testManyToManyUniDirRelationship() {

 		Utils.sayTestStarted("testManyToManyUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

-		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(50, 200, "Entity2");

+		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(200, 50, "Entity2");

 

 		// create Many-to-Many unidirectional relation from entity1 to entity2

 		editorProxy.testUniDirRelation(

@@ -1272,6 +1366,8 @@
 	public void testSelfManyToManyUniDirRelationship() {

 		Utils.sayTestStarted("testSelfManyToManyUniDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// create Many-to-Many unidirectional self relation from entity1 to

@@ -1301,8 +1397,10 @@
 	public void testManyToManyBiDirRelationship() {

 		Utils.sayTestStarted("testManyToManyBiDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

-		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(50, 200, "Entity2");

+		SWTBotGefEditPart entity2 = editorProxy.addEntityToDiagram(200, 50, "Entity2");

 

 		// create Many-to-Many bidirectional relation from entity1 to entity2

 		editorProxy.testBiDirRel(

@@ -1338,6 +1436,8 @@
 	public void testSelfManyToManyBiDirRelationship() {

 		Utils.sayTestStarted("testSelfManyToManyBiDirRelationship");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		// create Many-to-Many bidirectional self relation from entity1 to

@@ -1362,6 +1462,8 @@
 	public void testInheritedEntityByEntity() {

 		Utils.sayTestFinished("testInheritedEntityByEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity1 = editorProxy.addEntityToDiagram(50, 50, "Entity1");

 

 		editorProxy.createInheritedEntity(entity1, "Entity2",

@@ -1382,6 +1484,8 @@
 	public void testOpenDiagramOnProjectLevel() {

 		Utils.sayTestStarted("testOpenDiagramOnProjectLevel");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		workbenchBot.closeAllEditors();

 		// open JPA diagram editor on project level: JPA Tools -> Open Diagram

 		SWTBotGefEditor diagramEditor = editorProxy

@@ -1399,6 +1503,8 @@
 	public void testOpenDiagramOnJPAContentNodeLevel() {

 		Utils.sayTestStarted("testOpenDiagramOnJPAContentNodeLevel");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		workbenchBot.closeAllEditors();

 		// open JPA diagram editor on JPA content level: Open Diagram

 		SWTBotGefEditor diagramEditor = editorProxy

@@ -1407,14 +1513,19 @@
 

 		Utils.sayTestFinished("testOpenDiagramOnJPAContentNodeLevel");

 	}

-	

-	@AfterClass

-	public static void afterClass() throws CoreException{

-		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();

-		for(IProject project : projects){

-			project.delete(true, true, new NullProgressMonitor());

-		}

+

+	@After

+	public void tearDown() throws Exception {

+		editorProxy.deleteDiagramElements();

+		Utils.printFormatted(">>>>>>>>>>>> elements are deleted from the diagram.");

 		

-		ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());

+		ListIterator<PersistenceUnit> lit = jpaProject.getRootContextNode().getPersistenceXml().getRoot().getPersistenceUnits().iterator();		

+		PersistenceUnit pu = lit.next();

+		Iterator<PersistentType> persistentTypesIterator = (Iterator<PersistentType>) pu.getPersistentTypes().iterator();

+		while(persistentTypesIterator.hasNext()){

+			Utils.printFormatted(">>>>>>>>>>>>>> persistent type resource must be deleted.");

+			PersistentType type = persistentTypesIterator.next();

+			type.getResource().delete(true, new NullProgressMonitor());

+		}

 	}

 }

diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/MappedSuperclassesInDiagramSWTBotTest.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/MappedSuperclassesInDiagramSWTBotTest.java
index b716322..f57cb92 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/MappedSuperclassesInDiagramSWTBotTest.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.swtbot.tests/src/org/eclipse/jpt/jpadiagrameditor/swtbot/tests/ui/editor/MappedSuperclassesInDiagramSWTBotTest.java
@@ -1,14 +1,15 @@
 package org.eclipse.jpt.jpadiagrameditor.swtbot.tests.ui.editor;

 

-import org.eclipse.core.resources.IProject;

-import org.eclipse.core.resources.IResource;

-import org.eclipse.core.resources.ResourcesPlugin;

-import org.eclipse.core.runtime.CoreException;

+import java.util.Iterator;

+import java.util.ListIterator;

+

 import org.eclipse.core.runtime.NullProgressMonitor;

 import org.eclipse.graphiti.features.IFeatureProvider;

 import org.eclipse.graphiti.ui.internal.parts.DiagramEditPart;

 import org.eclipse.jdt.core.JavaModelException;

 import org.eclipse.jpt.jpa.core.JpaProject;

+import org.eclipse.jpt.jpa.core.context.PersistentType;

+import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit;

 import org.eclipse.jpt.jpa.ui.internal.details.JptUiDetailsMessages;

 import org.eclipse.jpt.jpadiagrameditor.swtbot.tests.internal.JPACreateFactory;

 import org.eclipse.jpt.jpadiagrameditor.swtbot.tests.internal.Utils;

@@ -25,7 +26,7 @@
 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;

 import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;

-import org.junit.AfterClass;

+import org.junit.After;

 import org.junit.BeforeClass;

 import org.junit.Ignore;

 import org.junit.Test;

@@ -82,6 +83,8 @@
 	public void testAddMappedSuperclass() {

 		Utils.sayTestStarted("testAddMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

 

@@ -102,6 +105,8 @@
 	public void testRemoveEntityViaButton() {

 		Utils.sayTestStarted("testRemoveEntityViaButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.deleteJPTViaButton(mappedSuperclass);

@@ -120,6 +125,8 @@
 	public void testRemoveEntityViaContextMenu() {

 		Utils.sayTestStarted("testRemoveEntityViaContextMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.deleteJPTViaMenu(mappedSuperclass);

@@ -136,7 +143,9 @@
 	 */

 	@Test

 	public void testAddAttribute() {

-		Utils.sayTestStarted("testRemoveEntityViaContextMenu");

+		Utils.sayTestStarted("testAddAttribute");

+

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

 

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

@@ -151,7 +160,29 @@
 		editorProxy.deleteDiagramElements();

 		jpaDiagramEditor.save();

 

-		Utils.sayTestFinished("testRemoveEntityViaContextMenu");

+		Utils.sayTestFinished("testAddAttribute");

+	}

+	

+	@Test

+	public void testAddElementCollectionAttributeToMappedSuperclass(){

+		Utils.sayTestStarted("testAddElementCollectionAttributeToMappedSuperclass");

+

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

+		SWTBotGefEditPart entity = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

+

+		assertFalse(

+				"\"Other Attributes\" section must not be visible!",

+				editorProxy.isSectionVisible(JPAEditorMessages.AddJPAEntityFeature_basicAttributesShapes, entity));

+

+		editorProxy.addElementCollectionAttributeToJPT(entity, "attribute1");

+		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

+

+		entity.click();

+		editorProxy.deleteDiagramElements();

+		jpaDiagramEditor.save();

+

+		Utils.sayTestFinished("testAddElementCollectionAttributeToMappedSuperclass");

 	}

 

 	/**

@@ -161,6 +192,8 @@
 	public void testRemoveAttributeViaContextButton() {

 		Utils.sayTestStarted("testRemoveAttributeViaContextButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.removeAttributeViaButton(mappedSuperclass, "attribute1");

@@ -179,6 +212,8 @@
 	public void testRemoveAttributeViaMenu() {

 		Utils.sayTestStarted("testRemoveAttributeViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.removeAttributeViaMenu(mappedSuperclass, "attribute1");

@@ -197,6 +232,8 @@
 	public void testDirectEditingAttribute() {

 		Utils.sayTestStarted("testDirectEditingAttribute");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.directEditAttribute(mappedSuperclass, "attribute1");

@@ -217,6 +254,8 @@
 	public void testDirectEditingEntity() {

 		Utils.sayTestStarted("testDirectEditingEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

 

@@ -249,6 +288,8 @@
 	public void testDoubleClickOnEntity() {

 		Utils.sayTestStarted("testDoubleClickOnEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		assertTrue("Editor must be dirty", jpaDiagramEditor.isDirty());

 		editorProxy.moveMouse(100, 70);

@@ -273,6 +314,8 @@
 	public void testChangeAttributeType() {

 		Utils.sayTestStarted("testChangeAttributeType");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		assertFalse("\"Other Attributes\" section must not be visible!", 

@@ -343,6 +386,8 @@
 	public void testRenameEntityViaMenu() {

 		Utils.sayTestStarted("testRenameEntityViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		mappedSuperclass.click();

@@ -387,6 +432,8 @@
 	public void testMoveEntityViaMenu() throws JavaModelException {

 		Utils.sayTestStarted("testMoveEntityViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		JpaArtifactFactory factory = JpaArtifactFactory.instance();

 

@@ -427,6 +474,8 @@
 	public void testCollapseExapandEntityViaContextButton() {

 		Utils.sayTestStarted("testCollapseExapandEntityViaContextButton");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.addAttributeToJPT(mappedSuperclass, "attribute1");

@@ -446,6 +495,8 @@
 	public void testCollapseExapandEntityViaMenu() {

 		Utils.sayTestStarted("testCollapseExapandEntityViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.addAttributeToJPT(mappedSuperclass, "attribute1");

@@ -459,29 +510,6 @@
 	}

 

 	/**

-	 * Collapse/expand all mapped superclasses using the context menus

-	 */

-	@Test

-	public void testCollapseExapandAllEntitiesViaMenu() {

-		Utils.sayTestStarted("testCollapseExapandAllEntitiesViaMenu");

-

-		SWTBotGefEditPart mappedSuperclass1 = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

-		

-		editorProxy.addAttributeToJPT(mappedSuperclass1, "attribute1");

-		

-		SWTBotGefEditPart mappedSuperclass2 = editorProxy.addMappedSuperclassToDiagram(300, 50, "MpdSuprcls2");

-		

-		editorProxy.addAttributeToJPT(mappedSuperclass2, "attribute1");

-

-		editorProxy.collapseExpandAllJPTsViaMenu(mappedSuperclass1, mappedSuperclass2);

-

-		editorProxy.deleteDiagramElements();

-		jpaDiagramEditor.save();

-

-		Utils.sayTestFinished("testCollapseExapandAllEntitiesViaMenu");

-	}

-

-	/**

 	 * Add a new attribute without saving the mapped superclass and call the

 	 * "Discard Changes" context menu. Assert that the newly added attribute is

 	 * removed and the mapped superclass does not contain unsaved changes.

@@ -490,7 +518,9 @@
 	public void testDiscardChanges() {

 		Utils.sayTestStarted("testDiscardChanges");

 

-		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

+		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(200, 50, "MpdSuprcls1");

 

 		editorProxy.discardChanges(mappedSuperclass, "attribute1");

 

@@ -511,6 +541,8 @@
 	public void testRemoveAndDiscardChangesViaMenu() {

 		Utils.sayTestStarted("testRemoveAndDiscardChangesViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.removeAndDiscardChangesViaMenu(mappedSuperclass, "attribute1");

@@ -533,6 +565,8 @@
 	public void testRemoveAndSaveChangesViaMenu() {

 		Utils.sayTestStarted("testRemoveAndSaveChangesViaMenu");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

 		editorProxy.removeAndSaveChangesViaMenu(mappedSuperclass, "attribute1");

@@ -553,6 +587,8 @@
 	public void testSaveOnlyEntity() {

 		Utils.sayTestStarted("testSaveOnlyEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		editorProxy.saveOnlyJPT(mappedSuperclass, "attribute1");

 

@@ -570,6 +606,8 @@
 	public void testInheritedEntityByMappedSuperclass() {

 		Utils.sayTestStarted("testInheritedEntityByMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy

 				.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 

@@ -591,6 +629,8 @@
 	public void testOneToOneUniDirRelFromMappedSuperclass() {

 		Utils.sayTestStarted("testOneToOneUniDirRelFromMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200, "Entity1");

 

@@ -615,6 +655,8 @@
 	public void testOneToManyUniDirRelFromMappedSuperclass() {

 		Utils.sayTestStarted("testOneToManyUniDirRelFromMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200, "Entity1");

 

@@ -639,6 +681,8 @@
 	public void testManyToOneUniDirRelFromMappedSuperclass() {

 		Utils.sayTestStarted("testManyToOneUniDirRelFromMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200, "Entity1");

 

@@ -663,6 +707,8 @@
 	public void testManyToManyUniDirRelFromMappedSuperclass() {

 		Utils.sayTestStarted("testManyToManyUniDirRelFromMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50, 50, "MpdSuprcls1");

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200, "Entity1");

 

@@ -687,6 +733,8 @@
 	public void testOneToOneRelationFromEntityToMappedSuperclass() {

 		Utils.sayTestStarted("testOneToOneRelationFromEntityToMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50,

@@ -716,6 +764,8 @@
 	public void testOneToOneBiDirRelationFromMappedSuperclassToEntity() {

 		Utils.sayTestStarted("testOneToOneBiDirRelationFromMappedSuperclassToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50,

@@ -740,6 +790,8 @@
 	public void testOneToManyUniDirRelationFromEntityToMappedSuperclass() {

 		Utils.sayTestStarted("testOneToManyUniDirRelationFromEntityToMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50,

@@ -764,6 +816,8 @@
 	public void testManyToOneRelationFromEntityToMappedSuperclass() {

 		Utils.sayTestStarted("testManyToOneRelationFromEntityToMappedSuperclass");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50,

@@ -793,6 +847,8 @@
 	public void testManyToOneBiDirRelationFromMappedSuperclassToEntity() {

 		Utils.sayTestStarted("testManyToOneBiDirRelationFromMappedSuperclassToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50,

@@ -817,6 +873,8 @@
 	public void testManyToManyUniDirRelationFromEntityToEmbeddable() {

 		Utils.sayTestStarted("testManyToManyUniDirRelationFromEntityToEmbeddable");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50,

@@ -846,6 +904,8 @@
 	public void testManyToManyBiDirRelationFromMappedSuperclassToEntity() {

 		Utils.sayTestStarted("testManyToManyBiDirRelationFromMappedSuperclassToEntity");

 

+		assertTrue("The diagram must be empty.", jpaDiagramEditor.mainEditPart().children().isEmpty());

+

 		SWTBotGefEditPart entity = editorProxy.addEntityToDiagram(50, 200,

 				"Entity1");

 		SWTBotGefEditPart mappedSuperclass = editorProxy.addMappedSuperclassToDiagram(50,

@@ -857,18 +917,24 @@
 						1, mappedSuperclass, entity);

 

 		editorProxy.deleteDiagramElements();

-		jpaDiagramEditor.save();

+		jpaDiagramEditor.saveAndClose();

 

 		Utils.sayTestFinished("testManyToManyBiDirRelationFromMappedSuperclassToEntity");

 	}

-

-	@AfterClass

-	public static void afterClass() throws CoreException{

-		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();

-		for(IProject project : projects){

-			project.delete(true, true, new NullProgressMonitor());

-		}

+	

+	@After

+	public void tearDown() throws Exception {

+		editorProxy.deleteDiagramElements();

+		Utils.printFormatted(">>>>>>>>>>>> elements are deleted from the diagram.");

 		

-		ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());

+		ListIterator<PersistenceUnit> lit = jpaProject.getRootContextNode().getPersistenceXml().getRoot().getPersistenceUnits().iterator();		

+		PersistenceUnit pu = lit.next();

+		Iterator<PersistentType> persistentTypesIterator = (Iterator<PersistentType>) pu.getPersistentTypes().iterator();

+		while(persistentTypesIterator.hasNext()){

+			Utils.printFormatted(">>>>>>>>>>>>>> persistent type resource must be deleted.");

+

+			PersistentType type = persistentTypesIterator.next();

+			type.getResource().delete(true, new NullProgressMonitor());

+		}

 	}

 }

diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/JPACreateFactory.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/JPACreateFactory.java
index fe4e987..761e664 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/JPACreateFactory.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/JPACreateFactory.java
@@ -22,6 +22,7 @@
 import java.util.HashSet;
 import java.util.Set;
 import java.util.StringTokenizer;
+
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -589,7 +590,7 @@
 		if (javaPersistentType == null)
 			throw new RuntimeException("The entity could not be created");
 		ICompilationUnit compilationUnit = JavaCore.createCompilationUnitFrom(entity);
-		JpaArtifactFactory.instance().addNewAttribute(javaPersistentType, compilationUnit, attName, attType, annotation, attActName, isCollection, null);
+		JpaArtifactFactory.instance().makeNewAttribute(null, javaPersistentType, compilationUnit, attName, attType, attActName, attType, null, null, isCollection);
 	}
 	
 	private IFile createFieldAnnotatedEntity(IFolder folder, String packageName, String entityName) throws IOException, CoreException {
diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/feature/CreateDeleteOnlyAttributeTest.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/feature/CreateDeleteOnlyAttributeTest.java
index 9d6264b..a9e61bb 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/feature/CreateDeleteOnlyAttributeTest.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/feature/CreateDeleteOnlyAttributeTest.java
@@ -96,7 +96,7 @@
 		jpt.removeListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr);
 		lsnr = new EntityAttributesChangeTestListener(2, 0);
 		jpt.addListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr);
-		JpaArtifactFactory.instance().makeNewAttribute(featureProvider, jpt, featureProvider.getCompilationUnit(jpt), "aaa", "java.lang.String", null, "aaa", null, false, true);
+		JpaArtifactFactory.instance().makeNewAttribute(featureProvider, jpt, null, "aaa", "java.lang.String", "aaa", "java.lang.String", null, null, false);
 		assertFalse(lsnr.waitForEvents());
 		assertEquals(1, lsnr.incrementCounter);
 		assertEquals(0, lsnr.decrementCounter);		
@@ -113,7 +113,7 @@
 		jpt.removeListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr);
 		lsnr = new EntityAttributesChangeTestListener(2, 0);
 		jpt.addListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr);
-		JpaArtifactFactory.instance().makeNewAttribute(featureProvider, jpt, featureProvider.getCompilationUnit(jpt), "aaa", "java.lang.String", null, "aaa", null, false, false);
+		JpaArtifactFactory.instance().makeNewAttribute(featureProvider, jpt, null, "aaa", "java.lang.String", "aaa", "java.lang.String", null, null, false);
 		assertFalse(lsnr.waitForEvents());
 		assertEquals(1, lsnr.incrementCounter);
 		assertEquals(0, lsnr.decrementCounter);		
@@ -136,7 +136,7 @@
 		EntityAttributesChangeTestListener lsnr = new EntityAttributesChangeTestListener(1, 1);
 		jpt.addListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr);
 		deleteAttribute("id");
-		JpaArtifactFactory.instance().makeNewAttribute(featureProvider, jpt, featureProvider.getCompilationUnit(jpt), "aaa", "java.lang.String", null, "aaa", null, false, false);
+		JpaArtifactFactory.instance().makeNewAttribute(featureProvider, jpt, null, "aaa", "java.lang.String", "aaa", "java.lang.String", null, null, false);
 		assertTrue(lsnr.waitForEvents());
 		jpt.removeListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr);
 		lsnr = new EntityAttributesChangeTestListener(0, 2);
diff --git a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/relation/CreateRelationAttributesTest.java b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/relation/CreateRelationAttributesTest.java
index ab2c58b..78b8f2c 100644
--- a/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/relation/CreateRelationAttributesTest.java
+++ b/jpa_diagram_editor/tests/org.eclipse.jpt.jpadiagrameditor.ui.tests/src/org/eclipse/jpt/jpadiagrameditor/ui/tests/internal/relation/CreateRelationAttributesTest.java
@@ -108,8 +108,7 @@
  
 		JavaPersistentAttribute attr = JpaArtifactFactory.instance().
 				addAttribute(featureProvider, (JavaPersistentType)t1, (JavaPersistentType)t2, null, "add", "add", false, 
-						createCompilationUnitFrom(customerFile),
-						createCompilationUnitFrom(addressFile));
+						createCompilationUnitFrom(customerFile));
 		jpaProject.getProject().build(IncrementalProjectBuilder.CLEAN_BUILD, new NullProgressMonitor());
 		PersistenceUnit pu = jpaProject.getRootContextNode().getPersistenceXml().getRoot().getPersistenceUnits().iterator().next();
 		t1 = pu.getPersistentType("abc.Customer");
@@ -151,8 +150,7 @@
  
 		JavaPersistentAttribute attr = JpaArtifactFactory.instance().
 			addAttribute(featureProvider, (JavaPersistentType)t1, (JavaPersistentType)t2, null, "address", "address", false, 						
-					createCompilationUnitFrom((IFile)t1.getResource()),
-					createCompilationUnitFrom((IFile)t2.getResource()));		
+					createCompilationUnitFrom((IFile)t1.getResource()));		
 		assertNotNull(attr);
 			
 		JpaArtifactFactory.instance().addOneToOneUnidirectionalRelation(featureProvider, (JavaPersistentType)t1, attr);
@@ -202,14 +200,12 @@
  
 		JavaPersistentAttribute attr = JpaArtifactFactory.instance().
 			addAttribute( featureProvider, (JavaPersistentType)t1, (JavaPersistentType)t2, null, "creditCard", "creditCard", false,
-					createCompilationUnitFrom((IFile)t1.getResource()),
-					createCompilationUnitFrom((IFile)t2.getResource()));		
+					createCompilationUnitFrom((IFile)t1.getResource()));		
 		assertNotNull(attr);
 
 		JavaPersistentAttribute attr2 = JpaArtifactFactory.instance().
 			addAttribute(featureProvider, (JavaPersistentType)t2, (JavaPersistentType)t1, null, "customer", "customer", false, 
-					createCompilationUnitFrom((IFile)t2.getResource()),
-					createCompilationUnitFrom((IFile)t1.getResource()));		
+					createCompilationUnitFrom((IFile)t2.getResource()));		
 		assertNotNull(attr2);
 		
 		JpaArtifactFactory.instance().addOneToOneBidirectionalRelation(featureProvider, (JavaPersistentType)t1, attr, (JavaPersistentType)t2, attr2);
@@ -278,8 +274,7 @@
 		}
  
 		JavaPersistentAttribute attr = JpaArtifactFactory.instance().addAttribute(featureProvider, (JavaPersistentType)t1, (JavaPersistentType)t2, null, "phones", "phones", true, 
-				createCompilationUnitFrom((IFile)t1.getResource()),
-				createCompilationUnitFrom((IFile)t2.getResource()));		
+				createCompilationUnitFrom((IFile)t1.getResource()));		
 		assertNotNull(attr);
 			
 		JpaArtifactFactory.instance().addOneToManyUnidirectionalRelation(featureProvider, (JavaPersistentType)t1, attr, false);
@@ -333,14 +328,12 @@
  
 		JavaPersistentAttribute singleSideAttribute = JpaArtifactFactory.instance().
 			addAttribute(featureProvider, (JavaPersistentType)singleSidePersistentType, (JavaPersistentType)manySidePersistentType, null, "reservations", "reservations", true, 
-				createCompilationUnitFrom((IFile)singleSidePersistentType.getResource()),
-				createCompilationUnitFrom((IFile)manySidePersistentType.getResource()));		
+				createCompilationUnitFrom((IFile)singleSidePersistentType.getResource()));		
 		assertNotNull(singleSideAttribute);
 
 		JavaPersistentAttribute manySideAttribute = JpaArtifactFactory.instance().
 			addAttribute(featureProvider, (JavaPersistentType)manySidePersistentType, (JavaPersistentType)singleSidePersistentType, null, "cruise", "cruise", false, 
-				createCompilationUnitFrom((IFile)manySidePersistentType.getResource()),
-				createCompilationUnitFrom((IFile)singleSidePersistentType.getResource()));		
+				createCompilationUnitFrom((IFile)manySidePersistentType.getResource()));		
 		assertNotNull(manySideAttribute);
 		
 		JpaArtifactFactory.instance().addOneToManyBidirectionalRelation(featureProvider, (JavaPersistentType)singleSidePersistentType, singleSideAttribute, (JavaPersistentType)manySidePersistentType, manySideAttribute, false);
@@ -428,8 +421,7 @@
  
 		JavaPersistentAttribute mappedAttribute = JpaArtifactFactory.instance().
 			addAttribute(featureProvider, (JavaPersistentType)manySidePersistentType, (JavaPersistentType)singleSidePersistentType, null, "ship", "ship", true, 
-					createCompilationUnitFrom((IFile)manySidePersistentType.getResource()),
-					createCompilationUnitFrom((IFile)singleSidePersistentType.getResource()));		
+					createCompilationUnitFrom((IFile)manySidePersistentType.getResource()));		
 		assertNotNull(mappedAttribute);
 			
 		JpaArtifactFactory.instance().addManyToOneUnidirectionalRelation(featureProvider, (JavaPersistentType)manySidePersistentType, mappedAttribute);
@@ -494,13 +486,11 @@
  
 		JavaPersistentAttribute ownerSideAttribute = JpaArtifactFactory.instance().
 			addAttribute(featureProvider, (JavaPersistentType)ownerSidePersistentType, (JavaPersistentType)inverseSidePersistentType, null, "customers", "customers", true,
-					createCompilationUnitFrom((IFile)ownerSidePersistentType.getResource()),
-					createCompilationUnitFrom((IFile)inverseSidePersistentType.getResource()));		
+					createCompilationUnitFrom((IFile)ownerSidePersistentType.getResource()));		
 		assertNotNull(ownerSideAttribute);
 
 		JavaPersistentAttribute inverseSideAttributes = JpaArtifactFactory.instance().addAttribute(featureProvider, (JavaPersistentType)inverseSidePersistentType, (JavaPersistentType)ownerSidePersistentType, null, "reservations", "reservations", true, 
-				createCompilationUnitFrom((IFile)inverseSidePersistentType.getResource()),
-				createCompilationUnitFrom((IFile)ownerSidePersistentType.getResource()));		
+				createCompilationUnitFrom((IFile)inverseSidePersistentType.getResource()));		
 		assertNotNull(inverseSideAttributes);
 		
 		JpaArtifactFactory.instance().addManyToManyBidirectionalRelation(featureProvider, (JavaPersistentType)ownerSidePersistentType, ownerSideAttribute, (JavaPersistentType)inverseSidePersistentType, inverseSideAttributes, false);
@@ -567,8 +557,7 @@
  
 		JavaPersistentAttribute annotatedSideAttribute = JpaArtifactFactory.instance().
 			addAttribute(featureProvider, (JavaPersistentType)annotatedPersistentType, (JavaPersistentType)referencedPersistentType, null, "cabins", "cabins", true,
-					createCompilationUnitFrom((IFile)annotatedPersistentType.getResource()),
-					createCompilationUnitFrom((IFile)referencedPersistentType.getResource()));		
+					createCompilationUnitFrom((IFile)annotatedPersistentType.getResource()));		
 		assertNotNull(annotatedSideAttribute);
 		
 		JpaArtifactFactory.instance().addManyToManyUnidirectionalRelation(featureProvider, (JavaPersistentType)annotatedPersistentType, annotatedSideAttribute, false);