diff options
author | kmoore | 2007-05-23 14:41:30 +0000 |
---|---|---|
committer | kmoore | 2007-05-23 14:41:30 +0000 |
commit | 85fcb5703de9408510ef6525a21f68216787e80b (patch) | |
tree | 817b96de6e4ea42a6a9de743518750a5a85548a3 | |
parent | 03504d53a15893705058839282b8f2735a4223ba (diff) | |
download | webtools.dali-85fcb5703de9408510ef6525a21f68216787e80b.tar.gz webtools.dali-85fcb5703de9408510ef6525a21f68216787e80b.tar.xz webtools.dali-85fcb5703de9408510ef6525a21f68216787e80b.zip |
188435 - exception populating attribute overrides composite
4 files changed, 56 insertions, 5 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAssociationOverride.java index f96d9fab33..47483895e5 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaAssociationOverride.java @@ -448,6 +448,54 @@ public class JavaAssociationOverride extends JavaOverride return null; } + @Override + public void updateFromJava(CompilationUnit astRoot) { + super.updateFromJava(astRoot); + updateSpecifiedJoinColumnsFromJava(astRoot); + } + + /** + * here we just worry about getting the join column lists the same size; + * then we delegate to the join columns to synch themselves up + */ + private void updateSpecifiedJoinColumnsFromJava(CompilationUnit astRoot) { + // synchronize the model join columns with the Java source + List<IJoinColumn> joinColumns = getSpecifiedJoinColumns(); + int persSize = joinColumns.size(); + int javaSize = 0; + boolean allJavaAnnotationsFound = false; + for (int i = 0; i < persSize; i++) { + JavaJoinColumn joinColumn = (JavaJoinColumn) joinColumns.get(i); + if (joinColumn.annotation(astRoot) == null) { + allJavaAnnotationsFound = true; + break; // no need to go any further + } + joinColumn.updateFromJava(astRoot); + javaSize++; + } + if (allJavaAnnotationsFound) { + // remove any model join columns beyond those that correspond to the Java annotations + while (persSize > javaSize) { + persSize--; + joinColumns.remove(persSize); + } + } + else { + // add new model join columns until they match the Java annotations + while (!allJavaAnnotationsFound) { + JavaJoinColumn joinColumn = this.createJavaJoinColumn(javaSize); + if (joinColumn.annotation(astRoot) == null) { + allJavaAnnotationsFound = true; + } + else { + getSpecifiedJoinColumns().add(joinColumn); + joinColumn.updateFromJava(astRoot); + javaSize++; + } + } + } + } + static JavaAssociationOverride createAssociationOverride(Owner owner, Member member, int index) { return JpaJavaMappingsFactory.eINSTANCE.createJavaAssociationOverride(owner, member, buildAnnotationAdapter(index)); } diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaCascade.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaCascade.java index 5be748d61b..d5998f5f61 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaCascade.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/mappings/JavaCascade.java @@ -10,6 +10,7 @@ package org.eclipse.jpt.core.internal.content.java.mappings; import java.util.Collection; +import java.util.List; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.impl.ENotificationImpl; @@ -186,7 +187,7 @@ public class JavaCascade extends JavaEObject implements ICascade private void updateJavaAnnotation(boolean isSet, CascadeType cascadeType) { String[] javaValue = this.cascadeAdapter.getValue(); CascadeType[] cascadeTypes = CascadeType.fromJavaAnnotationValue(javaValue); - Collection<CascadeType> cascadeCollection = CollectionTools.collection(cascadeTypes); + List<CascadeType> cascadeCollection = CollectionTools.list(cascadeTypes); if (cascadeCollection.contains(cascadeType)) { if (!isSet) { if (javaValue.length == 1) { diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInAssociationOverrideDialog.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInAssociationOverrideDialog.java index 358458b2dc..c324a95b34 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInAssociationOverrideDialog.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnInAssociationOverrideDialog.java @@ -13,7 +13,7 @@ import org.eclipse.jpt.core.internal.IAttributeMapping; import org.eclipse.jpt.core.internal.mappings.IAssociationOverride; import org.eclipse.jpt.core.internal.mappings.IEntity; import org.eclipse.jpt.core.internal.mappings.IJoinColumn; -import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping; +import org.eclipse.jpt.core.internal.mappings.IRelationshipMapping; import org.eclipse.jpt.db.internal.Schema; import org.eclipse.jpt.db.internal.Table; import org.eclipse.swt.widgets.Shell; @@ -49,10 +49,10 @@ public class JoinColumnInAssociationOverrideDialog extends JoinColumnDialog { protected Table getReferencedNameTable() { IAttributeMapping attributeMapping = this.associationOverride.getOwner().attributeMapping(this.associationOverride.getName()); - if (attributeMapping == null) { + if (attributeMapping == null || !(attributeMapping instanceof IRelationshipMapping)) { return null; } - IEntity targetEntity = ((ISingleRelationshipMapping) attributeMapping).getResolvedTargetEntity(); + IEntity targetEntity = ((IRelationshipMapping) attributeMapping).getResolvedTargetEntity(); if (targetEntity != null) { return targetEntity.primaryDbTable(); } diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java index b65cd3abe9..f534ed344b 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java @@ -245,7 +245,9 @@ public class OverridesComposite extends BaseJpaComposite public Object[] getElements(Object inputElement) { IEntity entity = (IEntity) inputElement; - return CollectionTools.addAll(entity.getAttributeOverrides().toArray(), entity.getAssociationOverrides()); + return CollectionTools.addAll( + entity.getAttributeOverrides().toArray(new IOverride[entity.getAttributeOverrides().size()]), + entity.getAssociationOverrides()); } }; } |