188937 - default target entity for one-to-many in xml is wrong
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
index f875b9a..9deacff 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaRelationshipMapping.java
@@ -674,7 +674,7 @@
 	 * return whether the specified non-array type is one of the container
 	 * types allowed by the JPA spec
 	 */
-	protected static boolean typeNamedIsContainer(String typeName) {
+	public static boolean typeNamedIsContainer(String typeName) {
 		return CollectionTools.contains(CONTAINER_TYPE_NAMES, typeName);
 	}
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java
index a7c3849..a93d5d6 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlMultiRelationshipMappingInternal.java
@@ -16,8 +16,11 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.Signature;
 import org.eclipse.jpt.core.internal.ITextRange;
 import org.eclipse.jpt.core.internal.ITypeMapping;
+import org.eclipse.jpt.core.internal.content.java.mappings.JavaRelationshipMapping;
 import org.eclipse.jpt.core.internal.content.orm.resource.OrmXmlMapper;
 import org.eclipse.jpt.core.internal.emfutility.DOMUtilities;
 import org.eclipse.jpt.core.internal.mappings.DefaultLazyFetchType;
@@ -813,4 +816,31 @@
 			setOrderBy(targetEntity.primaryKeyAttributeName() + " ASC");
 		}
 	}
+	
+	//TODO copied from JavaMultiRelationshipMapping
+	/**
+	 * extract the element type from the specified container signature and
+	 * convert it into a reference entity type name;
+	 * return null if the type is not a valid reference entity type (e.g. it's
+	 * another container or an array or a primitive or other Basic type)
+	 */
+	@Override
+	public String javaDefaultTargetEntity(String signature) {
+		String typeName = super.javaDefaultTargetEntity(signature);
+		return JavaRelationshipMapping.typeNamedIsContainer(typeName) ? this.javaDefaultTargetEntityFromContainer(signature) : null;
+	}
+
+	protected String javaDefaultTargetEntityFromContainer(String signature) {
+		String[] parmSignatures = Signature.getTypeArguments(signature);
+		if ((parmSignatures == null) || (parmSignatures.length != 1)) {
+			return null;
+		}
+		IType iType = getPersistentType().findJdtType();
+		if (iType == null) {
+			return null;
+		}
+		String elementSignature = parmSignatures[0];
+		String elementTypeName = buildReferenceEntityTypeName(elementSignature, iType);
+		return JavaRelationshipMapping.typeNamedIsContainer(elementTypeName) ? null : elementTypeName;
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java
index 85d4996..de47356 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlRelationshipMapping.java
@@ -14,8 +14,11 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.Signature;
 import org.eclipse.jpt.core.internal.IPersistentType;
 import org.eclipse.jpt.core.internal.ITypeMapping;
+import org.eclipse.jpt.core.internal.jdtutility.JDTTools;
 import org.eclipse.jpt.core.internal.mappings.ICascade;
 import org.eclipse.jpt.core.internal.mappings.IEntity;
 import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping;
@@ -551,4 +554,29 @@
 		}
 		setResolvedTargetEntity(null);
 	}
+	
+	/**
+	 * the default 'targetEntity' is calculated from the attribute type;
+	 * return null if the attribute type cannot possibly be an entity
+	 */
+	public String javaDefaultTargetEntity() {
+		return this.javaDefaultTargetEntity(this.getPersistentAttribute().getAttribute().typeSignature());
+	}
+
+	protected String javaDefaultTargetEntity(String signature) {
+		IType iType = getPersistentType().findJdtType();
+		if (iType != null) {
+			return buildReferenceEntityTypeName(signature, iType);
+		}
+		return null;
+	}
+
+	// TODO Embeddable???
+	public static String buildReferenceEntityTypeName(String signature, IType jdtType) {
+		if (Signature.getArrayCount(signature) > 0) {
+			return null; // arrays cannot be entities
+		}
+		return JDTTools.resolve(Signature.toString(signature), jdtType);
+	}
+
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java
index 1201162..8c4eea9 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/platform/XmlRelationshipMappingContext.java
@@ -71,7 +71,7 @@
 			if (attribute != null) {
 				IType iType = relationshipMapping().getPersistentType().findJdtType();
 				if (iType != null) {
-					return JavaRelationshipMapping.buildReferenceEntityTypeName(attribute.typeSignature(), iType);
+					return relationshipMapping().javaDefaultTargetEntity();
 				}
 			}
 		}