diff options
340 files changed, 6011 insertions, 3387 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpa_validation.properties b/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpa_validation.properties index 7f086f7a25..1cae819255 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpa_validation.properties +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpa_validation.properties @@ -175,7 +175,7 @@ VIRTUAL_PRIMARY_KEY_JOIN_COLUMN_UNRESOLVED_REFERENCED_COLUMN_NAME=In implied pri ### Overrides ### ATTRIBUTE_OVERRIDE_INVALID_TYPE=Persistent type of override attribute \"{0}\" cannot be resolved -ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED=Attributes (or subattributes of an attribute) that are mapped by a relationship should not be overridden. +ATTRIBUTE_OVERRIDE_DERIVED_AND_SPECIFIED=An ID attribute derived from a relationship mapping cannot be overridden. VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS=In implied association override \"{0}\", name must be specified when there are multiple inverse join columns VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS=In implied association override \"{0}\", referenced column name must be specified when there are multiple inverse join columns VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_UNRESOLVED_NAME=In implied association override \"{0}\", inverse join column \"{1}\" cannot be resolved on table \"{2}\" diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaFactory.java index b4238bb037..47577aa1b0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/JpaFactory.java @@ -12,12 +12,13 @@ package org.eclipse.jpt.jpa.core; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jpt.common.core.JptResourceModel; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.JpaRootContextNode; import org.eclipse.jpt.jpa.core.context.MappingFile; import org.eclipse.jpt.jpa.core.context.PersistentType; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.UniqueConstraint; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; @@ -25,7 +26,6 @@ import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.java.JavaBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaBasicMapping; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; import org.eclipse.jpt.jpa.core.context.java.JavaDiscriminatorColumn; @@ -57,6 +57,8 @@ import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaQuery; import org.eclipse.jpt.jpa.core.context.java.JavaQueryContainer; import org.eclipse.jpt.jpa.core.context.java.JavaQueryHint; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; import org.eclipse.jpt.jpa.core.context.java.JavaSequenceGenerator; import org.eclipse.jpt.jpa.core.context.java.JavaTable; @@ -107,16 +109,20 @@ import org.eclipse.jpt.jpa.core.resource.xml.JpaXmlResource; * context model objects. * <p> * Assumes a base JPA project context structure - * corresponding to the JPA spec: - * <pre> - * RootContext - * |- persistence.xml - * |- persistence unit(s) - * |- mapping file(s) (e.g. orm.xml) - * | |- persistent type mapping(s) (e.g. Entity) - * | |- persistent attribute mapping(s) (e.g. Basic) - * |- persistent type mapping(s) - * </pre> + * corresponding to the JPA spec:<ul> + * <li>RootContext<ul> + * <li>persistence.xml<ul> + * <li>persistence unit(s)<ul> + * <li>mapping file(s) (e.g. <code>orm.xml</code>)<ul> + * <li>type mapping(s) (e.g. Entity)<ul> + * <li>attribute mapping(s) (e.g. Basic) + * </ul> + * </ul> + * <li>type mapping(s) + * </ul> + * </ul> + * </ul> + * </ul> * ... and associated objects. *<p> * Provisional API: This interface is part of an interim API that is still @@ -210,7 +216,7 @@ public interface JpaFactory JavaJoinTable buildJavaJoinTable(JavaJoinTableRelationshipStrategy parent, Table.Owner owner); - JavaVirtualJoinTable buildJavaVirtualJoinTable(JavaVirtualJoinTableRelationshipStrategy parent, JoinTable overriddenTable); + JavaVirtualJoinTable buildJavaVirtualJoinTable(JavaVirtualJoinTableRelationshipStrategy parent, ReadOnlyTable.Owner owner, ReadOnlyJoinTable overriddenTable); JavaColumn buildJavaColumn(JavaJpaContextNode parent, JavaColumn.Owner owner); @@ -218,9 +224,9 @@ public interface JpaFactory JavaDiscriminatorColumn buildJavaDiscriminatorColumn(JavaEntity parent, JavaDiscriminatorColumn.Owner owner); - JavaJoinColumn buildJavaJoinColumn(JavaJpaContextNode parent, JavaJoinColumn.Owner owner, JoinColumnAnnotation joinColumnAnnotation); + JavaJoinColumn buildJavaJoinColumn(JavaJpaContextNode parent, JavaReadOnlyJoinColumn.Owner owner, JoinColumnAnnotation joinColumnAnnotation); - JavaVirtualJoinColumn buildJavaVirtualJoinColumn(JavaJpaContextNode parent, ReadOnlyJoinColumn.Owner owner, JoinColumn joinColumn); + JavaVirtualJoinColumn buildJavaVirtualJoinColumn(JavaJpaContextNode parent, JavaReadOnlyJoinColumn.Owner owner, ReadOnlyJoinColumn overriddenColumn); JavaSecondaryTable buildJavaSecondaryTable(JavaEntity parent, Table.Owner owner, SecondaryTableAnnotation tableAnnotation); @@ -230,7 +236,7 @@ public interface JpaFactory JavaGeneratedValue buildJavaGeneratedValue(JavaIdMapping parent, GeneratedValueAnnotation generatedValueAnnotation); - JavaPrimaryKeyJoinColumn buildJavaPrimaryKeyJoinColumn(JavaJpaContextNode parent, JavaBaseJoinColumn.Owner owner, PrimaryKeyJoinColumnAnnotation pkJoinColumnAnnotation); + JavaPrimaryKeyJoinColumn buildJavaPrimaryKeyJoinColumn(JavaJpaContextNode parent, JavaReadOnlyBaseJoinColumn.Owner owner, PrimaryKeyJoinColumnAnnotation pkJoinColumnAnnotation); JavaAttributeOverrideContainer buildJavaAttributeOverrideContainer(JavaJpaContextNode parent, JavaAttributeOverrideContainer.Owner owner); @@ -258,7 +264,7 @@ public interface JpaFactory JavaUniqueConstraint buildJavaUniqueConstraint(JavaJpaContextNode parent, UniqueConstraint.Owner owner, UniqueConstraintAnnotation constraintAnnotation); - JavaVirtualUniqueConstraint buildJavaVirtualUniqueConstraint(JavaJpaContextNode parent, UniqueConstraint uniqueConstraint); + JavaVirtualUniqueConstraint buildJavaVirtualUniqueConstraint(JavaJpaContextNode parent, ReadOnlyUniqueConstraint overriddenUniqueConstraint); JavaEnumeratedConverter buildJavaEnumeratedConverter(JavaAttributeMapping parent, EnumeratedAnnotation annotation); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverride.java index 2e34373553..b171530b47 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverride.java @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.context; /** - * Association override + * <em>Specified</em> association override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -24,11 +24,12 @@ package org.eclipse.jpt.jpa.core.context; public interface AssociationOverride extends Override_, ReadOnlyAssociationOverride { - VirtualAssociationOverride convertToVirtual(); - - OverrideRelationship getRelationship(); - void initializeFrom(ReadOnlyAssociationOverride oldOverride); void initializeFromVirtual(ReadOnlyAssociationOverride virtualOverride); + + // covariant overrides + VirtualAssociationOverride convertToVirtual(); + + OverrideRelationship getRelationship(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverrideContainer.java index 3155aad2cc..d65ffc57bf 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AssociationOverrideContainer.java @@ -10,9 +10,6 @@ package org.eclipse.jpt.jpa.core.context; import java.util.ListIterator; -import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; -import org.eclipse.jpt.jpa.core.internal.context.JptValidator; -import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; /** * Association override container. @@ -30,32 +27,28 @@ import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; public interface AssociationOverrideContainer extends OverrideContainer { - ListIterator<? extends ReadOnlyAssociationOverride> overrides(); - ReadOnlyAssociationOverride getOverrideNamed(String name); - ListIterator<? extends AssociationOverride> specifiedOverrides(); - AssociationOverride getSpecifiedOverride(int index); - AssociationOverride getSpecifiedOverrideNamed(String name); - ListIterator<? extends VirtualAssociationOverride> virtualOverrides(); - VirtualAssociationOverride convertOverrideToVirtual(Override_ specifiedOverride); - AssociationOverride convertOverrideToSpecified(VirtualOverride virtualOverride); - /** - * Return the relationship mapping with the given attribute name. - * Return null if it does not exist. This relationship mapping - * will be found in the mapped superclass, not in the owning entity + * Return the relationship mapping for the specified attribute. + * Return <code>null</code> if it does not exist. This relationship mapping + * will be found in the mapped superclass or embeddable type whose mapping + * is being overridden, not in the owning entity */ RelationshipMapping getRelationshipMapping(String attributeName); /** * Return the relationship with the specified attribute name. */ - Relationship resolveOverriddenRelationship(String attributeName); - - JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); - - JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + ReadOnlyRelationship resolveOverriddenRelationship(String attributeName); - JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver); + // covariant overrides + ListIterator<? extends ReadOnlyAssociationOverride> overrides(); + ReadOnlyAssociationOverride getOverrideNamed(String name); + ListIterator<? extends AssociationOverride> specifiedOverrides(); + AssociationOverride getSpecifiedOverride(int index); + AssociationOverride getSpecifiedOverrideNamed(String name); + ListIterator<? extends VirtualAssociationOverride> virtualOverrides(); + VirtualAssociationOverride convertOverrideToVirtual(Override_ specifiedOverride); + AssociationOverride convertOverrideToSpecified(VirtualOverride virtualOverride); // ********** owner ********** @@ -63,12 +56,9 @@ public interface AssociationOverrideContainer interface Owner extends OverrideContainer.Owner { - Relationship resolveOverriddenRelationship(String attributeName); - - JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); - - JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); - - JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver); + /** + * @see AssociationOverrideContainer#resolveOverriddenRelationship(String) + */ + ReadOnlyRelationship resolveOverriddenRelationship(String attributeName); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverride.java index e3cf50a22c..4ec7c27029 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.context; /** - * Attribute override. + * <em>Specified</em> attribute override. * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -24,11 +24,12 @@ package org.eclipse.jpt.jpa.core.context; public interface AttributeOverride extends Override_, ReadOnlyAttributeOverride { - VirtualAttributeOverride convertToVirtual(); - - Column getColumn(); - void initializeFrom(ReadOnlyAttributeOverride oldOverride); void initializeFromVirtual(ReadOnlyAttributeOverride oldOverride); + + // covariant overrides + VirtualAttributeOverride convertToVirtual(); + + Column getColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverrideContainer.java index d4d1369e42..e3a51dad74 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/AttributeOverrideContainer.java @@ -27,6 +27,15 @@ import java.util.ListIterator; public interface AttributeOverrideContainer extends OverrideContainer { + /** + * Return the column of the mapping or attribute override for the specified + * attribute. Return <code>null</code> if it does not exist. This + * column mapping/attribute override will be found in the mapped superclass + * (or embeddable), not in the owning entity. + */ + ReadOnlyColumn resolveOverriddenColumn(String attributeName); + + // covariant overrides ListIterator<? extends ReadOnlyAttributeOverride> overrides(); ReadOnlyAttributeOverride getOverrideNamed(String name); ListIterator<? extends AttributeOverride> specifiedOverrides(); @@ -36,14 +45,6 @@ public interface AttributeOverrideContainer VirtualAttributeOverride convertOverrideToVirtual(Override_ specifiedOverride); AttributeOverride convertOverrideToSpecified(VirtualOverride virtualOverride); - /** - * Return the column of the mapping or attribute override with the specified - * attribute name. Return <code>null</code> if it does not exist. This - * column mapping/attribute override will be found in the mapped superclass - * (or embeddable), not in the owning entity. - */ - Column resolveOverriddenColumn(String attributeName); - // ********** owner ********** @@ -53,6 +54,6 @@ public interface AttributeOverrideContainer /** * @see AttributeOverrideContainer#resolveOverriddenColumn(String) */ - Column resolveOverriddenColumn(String attributeName); + ReadOnlyColumn resolveOverriddenColumn(String attributeName); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseColumn.java index 1b63c9bd71..1b2c9c73ea 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -9,8 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; -import java.util.Iterator; - /** * column or join column * <p> @@ -31,36 +29,4 @@ public interface BaseColumn void setSpecifiedNullable(Boolean nullable); void setSpecifiedInsertable(Boolean insertable); void setSpecifiedUpdatable(Boolean updatable); - - boolean tableNameIsInvalid(); - - //TODO This is used by ColumnComposite to get a list of possible associated tables, - //but right now that list isn't going to update in the UI except when we repopulate - /** - * Return a list of table names that are valid for this column - */ - Iterator<String> candidateTableNames(); - - - // ********** owner ********** - - /** - * Interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides). - */ - interface Owner - extends NamedColumn.Owner - // ReadOnlyBaseColumn does not define an Owner - { - /** - * return whether the given table cannot be explicitly specified - * in the column's 'table' element - */ - boolean tableNameIsInvalid(String tableName); - - /** - * Return a list of table names that are valid for this column - */ - Iterator<String> candidateTableNames(); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseJoinColumn.java index 8cefbf942e..669769cd13 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/BaseJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -9,8 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; -import org.eclipse.jpt.jpa.db.Table; - /** * Specified * <ul> @@ -30,29 +28,4 @@ public interface BaseJoinColumn extends NamedColumn, ReadOnlyBaseJoinColumn { void setSpecifiedReferencedColumnName(String value); - - /** - * Return the wrapper for the referenced column datasource table - */ - Table getReferencedColumnDbTable(); - - boolean referencedColumnIsResolved(); - - boolean isVirtual(); - - - // ********** owner ********** - - /** - * Interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides). - */ - interface Owner - extends ReadOnlyBaseJoinColumn.Owner, NamedColumn.Owner - { - /** - * Return the wrapper for the datasource table for the referenced column - */ - Table getReferencedColumnDbTable(); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ColumnMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ColumnMapping.java index 9fa16f69b1..a3d40f4940 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ColumnMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ColumnMapping.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -22,7 +22,7 @@ package org.eclipse.jpt.jpa.core.context; * @since 2.0 */ public interface ColumnMapping - extends AttributeMapping, BaseColumn.Owner + extends AttributeMapping, ReadOnlyBaseColumn.Owner { Column getColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/DiscriminatorColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/DiscriminatorColumn.java index 6b7d22d13f..e9d60c2029 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/DiscriminatorColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/DiscriminatorColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. + * Copyright (c) 2005, 2011 Oracle. 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. @@ -72,7 +72,7 @@ public interface DiscriminatorColumn * (but pretty much just entities) */ interface Owner - extends NamedColumn.Owner + extends ReadOnlyNamedColumn.Owner { /** * Return the default discriminator column length diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinColumn.java index 42d2edf02d..900dde8078 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -28,20 +28,9 @@ public interface JoinColumn * Initialize the join column from the specified old join column. */ void initializeFrom(ReadOnlyJoinColumn oldJoinColumn); - + /** * Initialize the join column from the specified old virtual join column. */ void initializeFromVirtual(ReadOnlyJoinColumn virtualJoinColumn); - - - /** - * interface allowing join columns to be used in multiple places - * (e.g. 1:1 mappings and join tables) - */ - interface Owner - extends ReadOnlyJoinColumn.Owner, BaseJoinColumn.Owner, BaseColumn.Owner - { - // combine interfaces - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTable.java index 7a95d1b11a..1fbeba8c73 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -39,7 +39,7 @@ public interface JoinTable * Convert the join table's default inverse join column to a specified * inverse join column. */ - void convertDefaultToSpecifiedInverseJoinColumn(); + void convertDefaultInverseJoinColumnToSpecified(); ListIterator<? extends JoinColumn> inverseJoinColumns(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTableRelationshipStrategy.java index 74bf5f21b9..8aa2e7dc53 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/JoinTableRelationshipStrategy.java @@ -9,9 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; -import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; -import org.eclipse.jpt.jpa.core.internal.context.JptValidator; - /** * Join table relationship strategy. * <p> @@ -36,11 +33,4 @@ public interface JoinTableRelationshipStrategy void initializeFromVirtual(ReadOnlyJoinTableRelationshipStrategy virtualStrategy); JoinTable getJoinTable(); - - boolean validatesAgainstDatabase(); - - JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); - - JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); - } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/NamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/NamedColumn.java index c9374996a3..5b493c1995 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/NamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/NamedColumn.java @@ -9,10 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; -import org.eclipse.jpt.jpa.core.internal.context.JptValidator; -import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; -import org.eclipse.jpt.jpa.db.Table; - /** * Specified * <ul> @@ -37,35 +33,4 @@ public interface NamedColumn void setSpecifiedName(String name); void setColumnDefinition(String columnDefinition); - - - // ********** database stuff ********** - - /** - * Return the wrapper for the datasource table - */ - Table getDbTable(); - - /** - * Return whether the column is found on the datasource. - */ - boolean isResolved(); - - - // ********** owner ********** - - /** - * Interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides). - */ - interface Owner - extends ReadOnlyNamedColumn.Owner - { - /** - * Return the database table for the specified table name. - */ - Table resolveDbTable(String tableName); - - JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideContainer.java index d01155645d..eb032de7c6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -32,79 +32,78 @@ public interface OverrideContainer extends JpaContextNode { /** - * Return the type mapping that this override is contained in + * Return the type mapping that contains the override container. + * For example:<ul> + * <li>for an entity, this would be the entity itself + * <li>for an embedded, this would be type mapping where the embedded is + * declared, as opposed to the type mapping the embedded references + * </ul> */ TypeMapping getTypeMapping(); /** * Return the type mapping that contains the attributes/associations to - * be overridden. (Though the type mapping may not <em>directly</em> - * own them (i.e. they may be on a supertype mapping). - * (For example: for an entity, this would be the supertype mapping of - * that entity; for an embedded, this would be the target type mapping - * of the embedded.) + * be overridden; though the type mapping may not <em>directly</em> + * own them (e.g. they may be owned by a supertype mapping). + * For example:<ul> + * <li>for an entity, this would be the entity's supertype mapping + * <li>for an embedded, this would be the embedded's target type mapping + * </ul> */ TypeMapping getOverridableTypeMapping(); /** - * Return the names of all attributes that can be overridden + * Return the names of all the attributes that can be overridden + * (i.e. an override must have a name from this list). + * This is usually just all of the overridable names of the overridable + * type mapping. + * @see #getOverridableTypeMapping() */ Iterator<String> allOverridableNames(); /** - * Convert the specified specified override to <em>virtual</em>. - * Return the new override. - */ - VirtualOverride convertOverrideToVirtual(Override_ specifiedOverride); - - /** - * Convert the specified virtual override to <em>specified</em>. - * Return the new override. - */ - Override_ convertOverrideToSpecified(VirtualOverride virtualOverride); - - /** - * return whether the given table cannot be explicitly specified - * in the column or join column's 'table' element + * Return whether the specified table cannot be explicitly specified + * as the table for an override's column or join column. */ boolean tableNameIsInvalid(String tableName); /** - * Return the names of tables that are valid for the overrides column or join columns. + * Return the names of tables that are valid for an override's + * column or join column. */ Iterator<String> candidateTableNames(); /** - * Return the database table for the specified table name + * Return the database table for the specified table name. */ Table resolveDbTable(String tableName); /** - * Return the name of the table which the column belongs to by default + * Return the name of the default table for an override's column or join column. */ String getDefaultTableName(); - JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver); + JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideTextRangeResolver textRangeResolver); - JptValidator buildValidator(Override_ override, OverrideTextRangeResolver textRangeResolver); + JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver); // ********** overrides ********** /** - * Return the overrides, both specified and virtual. + * Return the overrides, both <em>specified</em> and <em>virtual</em>. */ - // TODO bjv change to a collection? + // TODO bjv change to an iterable ListIterator<? extends ReadOnlyOverride> overrides(); /** - * Return the number of overrides, both specified and default. + * Return the number of overrides, both <em>specified</em> and <em>virtual</em>. */ int overridesSize(); /** * Return the override with the specified name, - * whether specified or virtual. + * whether <em>specified</em> or <em>virtual</em>. */ // TODO look into getting rid of this; // we should probably use #getSpecifiedOverrideNamed(String) @@ -114,102 +113,107 @@ public interface OverrideContainer // ********** specified overrides ********** /** - * Return the specified overrides. - * No add/remove for specified overrides, the - * virtual overrides will be populated from the owner, then use - * {@link VirtualOverride#convertToSpecified()} to add/remove the - * override from the container. + * Return the <em>specified</em> overrides. The container has no API for + * adding or removing <em>specified</em> overrides. The container's + * <em>virtual</em> overrides are built according to the list of overridable + * attribute names returned by the container's parent. <em>Specified</em> + * overrides can be created via {@link VirtualOverride#convertToSpecified()}. + * <em>Specified</em> overrides can be remvoed via + * {@link Override_#convertToVirtual()}. */ ListIterator<? extends Override_> specifiedOverrides(); String SPECIFIED_OVERRIDES_LIST = "specifiedOverrides"; //$NON-NLS-1$ /** - * Return the number of specified overrides. + * Return the number of <em>specified</em> overrides. */ int specifiedOverridesSize(); /** - * Return the specified override at the specified index. + * Return the <em>specified</em> override at the specified index. */ Override_ getSpecifiedOverride(int index); /** - * Move the specified override from the source index to the target index. + * Move the <em>specified</em> override from the source index to the + * target index. */ void moveSpecifiedOverride(int targetIndex, int sourceIndex); + /** + * Return the <em>specified</em> override at the specified index. + */ Override_ getSpecifiedOverrideNamed(String name); + /** + * Convert the specified <em>specified</em> override to <em>virtual</em>. + * Return the new override. + */ + VirtualOverride convertOverrideToVirtual(Override_ specifiedOverride); + // ********** virtual overrides ********** /** - * Return the virtual overrides, those not specified. + * Return the <em>virtual</em> overrides (i.e. those not <em>specified</em>). */ // TODO change to a collection? ListIterator<? extends VirtualOverride> virtualOverrides(); String VIRTUAL_OVERRIDES_LIST = "virtualOverrides"; //$NON-NLS-1$ /** - * Return the number of virtual overrides. + * Return the number of <em>virtual</em> overrides. */ int virtualOverridesSize(); + /** + * Convert the specified <em>virtual</em> override to <em>specified</em>. + * Return the new override. + */ + Override_ convertOverrideToSpecified(VirtualOverride virtualOverride); - // ********** owner ********** + + // ********** container owner ********** interface Owner { /** - * Return the mapping of the persistent type where the container is defined. - * (For example: for an entity, this would be the entity; for an embedded, - * this would be the type mapping where the embedded is defined.) + * @see OverrideContainer#getTypeMapping() */ TypeMapping getTypeMapping(); /** - * Return the type mapping that contains the attributes/associations to - * be overridden. (Though the type mapping may not <em>directly</em> - * own them (i.e. they may be on a supertype mapping). - * (For example: for an entity, this would be the supertype mapping of - * that entity; for an embedded, this would be the target type mapping - * of the embedded.) + * @see OverrideContainer#getOverridableTypeMapping() */ TypeMapping getOverridableTypeMapping(); /** - * Return all the names of the attributes/associations to be overridden. - * This is usually just all of the overridable names of the overridable - * type mapping. - * @see #getOverridableTypeMapping() + * @see OverrideContainer#allOverridableNames() */ Iterator<String> allOverridableNames(); /** - * Return the name of an override column's/join column's default table. + * @see OverrideContainer#getDefaultTableName() */ String getDefaultTableName(); /** - * Return whether the specified table cannot be explicitly specified - * by a column/join column. + * @see OverrideContainer#tableNameIsInvalid(String) */ boolean tableNameIsInvalid(String tableName); /** - * Return the database table for the specified table name. + * @see OverrideContainer#resolveDbTable(String) */ org.eclipse.jpt.jpa.db.Table resolveDbTable(String tableName); /** - * Return the table names that are valid for the override's column - * or join columns + * @see OverrideContainer#candidateTableNames() */ Iterator<String> candidateTableNames(); - JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver); + JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver); - JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver); + JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver); } - } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideRelationship.java index f826819245..83d6803e66 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/OverrideRelationship.java @@ -27,8 +27,6 @@ public interface OverrideRelationship extends ReadOnlyOverrideRelationship, JoinColumnRelationship { - AssociationOverride getAssociationOverride(); - void initializeFromVirtual(ReadOnlyOverrideRelationship virtualRelationship); void initializeFromVirtualJoinColumnRelationship(ReadOnlyJoinColumnRelationship virtualRelationship); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Override_.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Override_.java index d4da2d94d6..efaeabe78d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Override_.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Override_.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.context; /** - * <ul> + * <em>Specified</em><ul> * <li>attribute override * <li>association override * </ul> @@ -25,14 +25,16 @@ package org.eclipse.jpt.jpa.core.context; */ // the class name "Override" is sorta taken: java.lang.Override // maybe if it weren't in the java.lang package we would take it on, but... :) +// very little code will directly refer to this interface, so the underscore +// isn't *too* evil... public interface Override_ extends ReadOnlyOverride { void setName(String value); /** - * Convert the override to a virtual override. - * Return the new override. + * Convert the <em>specified</em> override to a <em>virtual</em> override. + * Return the new <em>virtual</em> override. * @see #isVirtual() */ VirtualOverride convertToVirtual(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAssociationOverride.java index a2956964d5..039065c53e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAssociationOverride.java @@ -21,8 +21,12 @@ package org.eclipse.jpt.jpa.core.context; public interface ReadOnlyAssociationOverride extends ReadOnlyOverride { - AssociationOverrideContainer getContainer(); - + /** + * Return the overridden relationship mapping. + * Return <code>null</code> if it does not exist. This relationship mapping + * will be found in the mapped superclass or embeddable type, not in the + * owning entity + */ RelationshipMapping getMapping(); ReadOnlyOverrideRelationship getRelationship(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAttributeOverride.java index c82fa690fd..f3e0078e3f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -21,7 +21,5 @@ package org.eclipse.jpt.jpa.core.context; public interface ReadOnlyAttributeOverride extends ReadOnlyOverride { - AttributeOverrideContainer getContainer(); - ReadOnlyColumn getColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseColumn.java index c4bf083c72..03d3c921e8 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; +import java.util.Iterator; + /** * Read-only @@ -87,4 +89,36 @@ public interface ReadOnlyBaseColumn boolean isDefaultUpdatable(); String DEFAULT_UPDATABLE_PROPERTY = "defaultUpdatable"; //$NON-NLS-1$ boolean DEFAULT_UPDATABLE = true; + + + // ********** misc ********** + + boolean tableNameIsInvalid(); + + /** + * Return a list of table names that are valid for this column + */ + Iterator<String> candidateTableNames(); + + + // ********** owner ********** + + /** + * Interface allowing columns to be used in multiple places + * (e.g. basic mappings and attribute overrides). + */ + interface Owner + extends NamedColumn.Owner + { + /** + * return whether the given table cannot be explicitly specified + * in the column's 'table' element + */ + boolean tableNameIsInvalid(String tableName); + + /** + * Return a list of table names that are valid for this column + */ + Iterator<String> candidateTableNames(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseJoinColumn.java index 41608b1a68..d880764b28 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyBaseJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; +import org.eclipse.jpt.jpa.db.Table; + /** * Read-only * <ul> @@ -39,6 +41,16 @@ public interface ReadOnlyBaseJoinColumn // ********** misc ********** + /** + * Return the wrapper for the referenced column datasource table + */ + Table getReferencedColumnDbTable(); + + boolean referencedColumnIsResolved(); + + // TODO bjv rename? + boolean isVirtual(); + boolean isDefault(); @@ -51,6 +63,11 @@ public interface ReadOnlyBaseJoinColumn interface Owner extends ReadOnlyNamedColumn.Owner { + /** + * Return the wrapper for the datasource table for the referenced column + */ + Table getReferencedColumnDbTable(); + boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn); /** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinColumn.java index 170cffca0f..a03dbde4d5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -26,8 +26,7 @@ public interface ReadOnlyJoinColumn * (e.g. basic mappings and attribute overrides). */ interface Owner - extends ReadOnlyBaseJoinColumn.Owner - // ReadOnlyBaseColumn does not define an Owner + extends ReadOnlyBaseJoinColumn.Owner, ReadOnlyBaseColumn.Owner { /** * The target of the relationship will usually be the target entity. diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinTableRelationshipStrategy.java index 7727e9eab2..3a35c3addf 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyJoinTableRelationshipStrategy.java @@ -9,6 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; + /** * Read-only join table relationship strategy. * <p> @@ -40,4 +43,10 @@ public interface ReadOnlyJoinTableRelationshipStrategy * Return the default name of the strategy's join table */ String getJoinTableDefaultName(); + + boolean validatesAgainstDatabase(); + + JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyNamedColumn.java index 09afa25b07..593cfd293d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyNamedColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -9,6 +9,10 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.jpt.jpa.db.Table; + /** * Read-only * <ul> @@ -56,6 +60,19 @@ public interface ReadOnlyNamedColumn String COLUMN_DEFINITION_PROPERTY = "columnDefinition"; //$NON-NLS-1$ + // ********** database stuff ********** + + /** + * Return the column's datasource table. + */ + Table getDbTable(); + + /** + * Return whether the column is found on the datasource. + */ + boolean isResolved(); + + // ********** owner ********** /** @@ -78,5 +95,12 @@ public interface ReadOnlyNamedColumn * Return the default column name. */ String getDefaultColumnName(); + + /** + * Return the database table for the specified table name. + */ + Table resolveDbTable(String tableName); + + JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverride.java index f1481d7ede..f49749a26e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -9,8 +9,13 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; +import java.util.Iterator; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.db.Table; + /** - * Read-only<ul> + * Read-only (<em>specified</em> or <em>virtual</em>)<ul> * <li>attribute override * <li>association override * </ul> @@ -23,18 +28,46 @@ package org.eclipse.jpt.jpa.core.context; public interface ReadOnlyOverride extends JpaContextNode { - OverrideContainer getContainer(); - String getName(); String NAME_PROPERTY = "name"; //$NON-NLS-1$ /** * Return <code>true</code> if the override is not explicitly specified on - * the owning object (i.e. it occurs by default); return <code>false</code> - * if the override is explicitly specified on the owning object. + * the override's parent (i.e. it occurs by default); return <code>false</code> + * if the override is explicitly specified on the override's parent. * * @see Override_#convertToVirtual() * @see VirtualOverride#convertToSpecified() */ + // TODO bjv rename? boolean isVirtual(); + + /** + * @see OverrideContainer#getTypeMapping() + */ + TypeMapping getTypeMapping(); + + /** + * Return whether the specified table cannot be explicitly specified + * as the table for the override's column or join column. + */ + boolean tableNameIsInvalid(String tableName); + + /** + * Return the names of tables that are valid for the override's + * column or join column. + */ + Iterator<String> candidateTableNames(); + + /** + * Return the database table for the specified table name. + */ + Table resolveDbTable(String tableName); + + /** + * Return the name of the default table for the override's column or join column. + */ + String getDefaultTableName(); + + JptValidator buildColumnValidator(ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverrideRelationship.java index 82d9a2e076..8ca8284888 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyOverrideRelationship.java @@ -9,6 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; +import java.util.Iterator; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.db.Table; + /** * Read-only association override relationship * <p> @@ -23,7 +28,33 @@ package org.eclipse.jpt.jpa.core.context; public interface ReadOnlyOverrideRelationship extends ReadOnlyJoinColumnRelationship { - ReadOnlyAssociationOverride getAssociationOverride(); + String getAttributeName(); + + /** + * @see ReadOnlyOverride#getTypeMapping() + */ + TypeMapping getTypeMapping(); + + /** + * Return whether the specified table cannot be explicitly specified + * as the table for the relationship's join column. + */ + boolean tableNameIsInvalid(String tableName); + + /** + * Return the names of tables that are valid for the relationship's + * join column. + */ + Iterator<String> candidateTableNames(); + + /** + * Return the database table for the specified table name. + */ + Table resolveDbTable(String tableName); + + String getDefaultTableName(); + + JptValidator buildColumnValidator(ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver); void initializeOnSpecified(OverrideRelationship specifiedRelationship); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyTable.java index 82e86fc3ee..6820ddbdd0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -10,6 +10,8 @@ package org.eclipse.jpt.jpa.core.context; import java.util.ListIterator; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.db.Catalog; import org.eclipse.jpt.jpa.db.Schema; import org.eclipse.jpt.jpa.db.SchemaContainer; @@ -38,6 +40,16 @@ public interface ReadOnlyTable String getDefaultName(); String DEFAULT_NAME_PROPERTY = "defaultName"; //$NON-NLS-1$ + /** + * Return whether the table can be resolved to a table on the database. + */ + boolean isResolved(); + + /** + * Return the corresponding database table. + */ + org.eclipse.jpt.jpa.db.Table getDbTable(); + // ********** schema ********** @@ -51,6 +63,17 @@ public interface ReadOnlyTable String getDefaultSchema(); String DEFAULT_SCHEMA_PROPERTY = "defaultSchema"; //$NON-NLS-1$ + /** + * Return whether the table's schema can be resolved to a schema on the + * database. + */ + boolean schemaIsResolved(); + + /** + * Return the corresponding database schema. + */ + Schema getDbSchema(); + // ********** catalog ********** @@ -64,6 +87,17 @@ public interface ReadOnlyTable String getDefaultCatalog(); String DEFAULT_CATALOG_PROPERTY = "defaultCatalog"; //$NON-NLS-1$ + /** + * Return whether the table has a catalog and it can be resolved to a + * catalog on the database. + */ + boolean catalogIsResolved(); + + /** + * Return the corresponding database catalog. + */ + Catalog getDbCatalog(); + // ********** unique constraints ********** @@ -73,25 +107,26 @@ public interface ReadOnlyTable ReadOnlyUniqueConstraint getUniqueConstraint(int index); - // ********** database ********** + // ********** misc ********** /** - * Return the corresponding database table. + * Return the corresponding database schema container (catalog or database). */ - org.eclipse.jpt.jpa.db.Table getDbTable(); + SchemaContainer getDbSchemaContainer(); /** - * Return the corresponding database schema. + * Return whether the table is validated against a live database connection. */ - Schema getDbSchema(); + boolean validatesAgainstDatabase(); - /** - * Return the corresponding database catalog. - */ - Catalog getDbCatalog(); + + // ********** owner ********** /** - * Return the corresponding database schema container (catalog or database). + * interface allowing columns to be used in multiple places + * (e.g. basic mappings and attribute overrides) */ - SchemaContainer getDbSchemaContainer(); + interface Owner { + JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyUniqueConstraint.java index e98d8b0317..4273e163ca 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyUniqueConstraint.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReadOnlyUniqueConstraint.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; +import java.util.Iterator; + /** * Read-only database unique constraint * <p> @@ -36,4 +38,14 @@ public interface ReadOnlyUniqueConstraint * Return the column name at the specified index. */ String getColumnName(int index); + + + // ********** owner ********** + + /** + * All containers must implement this interface. + */ + interface Owner { + Iterator<String> candidateUniqueConstraintColumnNames(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReferenceTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReferenceTable.java index 7a210e7036..fa5b2f781b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReferenceTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/ReferenceTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -34,7 +34,7 @@ public interface ReferenceTable /** * Convert the reference table's default join column to a specified join column. */ - void convertDefaultToSpecifiedJoinColumn(); + void convertDefaultJoinColumnToSpecified(); ListIterator<? extends JoinColumn> joinColumns(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Table.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Table.java index c475063105..4561781a39 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Table.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/Table.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -10,8 +10,6 @@ package org.eclipse.jpt.jpa.core.context; import java.util.ListIterator; -import org.eclipse.jpt.jpa.core.internal.context.JptValidator; -import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; /** * <ul> @@ -46,43 +44,9 @@ public interface Table void removeUniqueConstraint(UniqueConstraint uniqueConstraint); void moveUniqueConstraint(int targetIndex, int sourceIndex); - - // ********** misc ********** - /** * Return whether the table is specified in the * (Java or XML) resource. */ boolean isSpecifiedInResource(); - - /** - * Return whether the table can be resolved to a table on the database. - */ - boolean isResolved(); - - /** - * Return whether the table's schema can be resolved to a schema on the - * database. - */ - boolean schemaIsResolved(); - - /** - * Return whether the table has a catalog and it can be resolved to a - * catalog on the database. - */ - boolean catalogIsResolved(); - - /** - * Return whether the table is validated against a live database connection. - */ - boolean validatesAgainstDatabase(); - - /** - * interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides) - */ - interface Owner - { - JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/TypeMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/TypeMapping.java index 7786bc9bdb..dea91b312d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/TypeMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/TypeMapping.java @@ -106,13 +106,21 @@ public interface TypeMapping Iterator<String> allAssociatedTableNames(); /** - * Return the resolved associated db table with the specified name. + * Return the resolved <em>associated</em> db table with the specified name; + * i.e. the specified table must be among those associated with the type + * mapping otherwise return <code>null</code>. + * <p> + * <strong>NB:</strong> The spec does allow for columns or join columns to + * specify a schema and/or catalog; so the results can be unpredictable.... */ org.eclipse.jpt.jpa.db.Table resolveDbTable(String tableName); /** * Return whether the specified table is invalid for any annotations - * associated with the type mapping. + * associated with the type mapping. The table name is case- + * <em>sensitive</em> when the database connection is missing or inactive; + * when the database connection is active, case-sensitivity is determined + * by the database. */ boolean tableNameIsInvalid(String tableName); @@ -148,6 +156,11 @@ public interface TypeMapping */ boolean attributeMappingKeyAllowed(String attributeMappingKey); + /** + * Return whether the attribute with the specified name is a derived ID. + */ + boolean attributeIsDerivedId(String attributeName); + // ********** attribute overrides ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/UniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/UniqueConstraint.java index 3b6fa6241b..04682f9363 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/UniqueConstraint.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/UniqueConstraint.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -9,8 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context; -import java.util.Iterator; - /** * database unique constraint * <p> @@ -62,14 +60,4 @@ public interface UniqueConstraint * unique constraint's list of column names. */ void moveColumnName(int targetIndex, int sourceIndex); - - - // ********** owner ********** - - /** - * All containers must implement this interface. - */ - interface Owner { - Iterator<String> candidateUniqueConstraintColumnNames(); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAssociationOverride.java index 32aefc25da..e6de19472f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAssociationOverride.java @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.context; /** - * Virtual association override + * <em>Virtual</em> association override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -21,9 +21,10 @@ package org.eclipse.jpt.jpa.core.context; public interface VirtualAssociationOverride extends VirtualOverride, ReadOnlyAssociationOverride { + ReadOnlyRelationship resolveOverriddenRelationship(); + + // covariant overrides AssociationOverride convertToSpecified(); VirtualOverrideRelationship getRelationship(); - - Relationship resolveOverriddenRelationship(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAttributeOverride.java index ba2787c54f..1436e77340 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.context; /** - * Virtual attribute override + * <em>Virtual</em> attribute override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -21,6 +21,7 @@ package org.eclipse.jpt.jpa.core.context; public interface VirtualAttributeOverride extends VirtualOverride, ReadOnlyAttributeOverride { + // covariant overrides AttributeOverride convertToSpecified(); VirtualColumn getColumn(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseColumn.java index 7d956dc5fc..69408b68e6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -24,5 +24,5 @@ package org.eclipse.jpt.jpa.core.context; public interface VirtualBaseColumn extends VirtualNamedColumn, ReadOnlyBaseColumn { - BaseColumn getOverriddenColumn(); + ReadOnlyBaseColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseJoinColumn.java index 2eabed2eb4..494dda70a1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualBaseJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -21,5 +21,5 @@ package org.eclipse.jpt.jpa.core.context; public interface VirtualBaseJoinColumn extends VirtualNamedColumn, ReadOnlyBaseJoinColumn { - BaseJoinColumn getOverriddenColumn(); + ReadOnlyBaseJoinColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualColumn.java index 43486daa38..29dac38adb 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -21,7 +21,7 @@ package org.eclipse.jpt.jpa.core.context; public interface VirtualColumn extends VirtualBaseColumn, ReadOnlyColumn { - Column getOverriddenColumn(); + ReadOnlyColumn getOverriddenColumn(); // ********** owner ********** @@ -30,11 +30,11 @@ public interface VirtualColumn * Interface allowing the virtual column to be get the column it overrides. */ interface Owner - extends ReadOnlyColumn.Owner + extends ReadOnlyBaseColumn.Owner { /** * Return the column overridden by the virtual column. */ - Column resolveOverriddenColumn(); + ReadOnlyColumn resolveOverriddenColumn(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinColumn.java index a49d3ef972..73ab8e8335 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -21,5 +21,5 @@ package org.eclipse.jpt.jpa.core.context; public interface VirtualJoinColumn extends VirtualBaseJoinColumn, VirtualBaseColumn, ReadOnlyJoinColumn { - JoinColumn getOverriddenColumn(); + ReadOnlyJoinColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinTable.java index 16b9f1dc39..c144623532 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualJoinTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -30,5 +30,5 @@ public interface VirtualJoinTable VirtualJoinColumn getSpecifiedInverseJoinColumn(int index); VirtualJoinColumn getDefaultInverseJoinColumn(); - JoinTable getOverriddenTable(); + ReadOnlyJoinTable getOverriddenTable(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualNamedColumn.java index 175e487a12..7a7316315a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualNamedColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,8 +10,7 @@ package org.eclipse.jpt.jpa.core.context; /** - * Virtual - * <ul> + * <em>Virtual</em><ul> * <li>column * <li>join column * </ul> @@ -27,5 +26,5 @@ public interface VirtualNamedColumn /** * Return the virtual column's wrapped column. */ - NamedColumn getOverriddenColumn(); + ReadOnlyNamedColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverride.java index 791c6aac1a..3aac4c73e1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.context; /** - * Virtual<ul> + * <em>Virtual</em><ul> * <li>attribute override * <li>association override * </ul> @@ -24,8 +24,8 @@ public interface VirtualOverride extends ReadOnlyOverride { /** - * Convert the virtual override to a specified override. - * Return the new override. + * Convert the <em>virtual</em> override to a <em>specified</em> override. + * Return the new <em>specified</em> override. * @see #isVirtual() */ Override_ convertToSpecified(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverrideRelationship.java index 728eed9a15..693897dc7b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualOverrideRelationship.java @@ -24,5 +24,5 @@ public interface VirtualOverrideRelationship extends ReadOnlyOverrideRelationship, VirtualJoinColumnRelationship { - VirtualAssociationOverride getAssociationOverride(); + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualPrimaryKeyJoinColumn.java index 4a2ef7c118..92af7bf637 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualPrimaryKeyJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualPrimaryKeyJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,7 +10,10 @@ package org.eclipse.jpt.jpa.core.context; /** - * Virtual primary key join column + * Virtual primary key join column. There are only <em>orm.xml</em> virtual + * primary key join columns; used to represent the default columns taken from + * the Java entity. Therefore, it's arguable whether we need this interface; but + * it makes the inheritance hierarchies a bit more consistent.... * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -21,5 +24,9 @@ package org.eclipse.jpt.jpa.core.context; public interface VirtualPrimaryKeyJoinColumn extends VirtualBaseJoinColumn, ReadOnlyPrimaryKeyJoinColumn { + /** + * This is not the best method name; we are simply overloading the meaning + * of the inherited method. + */ PrimaryKeyJoinColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualReferenceTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualReferenceTable.java index 1d14fdbadf..f6f7fdb925 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualReferenceTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualReferenceTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -28,5 +28,5 @@ public interface VirtualReferenceTable VirtualJoinColumn getSpecifiedJoinColumn(int index); VirtualJoinColumn getDefaultJoinColumn(); - ReferenceTable getOverriddenTable(); + ReadOnlyReferenceTable getOverriddenTable(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualRelationship.java index bc64dc7c0e..e7bf4c856a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualRelationship.java @@ -23,5 +23,5 @@ public interface VirtualRelationship { VirtualRelationshipStrategy getStrategy(); - Relationship resolveOverriddenRelationship(); + ReadOnlyRelationship resolveOverriddenRelationship(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualTable.java index e168fa3985..fb99190b62 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -23,8 +23,8 @@ import java.util.ListIterator; public interface VirtualTable extends ReadOnlyTable { + ReadOnlyTable getOverriddenTable(); + ListIterator<? extends VirtualUniqueConstraint> uniqueConstraints(); VirtualUniqueConstraint getUniqueConstraint(int index); - - Table getOverriddenTable(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualUniqueConstraint.java index 32b9128a1d..1ae02a89bc 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualUniqueConstraint.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/VirtualUniqueConstraint.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,7 +10,10 @@ package org.eclipse.jpt.jpa.core.context; /** - * Virtual database unique constraint + * Virtual database unique constraint. <em>Virtual</em> unique constraints + * are held by <em>virtual</em> join tables (which are held by <em>virtual</em> + * association overrides) and, in the case or <code>orm.xml</code>, + * <em>virtual</em> secondary tables. * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -24,5 +27,5 @@ public interface VirtualUniqueConstraint /** * Return the wrapped unique constraint. */ - UniqueConstraint getOverriddenUniqueConstraint(); + ReadOnlyUniqueConstraint getOverriddenUniqueConstraint(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverride.java index 1ceb4e962a..07f9c95e90 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverride.java @@ -13,7 +13,7 @@ import org.eclipse.jpt.jpa.core.context.AssociationOverride; import org.eclipse.jpt.jpa.core.resource.java.AssociationOverrideAnnotation; /** - * Java association override + * <em>Specified</em> Java association override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverrideContainer.java index b43e2ee1de..d963e33cd4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAssociationOverrideContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -12,6 +12,7 @@ package org.eclipse.jpt.jpa.core.context.java; import java.util.ListIterator; import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverrideRelationship; import org.eclipse.jpt.jpa.core.context.VirtualOverride; /** @@ -29,6 +30,15 @@ import org.eclipse.jpt.jpa.core.context.VirtualOverride; public interface JavaAssociationOverrideContainer extends AssociationOverrideContainer, JavaOverrideContainer { + /** + * Return the specified override's relationship. + * This is used by the <code>orm.xml</code> association override container + * when it is also using the Java container's override names. + * @see #getOverrideNames() + */ + ReadOnlyOverrideRelationship getOverrideRelationship(String overrideName); + + // covariant overrides ListIterator<JavaReadOnlyAssociationOverride> overrides(); JavaReadOnlyAssociationOverride getOverrideNamed(String name); ListIterator<JavaAssociationOverride> specifiedOverrides(); @@ -44,6 +54,6 @@ public interface JavaAssociationOverrideContainer interface Owner extends AssociationOverrideContainer.Owner, JavaOverrideContainer.Owner { - // combine two interfaces + // combine interfaces } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverride.java index 093e0e8eca..5b992d9ed7 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -13,7 +13,7 @@ import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.resource.java.AttributeOverrideAnnotation; /** - * Java attribute override + * <em>Specified</em> Java attribute override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverrideContainer.java index 48bd48d7d5..5e8f23600e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaAttributeOverrideContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -12,6 +12,7 @@ package org.eclipse.jpt.jpa.core.context.java; import java.util.ListIterator; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; import org.eclipse.jpt.jpa.core.context.VirtualOverride; /** @@ -29,6 +30,15 @@ import org.eclipse.jpt.jpa.core.context.VirtualOverride; public interface JavaAttributeOverrideContainer extends AttributeOverrideContainer, JavaOverrideContainer { + /** + * Return the specified override's column. + * This is used by the <code>orm.xml</code> attribute override container + * when it is also using the Java container's override names. + * @see #getOverrideNames() + */ + ReadOnlyColumn getOverrideColumn(String overrideName); + + // covariant overrides ListIterator<JavaReadOnlyAttributeOverride> overrides(); JavaReadOnlyAttributeOverride getOverrideNamed(String name); ListIterator<JavaAttributeOverride> specifiedOverrides(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseColumn.java index 3e92a1890e..bca2d1b354 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -9,8 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.resource.java.BaseColumnAnnotation; @@ -27,25 +25,7 @@ import org.eclipse.jpt.jpa.core.resource.java.BaseColumnAnnotation; * @since 2.0 */ public interface JavaBaseColumn - extends BaseColumn, JavaNamedColumn + extends BaseColumn, JavaNamedColumn, JavaReadOnlyBaseColumn { BaseColumnAnnotation getColumnAnnotation(); - - /** - * Return the (best guess) text location of the column's table. - */ - TextRange getTableTextRange(CompilationUnit astRoot); - - - // ********** owner ********** - - /** - * interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides) - */ - interface Owner - extends JavaNamedColumn.Owner, BaseColumn.Owner - { - // combine two interfaces - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseJoinColumn.java index 9a54c73cce..043eeae1f1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaBaseJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -9,8 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; /** @@ -26,24 +24,7 @@ import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; * @since 2.3 */ public interface JavaBaseJoinColumn - extends BaseJoinColumn, JavaNamedColumn + extends BaseJoinColumn, JavaNamedColumn, JavaReadOnlyBaseJoinColumn { - /** - * Return the (best guess) text location of the join column's - * referenced column name. - */ - TextRange getReferencedColumnNameTextRange(CompilationUnit astRoot); - - - // ********** owner ********** - - /** - * interface allowing join columns to be used in multiple places - * (e.g. 1:1 mappings and join tables) - */ - interface Owner - extends BaseJoinColumn.Owner, JavaNamedColumn.Owner - { - // combine interfaces - } + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaColumn.java index f2117d070e..786fc76b2d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -29,10 +29,15 @@ public interface JavaColumn { CompleteColumnAnnotation getColumnAnnotation(); + // ********** owner ********** + /** + * interface allowing columns to be used in multiple places + * (e.g. basic mappings and attribute overrides) + */ interface Owner - extends JavaBaseColumn.Owner + extends JavaReadOnlyBaseColumn.Owner { CompleteColumnAnnotation getColumnAnnotation(); void removeColumnAnnotation(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaDiscriminatorColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaDiscriminatorColumn.java index 18ca8a5820..170f2eb345 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaDiscriminatorColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaDiscriminatorColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -36,9 +36,8 @@ public interface JavaDiscriminatorColumn * interface allowing columns to be used in multiple places */ interface Owner - extends JavaNamedColumn.Owner, DiscriminatorColumn.Owner + extends DiscriminatorColumn.Owner, JavaReadOnlyNamedColumn.Owner { - // combine two interfaces + // combine interfaces } - -}
\ No newline at end of file +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaJoinColumn.java index b8510b1d5a..f6b7c4e69c 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -25,16 +25,7 @@ import org.eclipse.jpt.jpa.core.resource.java.JoinColumnAnnotation; * @since 2.0 */ public interface JavaJoinColumn - extends JoinColumn, JavaBaseJoinColumn, JavaBaseColumn + extends JoinColumn, JavaReadOnlyJoinColumn, JavaBaseJoinColumn, JavaBaseColumn { JoinColumnAnnotation getColumnAnnotation(); - - - // ********** owner ********** - - interface Owner - extends JoinColumn.Owner, JavaBaseJoinColumn.Owner, JavaBaseColumn.Owner - { - // combine interfaces - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinColumnRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinColumnRelationship.java index 20cd4e734d..8dfcbb3dd6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinColumnRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinColumnRelationship.java @@ -22,5 +22,5 @@ public interface JavaMappingJoinColumnRelationship extends JavaJoinColumnRelationship, JavaMappingRelationship { - // combine various interfaces + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinTableRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinTableRelationship.java index 027552a3c5..7ee0f2b173 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinTableRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMappingJoinTableRelationship.java @@ -22,5 +22,5 @@ public interface JavaMappingJoinTableRelationship extends JavaJoinTableRelationship, JavaMappingRelationship { - // combine various interfaces + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMultiRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMultiRelationshipMapping.java index 595c23129a..d0ceb37255 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMultiRelationshipMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaMultiRelationshipMapping.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.context.java; import org.eclipse.jpt.jpa.core.context.MultiRelationshipMapping; /** - * Java multi-valued (1:m, m:m) relationship mapping. + * Java multi-valued relationship (1:m, m:m) mapping. * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaNamedColumn.java index 7607bad56f..6fbca4a8f3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaNamedColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -9,8 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.resource.java.NamedColumnAnnotation; @@ -33,29 +31,7 @@ import org.eclipse.jpt.jpa.core.resource.java.NamedColumnAnnotation; * @since 2.0 */ public interface JavaNamedColumn - extends NamedColumn, JavaJpaContextNode + extends NamedColumn, JavaReadOnlyNamedColumn { NamedColumnAnnotation getColumnAnnotation(); - - /** - * Return the (best guess) text location of the column's name. - */ - TextRange getNameTextRange(CompilationUnit astRoot); - - - // ********** owner ********** - - /** - * interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides) - */ - interface Owner - extends NamedColumn.Owner - { - /** - * Return the column owner's text range. This can be returned by the - * column when its annotation is not present. - */ - TextRange getValidationTextRange(CompilationUnit astRoot); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverride.java index a7d3f41694..d7ccd3b444 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,13 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Override_; import org.eclipse.jpt.jpa.core.resource.java.OverrideAnnotation; /** - * Java override + * <em>Specified</em> Java override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -29,12 +27,8 @@ import org.eclipse.jpt.jpa.core.resource.java.OverrideAnnotation; public interface JavaOverride extends Override_, JavaReadOnlyOverride { - JavaVirtualOverride convertToVirtual(); - OverrideAnnotation getOverrideAnnotation(); - /** - * Return the (best guess) text location of the override's name. - */ - TextRange getNameTextRange(CompilationUnit astRoot); + // covariant overrides + JavaVirtualOverride convertToVirtual(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideContainer.java index 63c480bb7a..62933f3ea9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -32,6 +32,17 @@ import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentMember; public interface JavaOverrideContainer extends OverrideContainer, JavaJpaContextNode { + /** + * Return the names of all the container's overrides, specified and virtual. + * This is used by the <code>orm.xml</code> override container so any + * invalid Java overrides (i.e. overrides for a non-existent or + * non-overridable attributes) are included among the <code>orm.xml</code> + * virtual overrides. + * @see org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmEntity.OverrideContainerOwner#getJavaOverrideNames() + */ + Iterable<String> getOverrideNames(); + + // covariant overrides ListIterator<? extends JavaReadOnlyOverride> overrides(); JavaReadOnlyOverride getOverrideNamed(String name); ListIterator<? extends JavaOverride> specifiedOverrides(); @@ -41,16 +52,6 @@ public interface JavaOverrideContainer JavaVirtualOverride convertOverrideToVirtual(Override_ specifiedOverride); JavaOverride convertOverrideToSpecified(VirtualOverride virtualOverride); - /** - * JPA 2.0 - * <p> - * Return a prefix (<em>without</em> the following <code>'.'</code>) - * that may be prepended to the override name. - * Return <code>null</code> if no prefix is supported. - */ - String getPossiblePrefix(); - String getWritePrefix(); - // ********** owner ********** @@ -60,37 +61,5 @@ public interface JavaOverrideContainer JavaResourcePersistentMember getResourcePersistentMember(); TextRange getValidationTextRange(CompilationUnit astRoot); - - /** - * JPA 2.0 - * <p> - * Return the prefix (<em>without</em> the following <code>'.'</code>) - * to be prepended to the override name. - */ - String getWritePrefix(); - - /** - * JPA 2.0 - * <p> - * Return a prefix (<em>without</em> the following <code>'.'</code>) - * that may be prepended to the override name. - * Return <code>null</code> if no prefix is supported. - * <p> - * JPA 2.0 supports the prefixes <code>"value"</code> and <code>"key"</code>. - */ - String getPossiblePrefix(); - - /** - * JPA 2.0 - * <p> - * This is necessary for JPA 2.0 because an override annotation for an - * element collection can have a name with a prefix that indicates - * whether the override applies to element collection's embedded key or - * value. Return whether the specified override name, which may have a - * prefix, is relevant to the override container. - * <p> - * JPA 2.0 supports the prefixes <code>"value"</code> and <code>"key"</code>. - */ - boolean isRelevant(String overrideName); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideRelationship.java index bd7bfedc49..486182aeca 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaOverrideRelationship.java @@ -10,6 +10,7 @@ package org.eclipse.jpt.jpa.core.context.java; import org.eclipse.jpt.jpa.core.context.OverrideRelationship; +import org.eclipse.jpt.jpa.core.resource.java.AssociationOverrideAnnotation; /** * Java association override relationship @@ -27,5 +28,5 @@ public interface JavaOverrideRelationship extends OverrideRelationship, JavaJoinColumnRelationship { - JavaAssociationOverride getAssociationOverride(); + AssociationOverrideAnnotation getOverrideAnnotation(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAssociationOverride.java index 69afbc01ea..72aca913ba 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAssociationOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -23,5 +23,5 @@ import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; public interface JavaReadOnlyAssociationOverride extends ReadOnlyAssociationOverride, JavaReadOnlyOverride { - JavaAssociationOverrideContainer getContainer(); + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAttributeOverride.java index 1f552eeaee..151b828022 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -23,5 +23,5 @@ import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; public interface JavaReadOnlyAttributeOverride extends ReadOnlyAttributeOverride, JavaReadOnlyOverride { - JavaAttributeOverrideContainer getContainer(); + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyBaseColumn.java new file mode 100644 index 0000000000..f2f463dc80 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyBaseColumn.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.java; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; + +/** + * Java read-only column or join column + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaReadOnlyBaseColumn + extends ReadOnlyBaseColumn, JavaReadOnlyNamedColumn +{ + /** + * Return the (best guess) text location of the column's table. + */ + TextRange getTableTextRange(CompilationUnit astRoot); + + + // ********** owner ********** + + /** + * interface allowing columns to be used in multiple places + * (e.g. basic mappings and attribute overrides) + */ + interface Owner + extends ReadOnlyBaseColumn.Owner, JavaReadOnlyNamedColumn.Owner + { + // combine interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyBaseJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyBaseJoinColumn.java new file mode 100644 index 0000000000..e391b7f967 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyBaseJoinColumn.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.java; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; + +/** + * Java read-only join column or primary key join column + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaReadOnlyBaseJoinColumn + extends ReadOnlyBaseJoinColumn, JavaReadOnlyNamedColumn +{ + /** + * Return the (best guess) text location of the join column's + * referenced column name. + */ + TextRange getReferencedColumnNameTextRange(CompilationUnit astRoot); + + + // ********** owner ********** + + /** + * interface allowing join columns to be used in multiple places + * (e.g. 1:1 mappings and join tables) + */ + interface Owner + extends ReadOnlyBaseJoinColumn.Owner, JavaReadOnlyNamedColumn.Owner + { + // combine interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyJoinColumn.java new file mode 100644 index 0000000000..8e7a5b4840 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyJoinColumn.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.java; + +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; + +/** + * Java read-only join column + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + * + * @version 2.3 + * @since 2.0 + */ +public interface JavaReadOnlyJoinColumn + extends ReadOnlyJoinColumn, JavaReadOnlyBaseJoinColumn, JavaReadOnlyBaseColumn +{ + // ********** owner ********** + + interface Owner + extends ReadOnlyJoinColumn.Owner, JavaReadOnlyBaseJoinColumn.Owner, JavaReadOnlyBaseColumn.Owner + { + // combine interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyNamedColumn.java new file mode 100644 index 0000000000..2f6b9d688c --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyNamedColumn.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.java; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; + +/** + * Java read-only + * <ul> + * <li>column + * <li>join column + * <li>primary key join column + * <li>discriminator column + * <li>order column + * </ul> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaReadOnlyNamedColumn + extends ReadOnlyNamedColumn, JavaJpaContextNode +{ + /** + * Return the (best guess) text location of the column's name. + */ + TextRange getNameTextRange(CompilationUnit astRoot); + + + // ********** owner ********** + + /** + * interface allowing columns to be used in multiple places + * (e.g. basic mappings and attribute overrides) + */ + interface Owner + extends NamedColumn.Owner + { + /** + * Return the column owner's text range. This can be returned by the + * column when its annotation is not present. + */ + TextRange getValidationTextRange(CompilationUnit astRoot); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyOverride.java index 530c455545..651e56ff29 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; /** @@ -23,5 +25,8 @@ import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; public interface JavaReadOnlyOverride extends ReadOnlyOverride, JavaJpaContextNode { - JavaOverrideContainer getContainer(); + /** + * Return the (best guess) text location of the override's name. + */ + TextRange getNameTextRange(CompilationUnit astRoot); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyTable.java new file mode 100644 index 0000000000..b2b2d342d7 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaReadOnlyTable.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.java; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; + +/** + * Java read-only table + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaReadOnlyTable + extends ReadOnlyTable, JavaJpaContextNode +{ + TextRange getNameTextRange(CompilationUnit astRoot); + TextRange getSchemaTextRange(CompilationUnit astRoot); + TextRange getCatalogTextRange(CompilationUnit astRoot); +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaTable.java index e270eee2f1..15e8dfd953 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -10,8 +10,6 @@ package org.eclipse.jpt.jpa.core.context.java; import java.util.ListIterator; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.resource.java.BaseTableAnnotation; @@ -28,14 +26,10 @@ import org.eclipse.jpt.jpa.core.resource.java.BaseTableAnnotation; * @since 2.0 */ public interface JavaTable - extends Table, JavaJpaContextNode + extends Table, JavaReadOnlyTable { BaseTableAnnotation getTableAnnotation(); - TextRange getNameTextRange(CompilationUnit astRoot); - TextRange getSchemaTextRange(CompilationUnit astRoot); - TextRange getCatalogTextRange(CompilationUnit astRoot); - ListIterator<JavaUniqueConstraint> uniqueConstraints(); JavaUniqueConstraint getUniqueConstraint(int index); JavaUniqueConstraint addUniqueConstraint(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAssociationOverride.java index 37ca150230..fd15ebd5b8 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAssociationOverride.java @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.context.java; import org.eclipse.jpt.jpa.core.context.VirtualAssociationOverride; /** - * Java virtual association override + * Java <em>virtual</em> association override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAttributeOverride.java index 8687426537..3791994e37 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.context.java; import org.eclipse.jpt.jpa.core.context.VirtualAttributeOverride; /** - * Java virtual attribute override + * Java <em>virtual</em> attribute override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualColumn.java index 6b5161bfa6..0841b9ccfe 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; -import org.eclipse.jpt.jpa.core.context.Column; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; import org.eclipse.jpt.jpa.core.context.VirtualColumn; /** @@ -22,25 +22,25 @@ import org.eclipse.jpt.jpa.core.context.VirtualColumn; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface JavaVirtualColumn - extends VirtualColumn, JavaJpaContextNode + extends VirtualColumn, JavaReadOnlyBaseColumn { /** * The overridden column can be either a Java join column or an * <code>orm.xml</code> join column; so we don't change the return type * here. */ - Column getOverriddenColumn(); + ReadOnlyColumn getOverriddenColumn(); // ********** owner ********** interface Owner - extends VirtualColumn.Owner + extends VirtualColumn.Owner, JavaReadOnlyBaseColumn.Owner { /** * The overridden column can be either a Java column or an * <code>orm.xml</code> column; so we don't change the return type here. */ - Column resolveOverriddenColumn(); + ReadOnlyColumn resolveOverriddenColumn(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinColumn.java index f3f4a2d24d..f223e2f187 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; -import org.eclipse.jpt.jpa.core.context.JoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.VirtualJoinColumn; /** @@ -22,12 +22,12 @@ import org.eclipse.jpt.jpa.core.context.VirtualJoinColumn; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface JavaVirtualJoinColumn - extends VirtualJoinColumn, JavaJpaContextNode + extends VirtualJoinColumn, JavaReadOnlyJoinColumn { /** * The overridden join column can be either a Java join column or an * <code>orm.xml</code> join column; so we don't change the return type * here. */ - JoinColumn getOverriddenColumn(); + ReadOnlyJoinColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinTable.java index c6da69c644..e2da3a12db 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualJoinTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,6 +10,7 @@ package org.eclipse.jpt.jpa.core.context.java; import java.util.ListIterator; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.VirtualJoinTable; /** @@ -22,7 +23,7 @@ import org.eclipse.jpt.jpa.core.context.VirtualJoinTable; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface JavaVirtualJoinTable - extends VirtualJoinTable, JavaJpaContextNode + extends VirtualJoinTable, JavaReadOnlyTable { JavaVirtualJoinTableRelationshipStrategy getParent(); @@ -38,4 +39,11 @@ public interface JavaVirtualJoinTable ListIterator<JavaVirtualJoinColumn> specifiedInverseJoinColumns(); JavaVirtualJoinColumn getSpecifiedInverseJoinColumn(int index); JavaVirtualJoinColumn getDefaultInverseJoinColumn(); + + /** + * The overridden table can be either a Java table + * or an <code>orm.xml</code> table; so we don't change the + * return type here. + */ + public ReadOnlyJoinTable getOverriddenTable(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverride.java index 576234b13b..c8427e4766 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.context.java; import org.eclipse.jpt.jpa.core.context.VirtualOverride; /** - * Java virtual<ul> + * Java <em>virtual</em><ul> * <li>attribute override * <li>association override * </ul> diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverrideRelationship.java index 970fb1ba45..5a63e37edc 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualOverrideRelationship.java @@ -24,5 +24,5 @@ public interface JavaVirtualOverrideRelationship extends VirtualOverrideRelationship, JavaVirtualJoinColumnRelationship { - JavaVirtualAssociationOverride getAssociationOverride(); + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualUniqueConstraint.java index d2363e24e7..e3429579fb 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualUniqueConstraint.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/java/JavaVirtualUniqueConstraint.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.java; -import org.eclipse.jpt.jpa.core.context.UniqueConstraint; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.VirtualUniqueConstraint; /** @@ -29,5 +29,5 @@ public interface JavaVirtualUniqueConstraint * or an <code>orm.xml</code> unique constraint; so we don't change the * return type here. */ - UniqueConstraint getOverriddenUniqueConstraint(); + ReadOnlyUniqueConstraint getOverriddenUniqueConstraint(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverride.java index 697d5f397e..f3ee4a768b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverride.java @@ -13,7 +13,7 @@ import org.eclipse.jpt.jpa.core.context.AssociationOverride; import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverride; /** - * <code>orm.xml</code> association override + * <em>Specified</em> <code>orm.xml</code> association override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverrideContainer.java index bf2956fa23..563e15bae3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAssociationOverrideContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -31,6 +31,7 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverride; public interface OrmAssociationOverrideContainer extends AssociationOverrideContainer, OrmOverrideContainer { + // covariant overrides ListIterator<OrmReadOnlyAssociationOverride> overrides(); OrmReadOnlyAssociationOverride getOverrideNamed(String name); ListIterator<OrmAssociationOverride> specifiedOverrides(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverride.java index 1a3ea76ffe..b42c1826ce 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -13,7 +13,7 @@ import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.resource.orm.XmlAttributeOverride; /** - * <code>orm.xml</code> attribute override + * <em>Specified</em> <code>orm.xml</code> attribute override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverrideContainer.java index f74f7175ac..9419a6cc89 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmAttributeOverrideContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -31,6 +31,9 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlAttributeOverride; public interface OrmAttributeOverrideContainer extends AttributeOverrideContainer, OrmOverrideContainer { + void initializeFrom(OrmAttributeOverrideContainer oldContainer); + + // covariant overrides ListIterator<OrmReadOnlyAttributeOverride> overrides(); OrmReadOnlyAttributeOverride getOverrideNamed(String name); ListIterator<OrmAttributeOverride> specifiedOverrides(); @@ -40,8 +43,6 @@ public interface OrmAttributeOverrideContainer OrmVirtualAttributeOverride convertOverrideToVirtual(Override_ specifiedOverride); OrmAttributeOverride convertOverrideToSpecified(VirtualOverride virtualOverride); - void initializeFrom(OrmAttributeOverrideContainer oldContainer); - // ********** owner ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseColumn.java index a25338f4a5..f4079361d0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -9,7 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlColumn; @@ -26,25 +25,7 @@ import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlColumn; * @since 2.0 */ public interface OrmBaseColumn - extends BaseColumn, OrmNamedColumn + extends BaseColumn, OrmNamedColumn, OrmReadOnlyBaseColumn { AbstractXmlColumn getXmlColumn(); - - /** - * Return the (best guess) text location of the column's table. - */ - TextRange getTableTextRange(); - - - // ********** owner ********** - - /** - * interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides) - */ - interface Owner - extends OrmNamedColumn.Owner, BaseColumn.Owner - { - // combine two interfaces - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseJoinColumn.java index 32600b6ec1..aefd651dee 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmBaseJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -9,8 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; +import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn; /** * <code>orm.xml</code> join column or primary key join column @@ -25,24 +25,8 @@ import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; * @since 2.0 */ public interface OrmBaseJoinColumn - extends BaseJoinColumn, OrmNamedColumn + extends BaseJoinColumn, OrmNamedColumn, OrmReadOnlyBaseJoinColumn { - /** - * Return the (best guess) text location of the column's - * referenced column name. - */ - TextRange getReferencedColumnNameTextRange(); - - - // ********** owner ********** - - /** - * interface allowing join columns to be used in multiple places - * (e.g. 1:1 mappings and join tables) - */ - interface Owner - extends BaseJoinColumn.Owner, OrmNamedColumn.Owner - { - // combine two interfaces - } + // TODO we need a common interface for XML join columns and pk join columns + AbstractXmlNamedColumn getXmlColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmColumn.java index 0d5cde88fa..313fac9dd4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -37,12 +37,10 @@ public interface OrmColumn * (e.g. basic mappings and attribute overrides) */ interface Owner - extends OrmBaseColumn.Owner + extends OrmReadOnlyBaseColumn.Owner { XmlColumn getXmlColumn(); - XmlColumn buildXmlColumn(); - void removeXmlColumn(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmDiscriminatorColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmDiscriminatorColumn.java index 246a6581db..42f97da87b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmDiscriminatorColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmDiscriminatorColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -36,12 +36,10 @@ public interface OrmDiscriminatorColumn * interface allowing discriminator columns to be used in multiple places */ interface Owner - extends OrmNamedColumn.Owner, DiscriminatorColumn.Owner + extends DiscriminatorColumn.Owner, OrmReadOnlyNamedColumn.Owner { XmlDiscriminatorColumn getXmlColumn(); - XmlDiscriminatorColumn buildXmlColumn(); - void removeXmlColumn(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmJoinColumn.java index 2699ae3a4a..b2c7f54120 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -25,17 +25,7 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlJoinColumn; * @since 2.0 */ public interface OrmJoinColumn - extends JoinColumn, OrmBaseJoinColumn, OrmBaseColumn + extends JoinColumn, OrmReadOnlyJoinColumn, OrmBaseJoinColumn, OrmBaseColumn { XmlJoinColumn getXmlColumn(); - - - // ********** owner ********** - - interface Owner - extends JoinColumn.Owner, OrmBaseJoinColumn.Owner, OrmBaseColumn.Owner - { - // combine interfaces - } - } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmNamedColumn.java index ff7236a4bd..da6ddfe211 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmNamedColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -9,12 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.NamedColumn; -import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn; - /** * <code>orm.xml</code> * <ul> @@ -34,29 +31,7 @@ import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn; * @since 2.0 */ public interface OrmNamedColumn - extends NamedColumn, XmlContextNode + extends NamedColumn, OrmReadOnlyNamedColumn { AbstractXmlNamedColumn getXmlColumn(); - - /** - * Return the (best guess) text location of the column's name. - */ - TextRange getNameTextRange(); - - - // ********** owner ********** - - /** - * interface allowing columns to be used in multiple places - * (e.g. basic mappings and attribute overrides) - */ - interface Owner - extends NamedColumn.Owner - { - /** - * Return the column owner's text range. This can be returned by the - * column when its annotation is not present. - */ - TextRange getValidationTextRange(); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverride.java index 2bd280da20..bd14dd1ee4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,12 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Override_; import org.eclipse.jpt.jpa.core.resource.orm.XmlOverride; /** - * <code>orm.xml</code> override + * <em>Specified</em> <code>orm.xml</code> override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -25,12 +24,8 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlOverride; public interface OrmOverride extends Override_, OrmReadOnlyOverride { - OrmVirtualOverride convertToVirtual(); - XmlOverride getXmlOverride(); - /** - * Return the (best guess) text location of the override's name. - */ - TextRange getNameTextRange(); + // covariant overrides + OrmVirtualOverride convertToVirtual(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideContainer.java index 6070d36550..7c59e2d496 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideContainer.java @@ -33,8 +33,12 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlOverride; public interface OrmOverrideContainer extends OverrideContainer, XmlContextNode { - // we need this covariant override because there is no override *container* - // element in the orm.xml (there is just a list of overrides) + // covariant overrides + /** + * We need this covariant override because there is no override + * <em>container</em> element in the <code>orm.xml</code> file; + * there is simply a list of overrides. + */ XmlContextNode getParent(); ListIterator<? extends OrmReadOnlyOverride> overrides(); OrmReadOnlyOverride getOverrideNamed(String name); @@ -50,9 +54,27 @@ public interface OrmOverrideContainer extends OverrideContainer.Owner { <T extends XmlOverride> EList<T> getXmlOverrides(); - - OrmTypeMapping getTypeMapping(); + /** + * Return the names of all the corresponding Java overrides, specified and + * virtual. Return <code>null</code> if the Java overrides are not relevant + * (i.e. the parent is not an entity, the parent entity has no + * corresponding Java entity, or the parent entity is <em>metadata + * complete</em>). Return an empty list if the Java overrides are + * <em>possible</em> but there are simply none. + * <p> + * <strong>NB:</strong> Unlike overrides associated with attribute + * mappings, the overrides associated with an <code>orm.xml</code> + * entity are <em>additive</em> to any specified Java overrides. An + * <code>orm.xml</code> override only overrides the Java override with + * the same name. [JPA spec 10.1.3.13-14; JPA 2.0 spec 12.2.3.14-15] + * + * @see org.eclipse.jpt.jpa.core.context.java.JavaOverrideContainer#getOverrideNames() + */ + Iterable<String> getJavaOverrideNames(); + TextRange getValidationTextRange(); + + OrmTypeMapping getTypeMapping(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideRelationship.java index dd2f0f4baf..8e0a60dc59 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmOverrideRelationship.java @@ -28,7 +28,5 @@ public interface OrmOverrideRelationship extends OverrideRelationship, OrmJoinColumnRelationship { - OrmAssociationOverride getAssociationOverride(); - XmlAssociationOverride getXmlContainer(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAssociationOverride.java index e751769020..0d680ecc39 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAssociationOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -23,5 +23,5 @@ import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; public interface OrmReadOnlyAssociationOverride extends ReadOnlyAssociationOverride, OrmReadOnlyOverride { - OrmAssociationOverrideContainer getContainer(); + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAttributeOverride.java index 344971592a..2e446c2455 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -23,5 +23,5 @@ import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; public interface OrmReadOnlyAttributeOverride extends ReadOnlyAttributeOverride, OrmReadOnlyOverride { - OrmAttributeOverrideContainer getContainer(); + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyBaseColumn.java new file mode 100644 index 0000000000..652ff934c9 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyBaseColumn.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.orm; + +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; + +/** + * <code>orm.xml</code> read-only column or join column + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmReadOnlyBaseColumn + extends ReadOnlyBaseColumn, OrmReadOnlyNamedColumn +{ + /** + * Return the (best guess) text location of the column's table. + */ + TextRange getTableTextRange(); + + + // ********** owner ********** + + /** + * interface allowing columns to be used in multiple places + * (e.g. basic mappings and attribute overrides) + */ + interface Owner + extends ReadOnlyBaseColumn.Owner, OrmReadOnlyNamedColumn.Owner + { + // combine two interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyBaseJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyBaseJoinColumn.java new file mode 100644 index 0000000000..e31619f90c --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyBaseJoinColumn.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.orm; + +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; + +/** + * <code>orm.xml</code> read-only join column or primary key join column + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmReadOnlyBaseJoinColumn + extends ReadOnlyBaseJoinColumn, OrmReadOnlyNamedColumn +{ + /** + * Return the (best guess) text location of the column's + * referenced column name. + */ + TextRange getReferencedColumnNameTextRange(); + + + // ********** owner ********** + + /** + * interface allowing join columns to be used in multiple places + * (e.g. 1:1 mappings and join tables) + */ + interface Owner + extends ReadOnlyBaseJoinColumn.Owner, OrmReadOnlyNamedColumn.Owner + { + // combine two interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyJoinColumn.java new file mode 100644 index 0000000000..25ab84a48e --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyJoinColumn.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.orm; + +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; + +/** + * <code>orm.xml</code> read-only join column + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + * + * @version 2.3 + * @since 2.0 + */ +public interface OrmReadOnlyJoinColumn + extends ReadOnlyJoinColumn, OrmReadOnlyBaseJoinColumn, OrmReadOnlyBaseColumn +{ + // ********** owner ********** + + interface Owner + extends ReadOnlyJoinColumn.Owner, OrmReadOnlyBaseJoinColumn.Owner, OrmReadOnlyBaseColumn.Owner + { + // combine interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyNamedColumn.java new file mode 100644 index 0000000000..01dc613f00 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyNamedColumn.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.orm; + +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.XmlContextNode; + +/** + * <code>orm.xml</code> read-only + * <ul> + * <li>column + * <li>join column + * <li>primary key join column + * <li>discriminator column + * <li>order column + * </ul> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmReadOnlyNamedColumn + extends ReadOnlyNamedColumn, XmlContextNode +{ + /** + * Return the (best guess) text location of the column's name. + */ + TextRange getNameTextRange(); + + + // ********** owner ********** + + /** + * interface allowing columns to be used in multiple places + * (e.g. basic mappings and attribute overrides) + */ + interface Owner + extends NamedColumn.Owner + { + /** + * Return the column owner's text range. This can be returned by the + * column when its annotation is not present. + */ + TextRange getValidationTextRange(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyOverride.java index 410c599958..e38c0ac1a3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.XmlContextNode; @@ -24,5 +25,8 @@ import org.eclipse.jpt.jpa.core.context.XmlContextNode; public interface OrmReadOnlyOverride extends ReadOnlyOverride, XmlContextNode { - OrmOverrideContainer getContainer(); + /** + * Return the (best guess) text location of the override's name. + */ + TextRange getNameTextRange(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyTable.java new file mode 100644 index 0000000000..d49312a8ac --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmReadOnlyTable.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.context.orm; + +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.context.XmlContextNode; + +/** + * <code>orm.xml</code> read-only table + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmReadOnlyTable + extends ReadOnlyTable, XmlContextNode +{ + TextRange getNameTextRange(); + TextRange getSchemaTextRange(); + TextRange getCatalogTextRange(); +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTable.java index 0969a76ed5..c9fe562037 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -10,9 +10,7 @@ package org.eclipse.jpt.jpa.core.context.orm; import java.util.ListIterator; -import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Table; -import org.eclipse.jpt.jpa.core.context.XmlContextNode; /** * <code>orm.xml</code> table @@ -27,12 +25,8 @@ import org.eclipse.jpt.jpa.core.context.XmlContextNode; * @since 2.0 */ public interface OrmTable - extends Table, XmlContextNode + extends Table, OrmReadOnlyTable { - TextRange getNameTextRange(); - TextRange getSchemaTextRange(); - TextRange getCatalogTextRange(); - ListIterator<OrmUniqueConstraint> uniqueConstraints(); OrmUniqueConstraint getUniqueConstraint(int index); OrmUniqueConstraint addUniqueConstraint(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAssociationOverride.java index a16dbcad5e..4023c5ab17 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAssociationOverride.java @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.context.orm; import org.eclipse.jpt.jpa.core.context.VirtualAssociationOverride; /** - * <code>orm.xml</code> virtual association override + * <code>orm.xml</code> <em>virtual</em> association override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAttributeOverride.java index 6c957c2b80..407053f9cd 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.context.orm; import org.eclipse.jpt.jpa.core.context.VirtualAttributeOverride; /** - * Java virtual attribute override + * Java <em>virtual</em> attribute override * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualColumn.java index ce33b3a81d..1deafbb7a2 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,9 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.jpa.core.context.Column; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; import org.eclipse.jpt.jpa.core.context.VirtualColumn; -import org.eclipse.jpt.jpa.core.context.XmlContextNode; /** * <code>orm.xml</code> virtual column @@ -23,25 +22,25 @@ import org.eclipse.jpt.jpa.core.context.XmlContextNode; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface OrmVirtualColumn - extends VirtualColumn, XmlContextNode + extends VirtualColumn, OrmReadOnlyBaseColumn { /** * The overridden column can be either a Java join column or an * <code>orm.xml</code> join column; so we don't change the return type * here. */ - Column getOverriddenColumn(); + ReadOnlyColumn getOverriddenColumn(); // ********** owner ********** interface Owner - extends VirtualColumn.Owner + extends VirtualColumn.Owner, OrmReadOnlyBaseColumn.Owner { /** * The overridden column can be either a Java column or an * <code>orm.xml</code> column; so we don't change the return type here. */ - Column resolveOverriddenColumn(); + ReadOnlyColumn resolveOverriddenColumn(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinColumn.java index 9a17a4a6d7..3c6f174550 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,9 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.jpa.core.context.JoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.VirtualJoinColumn; -import org.eclipse.jpt.jpa.core.context.XmlContextNode; /** * <code>orm.xml</code> virtual join column @@ -23,12 +22,12 @@ import org.eclipse.jpt.jpa.core.context.XmlContextNode; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface OrmVirtualJoinColumn - extends VirtualJoinColumn, XmlContextNode + extends VirtualJoinColumn, OrmReadOnlyJoinColumn { /** * The overridden join column can be either a Java join column or an * <code>orm.xml</code> join column; so we don't change the return type * here. */ - JoinColumn getOverriddenColumn(); + ReadOnlyJoinColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinTable.java index 55892a2148..fc41b30297 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualJoinTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,8 +10,8 @@ package org.eclipse.jpt.jpa.core.context.orm; import java.util.ListIterator; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.VirtualJoinTable; -import org.eclipse.jpt.jpa.core.context.XmlContextNode; /** * <code>orm.xml</code> virtual join table @@ -23,7 +23,7 @@ import org.eclipse.jpt.jpa.core.context.XmlContextNode; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface OrmVirtualJoinTable - extends VirtualJoinTable, XmlContextNode + extends VirtualJoinTable, OrmReadOnlyTable { OrmVirtualJoinTableRelationshipStrategy getParent(); @@ -39,4 +39,11 @@ public interface OrmVirtualJoinTable ListIterator<OrmVirtualJoinColumn> specifiedInverseJoinColumns(); OrmVirtualJoinColumn getSpecifiedInverseJoinColumn(int index); OrmVirtualJoinColumn getDefaultInverseJoinColumn(); + + /** + * The overridden table can be either a Java table + * or an <code>orm.xml</code> table; so we don't change the + * return type here. + */ + public ReadOnlyJoinTable getOverriddenTable(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverride.java index 031174b0c3..92abbba1d7 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.context.orm; import org.eclipse.jpt.jpa.core.context.VirtualOverride; /** - * <code>orm.xml</code> virtual<ul> + * <code>orm.xml</code> <em>virtual</em><ul> * <li>attribute override * <li>association override * </ul> diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverrideRelationship.java index 4da970ad2b..aae36353b0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualOverrideRelationship.java @@ -24,5 +24,5 @@ public interface OrmVirtualOverrideRelationship extends VirtualOverrideRelationship, OrmVirtualJoinColumnRelationship { - OrmVirtualAssociationOverride getAssociationOverride(); + // combine interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualPrimaryKeyJoinColumn.java index 8823e4fc10..77388244a9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualPrimaryKeyJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualPrimaryKeyJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -10,11 +10,11 @@ package org.eclipse.jpt.jpa.core.context.orm; import org.eclipse.jpt.jpa.core.context.VirtualPrimaryKeyJoinColumn; -import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; /** - * <code>orm.xml</code> virtual primary key join column + * <code>orm.xml</code> virtual primary key join column. This represents + * a default column taken from the Java entity. * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -23,7 +23,12 @@ import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface OrmVirtualPrimaryKeyJoinColumn - extends VirtualPrimaryKeyJoinColumn, XmlContextNode + extends VirtualPrimaryKeyJoinColumn, OrmReadOnlyBaseJoinColumn { + /** + * This is not the best method name; we are simply overloading the meaning + * of the inherited method. A better method name would be something like + * <code>getJavaColumn()</code> + */ JavaPrimaryKeyJoinColumn getOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualSecondaryTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualSecondaryTable.java index 46cc96082c..5f8a9971d7 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualSecondaryTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualSecondaryTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -11,7 +11,6 @@ package org.eclipse.jpt.jpa.core.context.orm; import java.util.ListIterator; import org.eclipse.jpt.jpa.core.context.VirtualSecondaryTable; -import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; /** @@ -24,7 +23,7 @@ import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; * will almost certainly be broken (repeatedly) as the API evolves. */ public interface OrmVirtualSecondaryTable - extends VirtualSecondaryTable, XmlContextNode + extends VirtualSecondaryTable, OrmReadOnlyTable { ListIterator<OrmVirtualPrimaryKeyJoinColumn> primaryKeyJoinColumns(); ListIterator<OrmVirtualPrimaryKeyJoinColumn> specifiedPrimaryKeyJoinColumns(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualUniqueConstraint.java index 7e9e7a911a..2e2c1ad703 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualUniqueConstraint.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmVirtualUniqueConstraint.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.jpa.core.context.UniqueConstraint; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.VirtualUniqueConstraint; /** @@ -29,5 +29,5 @@ public interface OrmVirtualUniqueConstraint * or an <code>orm.xml</code> unique constraint; so we don't change the * return type here. */ - UniqueConstraint getOverriddenUniqueConstraint(); + ReadOnlyUniqueConstraint getOverriddenUniqueConstraint(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmXmlContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmXmlContextNodeFactory.java index b8f98cb0c4..616c3c94a8 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmXmlContextNodeFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmXmlContextNodeFactory.java @@ -3,16 +3,16 @@ * 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: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.jpa.core.context.orm; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.UniqueConstraint; import org.eclipse.jpt.jpa.core.context.XmlContextNode; @@ -32,7 +32,6 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlGeneratedValue; import org.eclipse.jpt.jpa.core.resource.orm.XmlGeneratorContainer; import org.eclipse.jpt.jpa.core.resource.orm.XmlId; import org.eclipse.jpt.jpa.core.resource.orm.XmlJoinColumn; -import org.eclipse.jpt.jpa.core.resource.orm.XmlJoinTable; import org.eclipse.jpt.jpa.core.resource.orm.XmlManyToMany; import org.eclipse.jpt.jpa.core.resource.orm.XmlManyToOne; import org.eclipse.jpt.jpa.core.resource.orm.XmlMappedSuperclass; @@ -60,124 +59,204 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlVersion; * stability. It is available at this early stage to solicit feedback from * pioneering adopters on the understanding that any code that uses this API * will almost certainly be broken (repeatedly) as the API evolves. - * + * * @version 2.3 * @since 2.3 */ +// TODO bjv we need a factory interface for a 1.0 orm.xml in a 2.0 project... +// since it must return slightly different objects (e.g. 2.0 attribute mappings) +// OrmXml1_0ContextNodeFactory2_0 ? public interface OrmXmlContextNodeFactory { - // ********** ORM Context Model ********** - EntityMappings buildEntityMappings(OrmXml parent, XmlEntityMappings entityMappings); - + OrmPersistenceUnitMetadata buildOrmPersistenceUnitMetadata(EntityMappings parent); - + OrmPersistenceUnitDefaults buildOrmPersistenceUnitDefaults(OrmPersistenceUnitMetadata parent); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.PersistentType2_0#getDeclaringTypeName() + */ OrmPersistentType buildOrmPersistentType(EntityMappings parent, XmlTypeMapping resourceMapping); - + OrmEntity buildOrmEntity(OrmPersistentType parent, XmlEntity resourceMapping); - + OrmMappedSuperclass buildOrmMappedSuperclass(OrmPersistentType parent, XmlMappedSuperclass resourceMapping); - + OrmEmbeddable buildOrmEmbeddable(OrmPersistentType parent, XmlEmbeddable resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyPersistentAttribute2_0 + */ OrmPersistentAttribute buildOrmPersistentAttribute(OrmPersistentType parent, XmlAttributeMapping xmlMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyPersistentAttribute2_0 + */ OrmReadOnlyPersistentAttribute buildVirtualOrmPersistentAttribute(OrmPersistentType parent, JavaResourcePersistentAttribute javaResourcePersistentAttribute); - + OrmTable buildOrmTable(OrmEntity parent, Table.Owner owner); - + OrmSecondaryTable buildOrmSecondaryTable(OrmEntity parent, Table.Owner owner, XmlSecondaryTable xmlSecondaryTable); - - OrmVirtualSecondaryTable buildOrmVirtualSecondaryTable(OrmEntity parent, JavaSecondaryTable javaSecondaryTable); - - OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(XmlContextNode parent, OrmBaseJoinColumn.Owner owner, XmlPrimaryKeyJoinColumn resourcePrimaryKeyJoinColumn); - - OrmVirtualPrimaryKeyJoinColumn buildOrmVirtualPrimaryKeyJoinColumn(XmlContextNode parent, ReadOnlyBaseJoinColumn.Owner owner, JavaPrimaryKeyJoinColumn javaPrimaryKeyJoinColumn); - + + OrmVirtualSecondaryTable buildOrmVirtualSecondaryTable(OrmEntity parent, ReadOnlyTable.Owner owner, JavaSecondaryTable javaSecondaryTable); + + OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(XmlContextNode parent, OrmReadOnlyBaseJoinColumn.Owner owner, XmlPrimaryKeyJoinColumn resourcePrimaryKeyJoinColumn); + + OrmVirtualPrimaryKeyJoinColumn buildOrmVirtualPrimaryKeyJoinColumn(XmlContextNode parent, OrmReadOnlyBaseJoinColumn.Owner owner, JavaPrimaryKeyJoinColumn javaPrimaryKeyJoinColumn); + OrmJoinTable buildOrmJoinTable(OrmJoinTableRelationshipStrategy parent, Table.Owner owner); - - OrmVirtualJoinTable buildOrmVirtualJoinTable(OrmVirtualJoinTableRelationshipStrategy parent, JoinTable overriddenTable); - - OrmJoinColumn buildOrmJoinColumn(XmlContextNode parent, OrmJoinColumn.Owner owner, XmlJoinColumn resourceJoinColumn); - - OrmVirtualJoinColumn buildOrmVirtualJoinColumn(XmlContextNode parent, ReadOnlyJoinColumn.Owner owner, JoinColumn joinColumn); - + + OrmVirtualJoinTable buildOrmVirtualJoinTable(OrmVirtualJoinTableRelationshipStrategy parent, ReadOnlyTable.Owner owner, ReadOnlyJoinTable overriddenTable); + + OrmJoinColumn buildOrmJoinColumn(XmlContextNode parent, OrmReadOnlyJoinColumn.Owner owner, XmlJoinColumn resourceJoinColumn); + + OrmVirtualJoinColumn buildOrmVirtualJoinColumn(XmlContextNode parent, OrmReadOnlyJoinColumn.Owner owner, ReadOnlyJoinColumn overriddenColumn); + OrmAttributeOverrideContainer buildOrmAttributeOverrideContainer(XmlContextNode parent, OrmAttributeOverrideContainer.Owner owner); OrmAssociationOverrideContainer buildOrmAssociationOverrideContainer(XmlContextNode parent, OrmAssociationOverrideContainer.Owner owner); OrmAttributeOverride buildOrmAttributeOverride(OrmAttributeOverrideContainer parent, XmlAttributeOverride xmlOverride); - + OrmVirtualAttributeOverride buildOrmVirtualAttributeOverride(OrmAttributeOverrideContainer parent, String name); - + OrmAssociationOverride buildOrmAssociationOverride(OrmAssociationOverrideContainer parent, XmlAssociationOverride xmlOverride); - + OrmVirtualAssociationOverride buildOrmVirtualAssociationOverride(OrmAssociationOverrideContainer parent, String name); - + OrmOverrideRelationship buildOrmOverrideRelationship(OrmAssociationOverride parent); OrmVirtualOverrideRelationship buildOrmVirtualOverrideRelationship(OrmVirtualAssociationOverride parent); OrmDiscriminatorColumn buildOrmDiscriminatorColumn(OrmEntity parent, OrmDiscriminatorColumn.Owner owner); - + OrmColumn buildOrmColumn(XmlContextNode parent, OrmColumn.Owner owner); - + OrmVirtualColumn buildOrmVirtualColumn(XmlContextNode parent, OrmVirtualColumn.Owner owner); - + OrmGeneratedValue buildOrmGeneratedValue(XmlContextNode parent, XmlGeneratedValue resourceGeneratedValue); - + OrmGeneratorContainer buildOrmGeneratorContainer(XmlContextNode parent, XmlGeneratorContainer resourceGeneratorContainer); OrmSequenceGenerator buildOrmSequenceGenerator(XmlContextNode parent, XmlSequenceGenerator resourceSequenceGenerator); - + OrmTableGenerator buildOrmTableGenerator(XmlContextNode parent, XmlTableGenerator resourceTableGenerator); - + OrmQueryContainer buildOrmQueryContainer(XmlContextNode parent, XmlQueryContainer resourceQueryContainer); OrmNamedNativeQuery buildOrmNamedNativeQuery(XmlContextNode parent, XmlNamedNativeQuery resourceNamedQuery); - + OrmNamedQuery buildOrmNamedQuery(XmlContextNode parent, XmlNamedQuery resourceNamedQuery); - + OrmQueryHint buildOrmQueryHint(OrmQuery parent, XmlQueryHint resourceQueryhint); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmBasicMapping buildOrmBasicMapping(OrmPersistentAttribute parent, XmlBasic resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmManyToManyMapping buildOrmManyToManyMapping(OrmPersistentAttribute parent, XmlManyToMany resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmOneToManyMapping buildOrmOneToManyMapping(OrmPersistentAttribute parent, XmlOneToMany resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmManyToOneMapping buildOrmManyToOneMapping(OrmPersistentAttribute parent, XmlManyToOne resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmOneToOneMapping buildOrmOneToOneMapping(OrmPersistentAttribute parent, XmlOneToOne resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmEmbeddedIdMapping buildOrmEmbeddedIdMapping(OrmPersistentAttribute parent, XmlEmbeddedId resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmEmbeddedMapping buildOrmEmbeddedMapping(OrmPersistentAttribute parent, XmlEmbedded resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmIdMapping buildOrmIdMapping(OrmPersistentAttribute parent, XmlId resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmTransientMapping buildOrmTransientMapping(OrmPersistentAttribute parent, XmlTransient resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmVersionMapping buildOrmVersionMapping(OrmPersistentAttribute parent, XmlVersion resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmAttributeMapping buildOrmNullAttributeMapping(OrmPersistentAttribute parent, XmlNullAttributeMapping resourceMapping); - + + /** + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 + */ OrmAttributeMapping buildUnsupportedOrmAttributeMapping(OrmPersistentAttribute parent, XmlNullAttributeMapping resourceMapping); OrmUniqueConstraint buildOrmUniqueConstraint(XmlContextNode parent, UniqueConstraint.Owner owner, XmlUniqueConstraint resourceUniqueConstraint); - - OrmVirtualUniqueConstraint buildOrmVirtualUniqueConstraint(XmlContextNode parent, UniqueConstraint overriddenUniqueConstraint); - + + OrmVirtualUniqueConstraint buildOrmVirtualUniqueConstraint(XmlContextNode parent, ReadOnlyUniqueConstraint overriddenUniqueConstraint); + OrmConverter buildOrmEnumeratedConverter(OrmAttributeMapping parent); - + OrmConverter buildOrmTemporalConverter(OrmAttributeMapping parent); - + OrmConverter buildOrmLobConverter(OrmAttributeMapping parent); /** * JPA 1.0 only + * <p> + * NB: A factory for a version 1.0 <code>orm.xml</code> in a JPA 2.0 project + * must build objects that implement the appropriate behavior. + * @see org.eclipse.jpt.jpa.core.jpa2.context.AttributeMapping2_0 */ OrmOrderable buildOrmOrderable(OrmAttributeMapping parent); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaFactory.java index 31ea66c1c3..a94704b588 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/AbstractJpaFactory.java @@ -16,11 +16,12 @@ import org.eclipse.jpt.jpa.core.JpaDataSource; import org.eclipse.jpt.jpa.core.JpaFactory; import org.eclipse.jpt.jpa.core.JpaFile; import org.eclipse.jpt.jpa.core.JpaProject; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.JpaRootContextNode; import org.eclipse.jpt.jpa.core.context.PersistentType; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.UniqueConstraint; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; @@ -28,7 +29,6 @@ import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.java.JavaBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaBasicMapping; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; import org.eclipse.jpt.jpa.core.context.java.JavaDiscriminatorColumn; @@ -60,6 +60,8 @@ import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaQuery; import org.eclipse.jpt.jpa.core.context.java.JavaQueryContainer; import org.eclipse.jpt.jpa.core.context.java.JavaQueryHint; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; import org.eclipse.jpt.jpa.core.context.java.JavaSequenceGenerator; import org.eclipse.jpt.jpa.core.context.java.JavaTable; @@ -244,20 +246,20 @@ public abstract class AbstractJpaFactory return new GenericJavaDiscriminatorColumn(parent, owner); } - public JavaJoinColumn buildJavaJoinColumn(JavaJpaContextNode parent, JavaJoinColumn.Owner owner, JoinColumnAnnotation joinColumnAnnotation) { + public JavaJoinColumn buildJavaJoinColumn(JavaJpaContextNode parent, JavaReadOnlyJoinColumn.Owner owner, JoinColumnAnnotation joinColumnAnnotation) { return new GenericJavaJoinColumn(parent, owner, joinColumnAnnotation); } - public JavaVirtualJoinColumn buildJavaVirtualJoinColumn(JavaJpaContextNode parent, ReadOnlyJoinColumn.Owner owner, JoinColumn joinColumn) { - return new GenericJavaVirtualJoinColumn(parent, owner, joinColumn); + public JavaVirtualJoinColumn buildJavaVirtualJoinColumn(JavaJpaContextNode parent, JavaReadOnlyJoinColumn.Owner owner, ReadOnlyJoinColumn overriddenColumn) { + return new GenericJavaVirtualJoinColumn(parent, owner, overriddenColumn); } public JavaJoinTable buildJavaJoinTable(JavaJoinTableRelationshipStrategy parent, Table.Owner owner) { return new GenericJavaJoinTable(parent, owner); } - public JavaVirtualJoinTable buildJavaVirtualJoinTable(JavaVirtualJoinTableRelationshipStrategy parent, JoinTable overriddenTable) { - return new GenericJavaVirtualJoinTable(parent, overriddenTable); + public JavaVirtualJoinTable buildJavaVirtualJoinTable(JavaVirtualJoinTableRelationshipStrategy parent, ReadOnlyTable.Owner owner, ReadOnlyJoinTable overriddenTable) { + return new GenericJavaVirtualJoinTable(parent, owner, overriddenTable); } public JavaSecondaryTable buildJavaSecondaryTable(JavaEntity parent, Table.Owner owner, SecondaryTableAnnotation tableAnnotation) { @@ -324,7 +326,7 @@ public abstract class AbstractJpaFactory return new GenericJavaGeneratedValue(parent, generatedValueAnnotation); } - public JavaPrimaryKeyJoinColumn buildJavaPrimaryKeyJoinColumn(JavaJpaContextNode parent, JavaBaseJoinColumn.Owner owner, PrimaryKeyJoinColumnAnnotation pkJoinColumnAnnotation) { + public JavaPrimaryKeyJoinColumn buildJavaPrimaryKeyJoinColumn(JavaJpaContextNode parent, JavaReadOnlyBaseJoinColumn.Owner owner, PrimaryKeyJoinColumnAnnotation pkJoinColumnAnnotation) { return new GenericJavaPrimaryKeyJoinColumn(parent, owner, pkJoinColumnAnnotation); } @@ -380,8 +382,8 @@ public abstract class AbstractJpaFactory return new GenericJavaUniqueConstraint(parent, owner, constraintAnnotation); } - public JavaVirtualUniqueConstraint buildJavaVirtualUniqueConstraint(JavaJpaContextNode parent, UniqueConstraint uniqueConstraint) { - return new GenericJavaVirtualUniqueConstraint(parent, uniqueConstraint); + public JavaVirtualUniqueConstraint buildJavaVirtualUniqueConstraint(JavaJpaContextNode parent, ReadOnlyUniqueConstraint overriddenUniqueConstraint) { + return new GenericJavaVirtualUniqueConstraint(parent, overriddenUniqueConstraint); } public JavaEnumeratedConverter buildJavaEnumeratedConverter(JavaAttributeMapping parent, EnumeratedAnnotation annotation) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/JptValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/JptValidator.java index 0bc515e2a1..9b3ecb21a5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/JptValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/JptValidator.java @@ -1,23 +1,44 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context; import java.util.List; +import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; public interface JptValidator { /** - * Return a boolean used to determine whether to continue validating + * Return whether the client should continue validating. */ boolean validate(List<IMessage> messages, IReporter reporter); + + + final class Null + implements JptValidator + { + private static final JptValidator INSTANCE = new Null(); + public static JptValidator instance() { + return INSTANCE; + } + // ensure single instance + private Null() { + super(); + } + public boolean validate(List<IMessage> messages, IReporter reporter) { + return true; // continue validating + } + @Override + public String toString() { + return StringTools.buildSingletonToString(this); + } + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TableTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TableTextRangeResolver.java index a66f0ede07..adb744dcfd 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TableTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TableTextRangeResolver.java @@ -1,19 +1,18 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context; import org.eclipse.jpt.common.core.utility.TextRange; /** - * Interface to resolve text ranges on named columns + * Interface to resolve text ranges on tables. */ public interface TableTextRangeResolver { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TypeMappingTools.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TypeMappingTools.java index 78deca4bf8..c558a733d8 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TypeMappingTools.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/TypeMappingTools.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -10,6 +10,7 @@ package org.eclipse.jpt.jpa.core.internal.context; import java.util.Iterator; +import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.Transformer; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; @@ -19,33 +20,89 @@ import org.eclipse.jpt.jpa.core.MappingKeys; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.jpa2.context.DerivedIdentity2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.MapsIdDerivedIdentityStrategy2_0; import org.eclipse.jpt.jpa.core.jpa2.context.SingleRelationshipMapping2_0; /** * Gather some of the behavior common to the Java and XML models. :-( */ -public class TypeMappingTools -{ +public class TypeMappingTools { + // ********** single relationship mappings ********** - public static Iterable<String> getMappedByRelationshipAttributeNames(TypeMapping typeMapping) { - return new TransformationIterable<SingleRelationshipMapping2_0, String>(getMapsIdRelationshipMappings(typeMapping)) { + /** + * Return whether the specified attribute is a derived ID for the specified + * type mapping. + */ + public static boolean attributeIsDerivedId(TypeMapping typeMapping, String attributeName) { + if (attributeName == null) { + return false; + } + // the attribute name may be qualified - we test only the first attribute name + int dotIndex = attributeName.indexOf('.'); + attributeName = (dotIndex == -1) ? attributeName : attributeName.substring(0, dotIndex); + return CollectionTools.contains(getMapsIdDerivedIdAttributeNames(typeMapping), attributeName); + } + + /** + * Return the names of all the ID attributes derived from + * single-relationship mappings for the specified type mapping + * (i.e. the names of the ID attributes that are specified by a single- + * relationship mapping's "maps ID" setting). + */ + protected static Iterable<String> getMapsIdDerivedIdAttributeNames(TypeMapping typeMapping) { + return new TransformationIterable<MapsIdDerivedIdentityStrategy2_0, String>(getMapsIdDerivedIdentityStrategies(typeMapping)) { @Override - protected String transform(SingleRelationshipMapping2_0 attributeMapping) { - return attributeMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getValue(); + protected String transform(MapsIdDerivedIdentityStrategy2_0 strategy) { + return strategy.getIdAttributeName(); } }; } - public static Iterable<SingleRelationshipMapping2_0> getMapsIdRelationshipMappings(TypeMapping typeMapping) { - return new FilteringIterable<SingleRelationshipMapping2_0>(getSingleRelationshipMappings(typeMapping)) { + /** + * Return all the single-relationship "maps ID" derived identity strategies + * for the specified type mapping. + */ + protected static Iterable<MapsIdDerivedIdentityStrategy2_0> getMapsIdDerivedIdentityStrategies(TypeMapping typeMapping) { + return new TransformationIterable<DerivedIdentity2_0, MapsIdDerivedIdentityStrategy2_0>(getMapsIdDerivedIdentities(typeMapping)) { + @Override + protected MapsIdDerivedIdentityStrategy2_0 transform(DerivedIdentity2_0 derivedIdentity) { + return derivedIdentity.getMapsIdDerivedIdentityStrategy(); + } + }; + } + + /** + * Return all the single-relationship "maps ID" derived identities for the + * specified type mapping. + */ + protected static Iterable<DerivedIdentity2_0> getMapsIdDerivedIdentities(TypeMapping typeMapping) { + return new FilteringIterable<DerivedIdentity2_0>(getDerivedIdentities(typeMapping)) { @Override - protected boolean accept(SingleRelationshipMapping2_0 attributeMapping) { - return attributeMapping.getDerivedIdentity().usesMapsIdDerivedIdentityStrategy(); + protected boolean accept(DerivedIdentity2_0 derivedIdentity) { + return derivedIdentity.usesMapsIdDerivedIdentityStrategy(); } }; } + /** + * Return all the single-relationship derived identities for the specified + * type mapping. + */ + protected static Iterable<DerivedIdentity2_0> getDerivedIdentities(TypeMapping typeMapping) { + return new TransformationIterable<SingleRelationshipMapping2_0, DerivedIdentity2_0>(getSingleRelationshipMappings(typeMapping)) { + @Override + protected DerivedIdentity2_0 transform(SingleRelationshipMapping2_0 mapping) { + return mapping.getDerivedIdentity(); + } + }; + } + + /** + * Return all the single-relationship attribute mappings for the specified + * type mapping. + */ protected static Iterable<SingleRelationshipMapping2_0> getSingleRelationshipMappings(TypeMapping typeMapping) { return new SubIterableWrapper<AttributeMapping, SingleRelationshipMapping2_0>(getSingleRelationshipMappings_(typeMapping)); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseColumn.java index 9fccee517c..9107d3e04c 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseColumn.java @@ -18,13 +18,14 @@ import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.java.JavaBaseColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.resource.java.BaseColumnAnnotation; /** * Java column or join column */ -public abstract class AbstractJavaBaseColumn<A extends BaseColumnAnnotation, O extends JavaBaseColumn.Owner> +public abstract class AbstractJavaBaseColumn<A extends BaseColumnAnnotation, O extends JavaReadOnlyBaseColumn.Owner> extends AbstractJavaNamedColumn<A, O> implements JavaBaseColumn { @@ -318,10 +319,6 @@ public abstract class AbstractJavaBaseColumn<A extends BaseColumnAnnotation, O e // ignore other settings? } - public boolean tableNameIsInvalid() { - return this.owner.tableNameIsInvalid(this.getTable()); - } - // ********** Java completion proposals ********** @@ -353,6 +350,13 @@ public abstract class AbstractJavaBaseColumn<A extends BaseColumnAnnotation, O e return this.owner.candidateTableNames(); } + + // ********** validation ********** + + public boolean tableNameIsInvalid() { + return this.owner.tableNameIsInvalid(this.getTable()); + } + @Override protected NamedColumnTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { return new JavaBaseColumnTextRangeResolver(this, astRoot); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java index 6d20bd5ba3..725f71f64f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java @@ -21,11 +21,12 @@ import org.eclipse.jpt.common.utility.internal.iterators.TransformationIterator; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.Embeddable; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaBaseEmbeddedMapping; @@ -39,9 +40,10 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.AttributeOverrideColumnVal import org.eclipse.jpt.jpa.core.internal.jpa1.context.AttributeOverrideValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EmbeddableOverrideDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; -import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.GenericOrmEmbeddedIdMapping; +import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaEmbeddedIdMapping; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAttributeOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.java.Annotation; import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentMember; import org.eclipse.jpt.jpa.db.Table; @@ -92,9 +94,7 @@ public abstract class AbstractJavaBaseEmbeddedMapping<A extends Annotation> return this.getJpaFactory().buildJavaAttributeOverrideContainer(this, this.buildAttributeOverrideContainerOwner()); } - protected JavaAttributeOverrideContainer.Owner buildAttributeOverrideContainerOwner() { - return new AttributeOverrideContainerOwner(); - } + protected abstract JavaAttributeOverrideContainer.Owner buildAttributeOverrideContainerOwner(); // ********** target embeddable ********** @@ -242,8 +242,8 @@ public abstract class AbstractJavaBaseEmbeddedMapping<A extends Annotation> // ********** attribute override container owner ********* - protected class AttributeOverrideContainerOwner - implements JavaAttributeOverrideContainer.Owner + protected abstract class AttributeOverrideContainerOwner + implements JavaAttributeOverrideContainer2_0.Owner { public JavaResourcePersistentMember getResourcePersistentMember() { return AbstractJavaBaseEmbeddedMapping.this.getResourcePersistentAttribute(); @@ -258,17 +258,17 @@ public abstract class AbstractJavaBaseEmbeddedMapping<A extends Annotation> } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? this.allOverridableAttributeNames_(typeMapping) : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? this.allOverridableAttributeNames_(overriddenTypeMapping) : EmptyIterator.<String>instance(); } /** * pre-condition: type mapping is not <code>null</code> * <p> - * NB: Overridden in {@link GenericOrmEmbeddedIdMapping.AttributeOverrideContainerOwner} + * NB: Overridden in {@link GenericJavaEmbeddedIdMapping.AttributeOverrideContainerOwner} */ - protected Iterator<String> allOverridableAttributeNames_(TypeMapping typeMapping) { - return typeMapping.allOverridableAttributeNames(); + protected Iterator<String> allOverridableAttributeNames_(TypeMapping overriddenTypeMapping) { + return overriddenTypeMapping.allOverridableAttributeNames(); } public Column resolveOverriddenColumn(String attributeName) { @@ -308,12 +308,12 @@ public abstract class AbstractJavaBaseEmbeddedMapping<A extends Annotation> return AbstractJavaBaseEmbeddedMapping.this.getValidationTextRange(astRoot); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); } protected JavaPersistentAttribute getPersistentAttribute() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBasicMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBasicMapping.java index b8444408cd..33535405d9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBasicMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaBasicMapping.java @@ -18,10 +18,10 @@ import org.eclipse.jpt.common.utility.internal.SimpleAssociation; import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.jpa.core.JpaFactory; import org.eclipse.jpt.jpa.core.MappingKeys; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Converter; import org.eclipse.jpt.jpa.core.context.FetchType; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaBasicMapping; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; import org.eclipse.jpt.jpa.core.context.java.JavaConverter; @@ -347,8 +347,8 @@ public abstract class AbstractJavaBasicMapping return this.getTypeMapping().allAssociatedTableNames(); } - public JptValidator buildColumnValidator(NamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { - return new NamedColumnValidator(this.getPersistentAttribute(), (BaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java index ea61083d54..7c4b6a5d9c 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaEntity.java @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; -import java.util.Collection; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; @@ -28,7 +28,6 @@ import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.SubIterableWrapper; import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; import org.eclipse.jpt.common.utility.internal.iterators.CompositeIterator; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; @@ -43,23 +42,24 @@ import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.DiscriminatorColumn; import org.eclipse.jpt.jpa.core.context.DiscriminatorType; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.InheritanceType; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.PersistentType; import org.eclipse.jpt.jpa.core.context.PrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlySecondaryTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.Relationship; import org.eclipse.jpt.jpa.core.context.SecondaryTable; @@ -67,19 +67,17 @@ import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.java.JavaBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaDiscriminatorColumn; import org.eclipse.jpt.jpa.core.context.java.JavaEntity; import org.eclipse.jpt.jpa.core.context.java.JavaGeneratorContainer; import org.eclipse.jpt.jpa.core.context.java.JavaIdClassReference; -import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; -import org.eclipse.jpt.jpa.core.context.java.JavaOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaQueryContainer; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; import org.eclipse.jpt.jpa.core.context.java.JavaTable; -import org.eclipse.jpt.jpa.core.context.java.JavaTypeMapping; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; @@ -108,8 +106,10 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.TableValidator; import org.eclipse.jpt.jpa.core.internal.resource.java.NullPrimaryKeyJoinColumnAnnotation; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; -import org.eclipse.jpt.jpa.core.jpa2.context.SingleRelationshipMapping2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverrideContainer2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAttributeOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaCacheableHolder2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.java.DiscriminatorValueAnnotation; import org.eclipse.jpt.jpa.core.resource.java.EntityAnnotation; import org.eclipse.jpt.jpa.core.resource.java.InheritanceAnnotation; @@ -1074,7 +1074,13 @@ public abstract class AbstractJavaEntity } protected boolean tableNameIsValid(String tableName) { - return this.tableIsUndefined || CollectionTools.contains(this.getAllAssociatedTableNames(), tableName); + return this.tableIsUndefined || this.tableNameIsValid_(tableName); + } + + protected boolean tableNameIsValid_(String tableName) { + return this.connectionProfileIsActive() ? + (this.resolveDbTable(tableName) != null) : + CollectionTools.contains(this.getAllAssociatedTableNames(), tableName); } @@ -1367,10 +1373,8 @@ public abstract class AbstractJavaEntity } protected void validateDuplicateEntityNames(List<IMessage> messages, CompilationUnit astRoot) { - HashBag<String> javaEntityNamesExclOverridden = new HashBag<String>(); - CollectionTools.addAll(javaEntityNamesExclOverridden, this.getPersistenceUnit().javaEntityNamesExclOverridden()); - HashBag<String> ormEntityNames = new HashBag<String>(); - CollectionTools.addAll(ormEntityNames, this.getPersistenceUnit().ormEntityNames()); + HashBag<String> javaEntityNamesExclOverridden = CollectionTools.bag(this.getPersistenceUnit().javaEntityNamesExclOverridden()); + HashSet<String> ormEntityNames = CollectionTools.set(this.getPersistenceUnit().ormEntityNames()); String javaEntityName = this.getName(); if ((javaEntityName != null) // Check whether or not this entity name has duplicates among @@ -1558,13 +1562,13 @@ public abstract class AbstractJavaEntity * some common behavior */ protected abstract class OverrideContainerOwner - implements JavaOverrideContainer.Owner + implements JavaOverrideContainer2_0.Owner { public JavaResourcePersistentMember getResourcePersistentMember() { return AbstractJavaEntity.this.getResourcePersistentType(); } - public JavaTypeMapping getTypeMapping() { + public AbstractJavaEntity getTypeMapping() { return AbstractJavaEntity.this; } @@ -1577,14 +1581,14 @@ public abstract class AbstractJavaEntity } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? this.allOverridableNames_(typeMapping) : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? this.allOverridableNames_(overriddenTypeMapping) : EmptyIterator.<String>instance(); } /** * pre-condition: <code>typeMapping</code> is not <code>null</code> */ - protected abstract Iterator<String> allOverridableNames_(TypeMapping typeMapping); + protected abstract Iterator<String> allOverridableNames_(TypeMapping overriddenTypeMapping); public String getDefaultTableName() { return AbstractJavaEntity.this.getPrimaryTableName(); @@ -1622,62 +1626,28 @@ public abstract class AbstractJavaEntity protected class AttributeOverrideContainerOwner extends OverrideContainerOwner - implements JavaAttributeOverrideContainer.Owner + implements JavaAttributeOverrideContainer2_0.Owner { @Override - protected Iterator<String> allOverridableNames_(TypeMapping typeMapping) { - final Collection<String> mappedByRelationshipAttributes = CollectionTools.collection( - new TransformationIterator<SingleRelationshipMapping2_0, String>(this.getMapsIdRelationships()) { - @Override - protected String transform(SingleRelationshipMapping2_0 mapping) { - return mapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getValue(); - } - }); - return new FilteringIterator<String>(typeMapping.allOverridableAttributeNames()) { + protected Iterator<String> allOverridableNames_(TypeMapping overriddenTypeMapping) { + return new FilteringIterator<String>(overriddenTypeMapping.allOverridableAttributeNames()) { @Override - protected boolean accept(String name) { - if (mappedByRelationshipAttributes.isEmpty()) { - return true; - } - // overridable names are (usually?) qualified with a container mapping, - // which may also be the one mapped by a relationship - int index = name.indexOf('.'); - String qualifier = (index > 0) ? name.substring(0, index) : name; - return ! mappedByRelationshipAttributes.contains(qualifier); + protected boolean accept(String attributeName) { + return ! AttributeOverrideContainerOwner.this.getTypeMapping().attributeIsDerivedId(attributeName); } }; } - protected Iterable<SingleRelationshipMapping2_0> getMapsIdRelationships() { - return new FilteringIterable<SingleRelationshipMapping2_0>(this.getSingleRelationshipMappings()) { - @Override - protected boolean accept(SingleRelationshipMapping2_0 mapping) { - return mapping.getDerivedIdentity().usesMapsIdDerivedIdentityStrategy(); - } - }; - } - - protected Iterable<SingleRelationshipMapping2_0> getSingleRelationshipMappings() { - return new SubIterableWrapper<AttributeMapping, SingleRelationshipMapping2_0>(this.getSingleRelationshipMappings_()); - } - - @SuppressWarnings("unchecked") - protected Iterable<AttributeMapping> getSingleRelationshipMappings_() { - return new CompositeIterable<AttributeMapping>( - this.getTypeMapping().getAllAttributeMappings(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY), - this.getTypeMapping().getAllAttributeMappings(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY) - ); - } public Column resolveOverriddenColumn(String attributeName) { return MappingTools.resolveOverriddenColumn(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AttributeOverrideValidator((AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AttributeOverrideValidator((ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AttributeOverrideColumnValidator((AttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AttributeOverrideColumnValidator((ReadOnlyAttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); } } @@ -1686,35 +1656,35 @@ public abstract class AbstractJavaEntity protected class AssociationOverrideContainerOwner extends OverrideContainerOwner - implements JavaAssociationOverrideContainer.Owner + implements JavaAssociationOverrideContainer2_0.Owner { @Override - protected Iterator<String> allOverridableNames_(TypeMapping typeMapping) { - return typeMapping.allOverridableAssociationNames(); + protected Iterator<String> allOverridableNames_(TypeMapping overriddenTypeMapping) { + return overriddenTypeMapping.allOverridableAssociationNames(); } public Relationship resolveOverriddenRelationship(String attributeName) { return MappingTools.resolveOverriddenRelationship(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AssociationOverrideValidator((AssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AssociationOverrideValidator((ReadOnlyAssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinColumnValidator((AssociationOverride) override, (JoinColumn) column, (JoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinColumnValidator((ReadOnlyAssociationOverride) override, (ReadOnlyJoinColumn) column, (ReadOnlyJoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideJoinColumnValidator(override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideInverseJoinColumnValidator(override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildTableValidator(AssociationOverride override, Table t, TableTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinTableValidator(override, (JoinTable) t, textRangeResolver); + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable t, TableTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinTableValidator(override, (ReadOnlyJoinTable) t, textRangeResolver); } } @@ -1725,7 +1695,7 @@ public abstract class AbstractJavaEntity * some common behavior */ protected abstract class NamedColumnOwner - implements JavaNamedColumn.Owner + implements JavaReadOnlyNamedColumn.Owner { public TypeMapping getTypeMapping() { return AbstractJavaEntity.this; @@ -1749,7 +1719,7 @@ public abstract class AbstractJavaEntity protected class PrimaryKeyJoinColumnOwner extends NamedColumnOwner - implements JavaBaseJoinColumn.Owner + implements JavaReadOnlyBaseJoinColumn.Owner { public org.eclipse.jpt.jpa.db.Table getReferencedColumnDbTable() { Entity parentEntity = AbstractJavaEntity.this.getParentEntity(); @@ -1772,8 +1742,8 @@ public abstract class AbstractJavaEntity return (parentEntity == null) ? AbstractJavaEntity.this.getPrimaryKeyColumnName() : parentEntity.getPrimaryKeyColumnName(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new EntityPrimaryKeyJoinColumnValidator((BaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new EntityPrimaryKeyJoinColumnValidator((ReadOnlyBaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); } } @@ -1814,7 +1784,7 @@ public abstract class AbstractJavaEntity return AbstractJavaEntity.this.discriminatorColumnIsUndefined; } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { return new DiscriminatorColumnValidator(column, textRangeResolver); } } @@ -1822,8 +1792,10 @@ public abstract class AbstractJavaEntity // ********** table owner ********** - protected class TableOwner implements Table.Owner { - public JptValidator buildTableValidator(Table t, TableTextRangeResolver textRangeResolver) { + protected class TableOwner + implements ReadOnlyTable.Owner + { + public JptValidator buildTableValidator(ReadOnlyTable t, TableTextRangeResolver textRangeResolver) { return new TableValidator(t, textRangeResolver); } } @@ -1831,9 +1803,11 @@ public abstract class AbstractJavaEntity // ********** secondary table owner ********** - protected class SecondaryTableOwner implements Table.Owner { - public JptValidator buildTableValidator(Table t, TableTextRangeResolver textRangeResolver) { - return new SecondaryTableValidator((SecondaryTable) t, textRangeResolver); + protected class SecondaryTableOwner + implements ReadOnlyTable.Owner + { + public JptValidator buildTableValidator(ReadOnlyTable t, TableTextRangeResolver textRangeResolver) { + return new SecondaryTableValidator((ReadOnlySecondaryTable) t, textRangeResolver); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaIdMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaIdMapping.java index c504200023..8b10f0d479 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaIdMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaIdMapping.java @@ -16,14 +16,13 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.common.utility.internal.ArrayTools; import org.eclipse.jpt.common.utility.internal.Association; -import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.SimpleAssociation; import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.jpa.core.JpaFactory; import org.eclipse.jpt.jpa.core.MappingKeys; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Converter; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; import org.eclipse.jpt.jpa.core.context.java.JavaConverter; import org.eclipse.jpt.jpa.core.context.java.JavaGeneratedValue; @@ -34,7 +33,6 @@ import org.eclipse.jpt.jpa.core.context.java.JavaTemporalConverter; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; -import org.eclipse.jpt.jpa.core.internal.context.TypeMappingTools; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.NamedColumnValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.NullJavaConverter; @@ -67,8 +65,8 @@ public abstract class AbstractJavaIdMapping protected JavaConverter converter; // never null - /* 2.0 feature - a relationship may map this id */ - protected boolean mappedByRelationship; + /* JPA 2.0 - the embedded id may be derived from a relationship */ + protected boolean derived; protected static final JavaConverter.Adapter[] CONVERTER_ADAPTER_ARRAY = new JavaConverter.Adapter[] { @@ -106,7 +104,7 @@ public abstract class AbstractJavaIdMapping this.generatedValue.update(); } this.converter.update(); - this.setMappedByRelationship(this.buildMappedByRelationship()); + this.setDerived(this.buildDerived()); } @@ -305,28 +303,24 @@ public abstract class AbstractJavaIdMapping } - // ********** mapped by relationship ********** + // ********** derived ********** - public boolean isMappedByRelationship() { - return this.mappedByRelationship; + public boolean isDerived() { + return this.derived; } - protected void setMappedByRelationship(boolean mappedByRelationship) { - boolean old = this.mappedByRelationship; - this.mappedByRelationship = mappedByRelationship; - this.firePropertyChanged(MAPPED_BY_RELATIONSHIP_PROPERTY, old, mappedByRelationship); + protected void setDerived(boolean derived) { + boolean old = this.derived; + this.derived = derived; + this.firePropertyChanged(DERIVED_PROPERTY, old, derived); } - protected boolean buildMappedByRelationship() { - return this.isJpa2_0Compatible() && this.buildMappedByRelationship_(); + protected boolean buildDerived() { + return this.isJpa2_0Compatible() && this.buildDerived_(); } - protected boolean buildMappedByRelationship_() { - return CollectionTools.contains(this.getMappedByRelationshipAttributeNames(), this.getName()); - } - - protected Iterable<String> getMappedByRelationshipAttributeNames() { - return TypeMappingTools.getMappedByRelationshipAttributeNames(this.getTypeMapping()); + protected boolean buildDerived_() { + return this.getTypeMapping().attributeIsDerivedId(this.getName()); } @@ -374,11 +368,11 @@ public abstract class AbstractJavaIdMapping } public String getDefaultColumnName() { - return (this.mappedByRelationship && ! this.columnIsSpecified()) ? null : this.getName(); + return (this.derived && ! this.columnIsSpecified()) ? null : this.getName(); } public String getDefaultTableName() { - return (this.mappedByRelationship && ! this.columnIsSpecified()) ? null : this.getTypeMapping().getPrimaryTableName(); + return (this.derived && ! this.columnIsSpecified()) ? null : this.getTypeMapping().getPrimaryTableName(); } public boolean tableNameIsInvalid(String tableName) { @@ -389,8 +383,8 @@ public abstract class AbstractJavaIdMapping return this.getTypeMapping().allAssociatedTableNames(); } - public JptValidator buildColumnValidator(NamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { - return new NamedColumnValidator(this.getPersistentAttribute(), (BaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } @@ -438,15 +432,15 @@ public abstract class AbstractJavaIdMapping // the column is validated. // JPA 1.0: The column is always be validated, since the ID is never mapped by a // relationship. - if (this.columnIsSpecified() || ! this.mappedByRelationship) { + if (this.columnIsSpecified() || ! this.derived) { this.column.validate(messages, reporter, astRoot); } // JPA 2.0: If the column is specified and the ID is mapped by a relationship, // we have an error. // JPA 1.0: The ID cannot be mapped by a relationship. - if (this.columnIsSpecified() && this.mappedByRelationship) { - messages.add(this.buildMappedByRelationshipAndColumnSpecifiedMessage(astRoot)); + if (this.columnIsSpecified() && this.derived) { + messages.add(this.buildColumnSpecifiedAndDerivedMessage(astRoot)); } this.generatorContainer.validate(messages, reporter, astRoot); @@ -456,7 +450,7 @@ public abstract class AbstractJavaIdMapping this.converter.validate(messages, reporter, astRoot); } - protected IMessage buildMappedByRelationshipAndColumnSpecifiedMessage(CompilationUnit astRoot) { + protected IMessage buildColumnSpecifiedAndDerivedMessage(CompilationUnit astRoot) { return this.buildMessage( JpaValidationMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED, EMPTY_STRING_ARRAY, diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinColumnRelationshipStrategy.java index b133a319f7..f1bc87c247 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinColumnRelationshipStrategy.java @@ -29,6 +29,7 @@ import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationship; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.resource.java.JoinColumnAnnotation; import org.eclipse.jpt.jpa.db.Table; @@ -41,7 +42,7 @@ public abstract class AbstractJavaJoinColumnRelationshipStrategy { protected final Vector<JavaJoinColumn> specifiedJoinColumns = new Vector<JavaJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter; - protected final JavaJoinColumn.Owner joinColumnOwner; + protected final JavaReadOnlyJoinColumn.Owner joinColumnOwner; protected JavaJoinColumn defaultJoinColumn; @@ -192,7 +193,7 @@ public abstract class AbstractJavaJoinColumnRelationshipStrategy } } - protected abstract JavaJoinColumn.Owner buildJoinColumnOwner(); + protected abstract JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner(); // ********** default join column ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinTableRelationshipStrategy.java index 6eafead62c..4d21f98269 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaJoinTableRelationshipStrategy.java @@ -16,8 +16,8 @@ import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTable; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; @@ -29,7 +29,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public abstract class AbstractJavaJoinTableRelationshipStrategy extends AbstractJavaJpaContextNode - implements JavaJoinTableRelationshipStrategy, Table.Owner + implements JavaJoinTableRelationshipStrategy, ReadOnlyTable.Owner { protected JavaJoinTable joinTable; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMappingRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMappingRelationship.java index 852474ce29..629387495a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMappingRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMappingRelationship.java @@ -20,7 +20,7 @@ import org.eclipse.jpt.jpa.core.context.RelationshipStrategy; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaMappingRelationship; import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingRelationshipStrategy2_0; /** * <strong>NB:</strong> Subclasses may want to set the {@link #strategy} at the @@ -31,7 +31,7 @@ public abstract class AbstractJavaMappingRelationship<M extends JavaRelationship extends AbstractJavaJpaContextNode implements JavaMappingRelationship { - protected JavaRelationshipStrategy strategy; + protected JavaMappingRelationshipStrategy2_0 strategy; public AbstractJavaMappingRelationship(M parent) { @@ -50,17 +50,17 @@ public abstract class AbstractJavaMappingRelationship<M extends JavaRelationship // ********** strategy ********** - public JavaRelationshipStrategy getStrategy() { + public JavaMappingRelationshipStrategy2_0 getStrategy() { return this.strategy; } - protected void setStrategy(JavaRelationshipStrategy strategy) { + protected void setStrategy(JavaMappingRelationshipStrategy2_0 strategy) { RelationshipStrategy old = this.strategy; this.strategy = strategy; this.firePropertyChanged(STRATEGY_PROPERTY, old, strategy); } - protected abstract JavaRelationshipStrategy buildStrategy(); + protected abstract JavaMappingRelationshipStrategy2_0 buildStrategy(); /** * This is called by subclasses when the various supported strategies are diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java index d452d2e0af..65dd47a375 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaMultiRelationshipMapping.java @@ -19,16 +19,16 @@ import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; -import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.Embeddable; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.FetchType; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.RelationshipStrategy; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; @@ -49,6 +49,7 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.MapKeyColumnValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.RelationshipStrategyTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.NullJavaMapKeyColumn2_0; import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAttributeOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaCollectionMapping2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaPersistentAttribute2_0; import org.eclipse.jpt.jpa.core.jpa2.resource.java.MapKeyClass2_0Annotation; @@ -721,8 +722,8 @@ public abstract class AbstractJavaMultiRelationshipMapping<A extends Relationshi return this.getRelationshipStrategy().tableNameIsInvalid(tableName); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new MapKeyColumnValidator(this.getPersistentAttribute(), (BaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new MapKeyColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); } } @@ -731,7 +732,7 @@ public abstract class AbstractJavaMultiRelationshipMapping<A extends Relationshi protected class MapKeyAttributeOverrideContainerOwner extends AbstractOwner - implements JavaAttributeOverrideContainer.Owner + implements JavaAttributeOverrideContainer2_0.Owner { public JavaResourcePersistentMember getResourcePersistentMember() { return AbstractJavaMultiRelationshipMapping.this.getResourcePersistentAttribute(); @@ -750,8 +751,8 @@ public abstract class AbstractJavaMultiRelationshipMapping<A extends Relationshi } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? typeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? overriddenTypeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); } protected static final String POSSIBLE_PREFIX = "key"; //$NON-NLS-1$ @@ -773,12 +774,12 @@ public abstract class AbstractJavaMultiRelationshipMapping<A extends Relationshi return MappingTools.resolveOverriddenColumn(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaNamedColumn.java index 44615c5f91..8d91e29352 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaNamedColumn.java @@ -17,10 +17,11 @@ import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.resource.java.NamedColumnAnnotation; @@ -40,13 +41,13 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; * <strong>NB:</strong> any subclass that directly holds its column annotation * must:<ul> * <li>call the "super" constructor that takes a column annotation - * {@link #AbstractJavaNamedColumn(JavaJpaContextNode, JavaNamedColumn.Owner, NamedColumnAnnotation)} + * {@link #AbstractJavaNamedColumn(JavaJpaContextNode, JavaReadOnlyNamedColumn.Owner, NamedColumnAnnotation)} * <li>override {@link #setColumnAnnotation(NamedColumnAnnotation)} to set the column annotation * so it is in place before the column's state (e.g. {@link #specifiedName}) * is initialized * </ul> */ -public abstract class AbstractJavaNamedColumn<A extends NamedColumnAnnotation, O extends JavaNamedColumn.Owner> +public abstract class AbstractJavaNamedColumn<A extends NamedColumnAnnotation, O extends JavaReadOnlyNamedColumn.Owner> extends AbstractJavaJpaContextNode implements JavaNamedColumn { @@ -243,11 +244,11 @@ public abstract class AbstractJavaNamedColumn<A extends NamedColumnAnnotation, O @Override public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { super.validate(messages, reporter, astRoot); - this.buildColumnValidator(astRoot).validate(messages, reporter); + this.buildValidator(astRoot).validate(messages, reporter); } - protected JptValidator buildColumnValidator(CompilationUnit astRoot) { - return this.owner.buildColumnValidator(this, buildTextRangeResolver(astRoot)); + protected JptValidator buildValidator(CompilationUnit astRoot) { + return this.owner.buildColumnValidator(this, this.buildTextRangeResolver(astRoot)); } protected NamedColumnTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { @@ -267,7 +268,7 @@ public abstract class AbstractJavaNamedColumn<A extends NamedColumnAnnotation, O // ********** misc ********** /** - * This is used by the subclasses that implement {@link BaseJoinColumn}. + * This is used by the subclasses that implement {@link ReadOnlyBaseJoinColumn#isVirtual()}. */ public boolean isVirtual() { return false; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaNamedColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaNamedColumnTextRangeResolver.java new file mode 100644 index 0000000000..a8139f49d2 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaNamedColumnTextRangeResolver.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.internal.context.java; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; + +public abstract class AbstractJavaNamedColumnTextRangeResolver<C extends JavaReadOnlyNamedColumn> + implements NamedColumnTextRangeResolver +{ + protected final C column; + + protected final CompilationUnit astRoot; + + + protected AbstractJavaNamedColumnTextRangeResolver(C column, CompilationUnit astRoot) { + super(); + this.column = column; + this.astRoot = astRoot; + } + + public TextRange getNameTextRange() { + return this.column.getNameTextRange(this.astRoot); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaOverride.java index cf70a08a2b..288f549190 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaOverride.java @@ -16,13 +16,19 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; +import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; import org.eclipse.jpt.jpa.core.context.java.JavaOverride; import org.eclipse.jpt.jpa.core.context.java.JavaOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualOverride; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.java.OverrideAnnotation; +import org.eclipse.jpt.jpa.db.Table; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -101,7 +107,7 @@ public abstract class AbstractJavaOverride<C extends JavaOverrideContainer, A ex } protected String getPossiblePrefix() { - return this.getContainer().getPossiblePrefix(); + return this.isJpa2_0Compatible() ? this.getContainer2_0().getPossiblePrefix() : null; } @@ -124,10 +130,14 @@ public abstract class AbstractJavaOverride<C extends JavaOverrideContainer, A ex return (C) super.getParent(); } - public C getContainer() { + protected C getContainer() { return this.getParent(); } + protected JavaOverrideContainer2_0 getContainer2_0() { + return (JavaOverrideContainer2_0) this.getContainer(); + } + public A getOverrideAnnotation() { return this.overrideAnnotation; } @@ -140,6 +150,22 @@ public abstract class AbstractJavaOverride<C extends JavaOverrideContainer, A ex this.setName(this.prefix(virtualOverride.getName())); } + public TypeMapping getTypeMapping() { + return this.getContainer().getTypeMapping(); + } + + public Table resolveDbTable(String tableName) { + return this.getContainer().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getContainer().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, column, owner, textRangeResolver); + } + protected String prefix(String oldName) { if (oldName == null) { return null; @@ -149,7 +175,7 @@ public abstract class AbstractJavaOverride<C extends JavaOverrideContainer, A ex } protected String getWritePrefix() { - return this.getContainer().getWritePrefix(); + return this.isJpa2_0Compatible() ? this.getContainer2_0().getWritePrefix() : null; } @Override @@ -196,7 +222,7 @@ public abstract class AbstractJavaOverride<C extends JavaOverrideContainer, A ex } protected JptValidator buildValidator(CompilationUnit astRoot) { - return this.getContainer().buildValidator(this, buildTextRangeResolver(astRoot)); + return this.getContainer().buildOverrideValidator(this, buildTextRangeResolver(astRoot)); } protected OverrideTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { @@ -211,4 +237,12 @@ public abstract class AbstractJavaOverride<C extends JavaOverrideContainer, A ex public TextRange getNameTextRange(CompilationUnit astRoot) { return this.getValidationTextRange(this.overrideAnnotation.getNameTextRange(astRoot), astRoot); } + + public boolean tableNameIsInvalid(String tableName) { + return this.getContainer().tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return this.getContainer().candidateTableNames(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaTypeMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaTypeMapping.java index 7aeada737c..10d2ba19a0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaTypeMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaTypeMapping.java @@ -82,6 +82,10 @@ public abstract class AbstractJavaTypeMapping<A extends Annotation> return this.mappingAnnotation; } + public boolean attributeIsDerivedId(String attributeName) { + return TypeMappingTools.attributeIsDerivedId(this, attributeName); + } + @Override public void toString(StringBuilder sb) { sb.append(this.getPersistentType().getName()); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualBaseColumn.java index a28099d901..37511ba623 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualBaseColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,14 +9,18 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import java.util.Iterator; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.VirtualBaseColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; -public abstract class AbstractJavaVirtualBaseColumn<O extends ReadOnlyNamedColumn.Owner, C extends BaseColumn> +public abstract class AbstractJavaVirtualBaseColumn<O extends JavaReadOnlyBaseColumn.Owner, C extends ReadOnlyBaseColumn> extends AbstractJavaVirtualNamedColumn<O, C> - implements VirtualBaseColumn + implements VirtualBaseColumn, JavaReadOnlyBaseColumn { protected String specifiedTable; protected String defaultTable; @@ -64,6 +68,7 @@ public abstract class AbstractJavaVirtualBaseColumn<O extends ReadOnlyNamedColum // ********** table ********** + @Override public String getTable() { return (this.specifiedTable != null) ? this.specifiedTable : this.defaultTable; } @@ -235,4 +240,27 @@ public abstract class AbstractJavaVirtualBaseColumn<O extends ReadOnlyNamedColum protected boolean buildDefaultUpdatable() { return DEFAULT_UPDATABLE; } + + + // ********** misc ********** + + public boolean tableNameIsInvalid() { + return this.owner.tableNameIsInvalid(this.getTable()); + } + + public Iterator<String> candidateTableNames() { + return this.owner.candidateTableNames(); + } + + + // ********** validation ********** + + public TextRange getTableTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(astRoot); + } + + @Override + protected NamedColumnTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { + return new JavaBaseColumnTextRangeResolver(this, astRoot); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualNamedColumn.java index cb72435abd..163294d6e4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualNamedColumn.java @@ -9,12 +9,19 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; +import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.VirtualNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.jpt.jpa.db.Column; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Java virtual<ul> @@ -25,9 +32,9 @@ import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; * because <em>all</em> of it is derived from the context model (i.e. none of it * is derived from the resource model). */ -public abstract class AbstractJavaVirtualNamedColumn<O extends ReadOnlyNamedColumn.Owner, C extends NamedColumn> +public abstract class AbstractJavaVirtualNamedColumn<O extends ReadOnlyNamedColumn.Owner, C extends ReadOnlyNamedColumn> extends AbstractJavaJpaContextNode - implements VirtualNamedColumn + implements VirtualNamedColumn, JavaReadOnlyNamedColumn { protected final O owner; @@ -116,12 +123,54 @@ public abstract class AbstractJavaVirtualNamedColumn<O extends ReadOnlyNamedColu } + // ********** database stuff ********** + + protected Column getDbColumn() { + Table table = this.getDbTable(); + return (table == null) ? null : table.getColumnForIdentifier(this.getName()); + } + + public Table getDbTable() { + return this.owner.resolveDbTable(this.getTable()); + } + + /** + * Return the name of the column's table. This is overridden + * in {@link AbstractJavaVirtualBaseColumn} where a table can be defined. + */ + public String getTable() { + return this.owner.getTypeMapping().getPrimaryTableName(); + } + + public boolean isResolved() { + return this.getDbColumn() != null; + } + + // ********** validation ********** + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + this.buildValidator(astRoot).validate(messages, reporter); + } + + protected JptValidator buildValidator(CompilationUnit astRoot) { + return this.owner.buildColumnValidator(this, this.buildTextRangeResolver(astRoot)); + } + + protected NamedColumnTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { + return new JavaNamedColumnTextRangeResolver(this, astRoot); + } + public TextRange getValidationTextRange(CompilationUnit astRoot) { return this.getParent().getValidationTextRange(astRoot); } + public TextRange getNameTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(astRoot); + } + // ********** misc ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualOverride.java index ca34875b28..b934a9d676 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualOverride.java @@ -9,11 +9,22 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; +import java.util.Iterator; +import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; import org.eclipse.jpt.jpa.core.context.java.JavaOverride; import org.eclipse.jpt.jpa.core.context.java.JavaOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualOverride; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Virtual Java override @@ -48,16 +59,61 @@ public abstract class AbstractJavaVirtualOverride<C extends JavaOverrideContaine return (C) super.getParent(); } - public C getContainer() { + protected C getContainer() { return this.getParent(); } - public TextRange getValidationTextRange(CompilationUnit astRoot) { - return this.getContainer().getValidationTextRange(astRoot); + public TypeMapping getTypeMapping() { + return this.getContainer().getTypeMapping(); + } + + public Table resolveDbTable(String tableName) { + return this.getContainer().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getContainer().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, column, owner, textRangeResolver); } @Override public void toString(StringBuilder sb) { sb.append(this.name); } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + this.buildValidator(astRoot).validate(messages, reporter); + } + + protected JptValidator buildValidator(CompilationUnit astRoot) { + return this.getContainer().buildOverrideValidator(this, this.buildTextRangeResolver(astRoot)); + } + + protected OverrideTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { + return new JavaOverrideTextRangeResolver(this, astRoot); + } + + public TextRange getValidationTextRange(CompilationUnit astRoot) { + return this.getContainer().getValidationTextRange(astRoot); + } + + public TextRange getNameTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(astRoot); + } + + public boolean tableNameIsInvalid(String tableName) { + return this.getContainer().tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return this.getContainer().candidateTableNames(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualReferenceTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualReferenceTable.java index ec4d5b507f..a5396070c7 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualReferenceTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualReferenceTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,34 +9,38 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; +import java.util.List; import java.util.ListIterator; import java.util.Vector; +import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; -import org.eclipse.jpt.jpa.core.context.JoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; -import org.eclipse.jpt.jpa.core.context.ReferenceTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyReferenceTable; import org.eclipse.jpt.jpa.core.context.VirtualReferenceTable; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; -public abstract class AbstractJavaVirtualReferenceTable<T extends ReferenceTable> +public abstract class AbstractJavaVirtualReferenceTable<T extends ReadOnlyReferenceTable> extends AbstractJavaVirtualTable<T> implements VirtualReferenceTable { protected final Vector<JavaVirtualJoinColumn> specifiedJoinColumns = new Vector<JavaVirtualJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter = new SpecifiedJoinColumnContainerAdapter(); - protected final ReadOnlyJoinColumn.Owner joinColumnOwner; + protected final JavaReadOnlyJoinColumn.Owner joinColumnOwner; protected JavaVirtualJoinColumn defaultJoinColumn; - protected AbstractJavaVirtualReferenceTable(JavaJpaContextNode parent) { - super(parent); + protected AbstractJavaVirtualReferenceTable(JavaJpaContextNode parent, Owner owner) { + super(parent, owner); this.joinColumnOwner = this.buildJoinColumnOwner(); } @@ -92,7 +96,7 @@ public abstract class AbstractJavaVirtualReferenceTable<T extends ReferenceTable ContextContainerTools.update(this.specifiedJoinColumnContainerAdapter); } - protected Iterable<JoinColumn> getOverriddenJoinColumns() { + protected Iterable<ReadOnlyJoinColumn> getOverriddenJoinColumns() { return CollectionTools.iterable(this.getOverriddenTable().specifiedJoinColumns()); } @@ -100,7 +104,7 @@ public abstract class AbstractJavaVirtualReferenceTable<T extends ReferenceTable this.moveItemInList(index, joinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); } - protected JavaVirtualJoinColumn addSpecifiedJoinColumn(int index, JoinColumn joinColumn) { + protected JavaVirtualJoinColumn addSpecifiedJoinColumn(int index, ReadOnlyJoinColumn joinColumn) { JavaVirtualJoinColumn virtualJoinColumn = this.buildJoinColumn(joinColumn); this.addItemToList(index, virtualJoinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); return virtualJoinColumn; @@ -114,21 +118,21 @@ public abstract class AbstractJavaVirtualReferenceTable<T extends ReferenceTable * specified join column container adapter */ protected class SpecifiedJoinColumnContainerAdapter - implements ContextContainerTools.Adapter<JavaVirtualJoinColumn, JoinColumn> + implements ContextContainerTools.Adapter<JavaVirtualJoinColumn, ReadOnlyJoinColumn> { public Iterable<JavaVirtualJoinColumn> getContextElements() { return AbstractJavaVirtualReferenceTable.this.getSpecifiedJoinColumns(); } - public Iterable<JoinColumn> getResourceElements() { + public Iterable<ReadOnlyJoinColumn> getResourceElements() { return AbstractJavaVirtualReferenceTable.this.getOverriddenJoinColumns(); } - public JoinColumn getResourceElement(JavaVirtualJoinColumn contextElement) { + public ReadOnlyJoinColumn getResourceElement(JavaVirtualJoinColumn contextElement) { return contextElement.getOverriddenColumn(); } public void moveContextElement(int index, JavaVirtualJoinColumn element) { AbstractJavaVirtualReferenceTable.this.moveSpecifiedJoinColumn(index, element); } - public void addContextElement(int index, JoinColumn element) { + public void addContextElement(int index, ReadOnlyJoinColumn element) { AbstractJavaVirtualReferenceTable.this.addSpecifiedJoinColumn(index, element); } public void removeContextElement(JavaVirtualJoinColumn element) { @@ -178,15 +182,15 @@ public abstract class AbstractJavaVirtualReferenceTable<T extends ReferenceTable // ********** misc ********** - protected JavaVirtualJoinColumn buildJoinColumn(JoinColumn joinColumn) { + protected JavaVirtualJoinColumn buildJoinColumn(ReadOnlyJoinColumn joinColumn) { return this.buildJoinColumn(this.joinColumnOwner, joinColumn); } - protected JavaVirtualJoinColumn buildJoinColumn(ReadOnlyJoinColumn.Owner owner, JoinColumn joinColumn) { - return this.getJpaFactory().buildJavaVirtualJoinColumn(this, owner, joinColumn); + protected JavaVirtualJoinColumn buildJoinColumn(JavaReadOnlyJoinColumn.Owner columnOwner, ReadOnlyJoinColumn joinColumn) { + return this.getJpaFactory().buildJavaVirtualJoinColumn(this, columnOwner, joinColumn); } - protected abstract ReadOnlyJoinColumn.Owner buildJoinColumnOwner(); + protected abstract JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner(); @Override protected String buildDefaultSchema() { @@ -197,4 +201,23 @@ public abstract class AbstractJavaVirtualReferenceTable<T extends ReferenceTable protected String buildDefaultCatalog() { return this.getContextDefaultCatalog(); } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + boolean continueValidating = this.buildTableValidator(astRoot).validate(messages, reporter); + + //join column validation will handle the check for whether to validate against the database + //some validation messages are not database specific. If the database validation for the + //table fails we will stop there and not validate the join columns at all + if (continueValidating) { + this.validateJoinColumns(messages, reporter, astRoot); + } + } + + protected void validateJoinColumns(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + this.validateNodes(this.getJoinColumns(), messages, reporter, astRoot); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualTable.java index fad37786bd..ad603db012 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/AbstractJavaVirtualTable.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; +import java.util.List; import java.util.ListIterator; import java.util.Vector; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -17,20 +18,27 @@ import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.NameTools; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; -import org.eclipse.jpt.jpa.core.context.Table; -import org.eclipse.jpt.jpa.core.context.UniqueConstraint; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.VirtualTable; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyTable; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualUniqueConstraint; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.db.Catalog; import org.eclipse.jpt.jpa.db.Schema; import org.eclipse.jpt.jpa.db.SchemaContainer; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; -public abstract class AbstractJavaVirtualTable<T extends Table> +public abstract class AbstractJavaVirtualTable<T extends ReadOnlyTable> extends AbstractJavaJpaContextNode - implements VirtualTable + implements VirtualTable, JavaReadOnlyTable { + protected final Owner owner; + protected String specifiedName; protected String defaultName; @@ -44,8 +52,9 @@ public abstract class AbstractJavaVirtualTable<T extends Table> protected final UniqueConstraintContainerAdapter uniqueConstraintContainerAdapter = new UniqueConstraintContainerAdapter(); - protected AbstractJavaVirtualTable(JavaJpaContextNode parent) { + protected AbstractJavaVirtualTable(JavaJpaContextNode parent, Owner owner) { super(parent); + this.owner = owner; } @@ -197,7 +206,7 @@ public abstract class AbstractJavaVirtualTable<T extends Table> ContextContainerTools.update(this.uniqueConstraintContainerAdapter); } - protected Iterable<UniqueConstraint> getOverriddenUniqueConstraints() { + protected Iterable<ReadOnlyUniqueConstraint> getOverriddenUniqueConstraints() { return CollectionTools.iterable(this.getOverriddenTable().uniqueConstraints()); } @@ -205,13 +214,13 @@ public abstract class AbstractJavaVirtualTable<T extends Table> this.moveItemInList(index, constraint, this.uniqueConstraints, UNIQUE_CONSTRAINTS_LIST); } - protected JavaVirtualUniqueConstraint addUniqueConstraint(int index, UniqueConstraint uniqueConstraint) { + protected JavaVirtualUniqueConstraint addUniqueConstraint(int index, ReadOnlyUniqueConstraint uniqueConstraint) { JavaVirtualUniqueConstraint virtualConstraint = this.buildUniqueConstraint(uniqueConstraint); this.addItemToList(index, virtualConstraint, this.uniqueConstraints, UNIQUE_CONSTRAINTS_LIST); return virtualConstraint; } - protected JavaVirtualUniqueConstraint buildUniqueConstraint(UniqueConstraint uniqueConstraint) { + protected JavaVirtualUniqueConstraint buildUniqueConstraint(ReadOnlyUniqueConstraint uniqueConstraint) { return this.getJpaFactory().buildJavaVirtualUniqueConstraint(this, uniqueConstraint); } @@ -223,21 +232,21 @@ public abstract class AbstractJavaVirtualTable<T extends Table> * unique constraint container adapter */ protected class UniqueConstraintContainerAdapter - implements ContextContainerTools.Adapter<JavaVirtualUniqueConstraint, UniqueConstraint> + implements ContextContainerTools.Adapter<JavaVirtualUniqueConstraint, ReadOnlyUniqueConstraint> { public Iterable<JavaVirtualUniqueConstraint> getContextElements() { return AbstractJavaVirtualTable.this.getUniqueConstraints(); } - public Iterable<UniqueConstraint> getResourceElements() { + public Iterable<ReadOnlyUniqueConstraint> getResourceElements() { return AbstractJavaVirtualTable.this.getOverriddenUniqueConstraints(); } - public UniqueConstraint getResourceElement(JavaVirtualUniqueConstraint contextElement) { + public ReadOnlyUniqueConstraint getResourceElement(JavaVirtualUniqueConstraint contextElement) { return contextElement.getOverriddenUniqueConstraint(); } public void moveContextElement(int index, JavaVirtualUniqueConstraint element) { AbstractJavaVirtualTable.this.moveUniqueConstraint(index, element); } - public void addContextElement(int index, UniqueConstraint resourceElement) { + public void addContextElement(int index, ReadOnlyUniqueConstraint resourceElement) { AbstractJavaVirtualTable.this.addUniqueConstraint(index, resourceElement); } public void removeContextElement(JavaVirtualUniqueConstraint element) { @@ -258,6 +267,19 @@ public abstract class AbstractJavaVirtualTable<T extends Table> return (dbSchemaContainer == null) ? null : dbSchemaContainer.getSchemaForIdentifier(this.getSchema()); } + public boolean schemaIsResolved() { + return this.getDbSchema() != null; + } + + /** + * If we don't have a catalog (i.e. we don't even have a <em>default</em> + * catalog), then the database probably does not support catalogs. + */ + public boolean catalogIsResolved() { + String catalog = this.getCatalog(); + return (catalog == null) || (this.resolveDbCatalog(catalog) != null); + } + /** * If we don't have a catalog (i.e. we don't even have a <em>default</em> catalog), * then the database probably does not support catalogs; and we need to @@ -277,7 +299,7 @@ public abstract class AbstractJavaVirtualTable<T extends Table> return (catalog == null) ? null : this.resolveDbCatalog(catalog); } - protected boolean isResolved() { + public boolean isResolved() { return this.getDbTable() != null; } @@ -297,10 +319,36 @@ public abstract class AbstractJavaVirtualTable<T extends Table> // ********** validation ********** + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + this.buildTableValidator(astRoot).validate(messages, reporter); + } + + protected JptValidator buildTableValidator(CompilationUnit astRoot) { + return this.owner.buildTableValidator(this, buildTextRangeResolver(astRoot)); + } + + protected TableTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { + return new JavaTableTextRangeResolver(this, astRoot); + } + public TextRange getValidationTextRange(CompilationUnit astRoot) { return this.getParent().getValidationTextRange(astRoot); } + public TextRange getNameTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(astRoot); + } + + public TextRange getSchemaTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(astRoot); + } + + public TextRange getCatalogTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(astRoot); + } + // ********** misc ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToManyRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToManyRelationship.java index acbd82eeb9..0bfd8eec6e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToManyRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToManyRelationship.java @@ -23,8 +23,10 @@ import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaManyToManyMapping; import org.eclipse.jpt.jpa.core.context.java.JavaManyToManyRelationship; import org.eclipse.jpt.jpa.core.context.java.JavaMappedByRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaMappingJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingMappedByRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.java.OwnableRelationshipMappingAnnotation; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -33,9 +35,9 @@ public class GenericJavaManyToManyRelationship extends AbstractJavaMappingRelationship<JavaManyToManyMapping> implements JavaManyToManyRelationship { - protected final JavaMappedByRelationshipStrategy mappedByStrategy; + protected final JavaMappingMappedByRelationshipStrategy2_0 mappedByStrategy; - protected final JavaJoinTableRelationshipStrategy joinTableStrategy; + protected final JavaMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; public GenericJavaManyToManyRelationship(JavaManyToManyMapping parent) { @@ -67,7 +69,7 @@ public class GenericJavaManyToManyRelationship // ********** strategy ********** @Override - protected JavaRelationshipStrategy buildStrategy() { + protected JavaMappingRelationshipStrategy2_0 buildStrategy() { if (this.mappedByStrategy.getMappedByAttribute() != null) { return this.mappedByStrategy; } @@ -95,7 +97,7 @@ public class GenericJavaManyToManyRelationship return mapping.getKey() == MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY; } - protected JavaMappedByRelationshipStrategy buildMappedByStrategy() { + protected JavaMappingMappedByRelationshipStrategy2_0 buildMappedByStrategy() { return new GenericJavaMappedByRelationshipStrategy(this); } @@ -120,7 +122,7 @@ public class GenericJavaManyToManyRelationship return this.getMappedByStrategy().getMappedByAttribute() == null; } - protected JavaJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected JavaMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return new GenericJavaMappingJoinTableRelationshipStrategy(this); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToOneRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToOneRelationship.java index c0ad6c945b..cbe1e39b02 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToOneRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaManyToOneRelationship.java @@ -20,10 +20,12 @@ import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaManyToOneMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaMappingJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.NullJavaJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaManyToOneRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingRelationshipStrategy2_0; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -31,10 +33,10 @@ public class GenericJavaManyToOneRelationship extends AbstractJavaMappingRelationship<JavaManyToOneMapping> implements JavaManyToOneRelationship2_0 { - protected final JavaJoinColumnRelationshipStrategy joinColumnStrategy; + protected final JavaMappingJoinColumnRelationshipStrategy2_0 joinColumnStrategy; // JPA 2.0 - protected final JavaJoinTableRelationshipStrategy joinTableStrategy; + protected final JavaMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; public GenericJavaManyToOneRelationship(JavaManyToOneMapping parent) { @@ -66,7 +68,7 @@ public class GenericJavaManyToOneRelationship // ********** strategy ********** @Override - protected JavaRelationshipStrategy buildStrategy() { + protected JavaMappingRelationshipStrategy2_0 buildStrategy() { if (this.isJpa2_0Compatible()) { if (this.joinTableStrategy.getJoinTable() != null) { return this.joinTableStrategy; @@ -96,7 +98,7 @@ public class GenericJavaManyToOneRelationship return false; } - protected JavaJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected JavaMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return this.isJpa2_0Compatible() ? new GenericJavaMappingJoinTableRelationshipStrategy(this) : new NullJavaJoinTableRelationshipStrategy(this); @@ -124,7 +126,7 @@ public class GenericJavaManyToOneRelationship return this.joinTableStrategy.getJoinTable() == null; } - protected JavaJoinColumnRelationshipStrategy buildJoinColumnStrategy() { + protected JavaMappingJoinColumnRelationshipStrategy2_0 buildJoinColumnStrategy() { return new GenericJavaMappingJoinColumnRelationshipStrategy(this); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappedByRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappedByRelationshipStrategy.java index 592466b523..498f7aaa26 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappedByRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappedByRelationshipStrategy.java @@ -22,12 +22,14 @@ import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.MappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.java.JavaMappedByRelationship; -import org.eclipse.jpt.jpa.core.context.java.JavaMappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationDescriptionMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingMappedByRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.java.OwnableRelationshipMappingAnnotation; import org.eclipse.jpt.jpa.db.Table; import org.eclipse.osgi.util.NLS; @@ -36,7 +38,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericJavaMappedByRelationshipStrategy extends AbstractJavaJpaContextNode - implements JavaMappedByRelationshipStrategy + implements JavaMappingMappedByRelationshipStrategy2_0 { protected String mappedByAttribute; @@ -149,6 +151,10 @@ public class GenericJavaMappedByRelationshipStrategy return (entity == null) ? null : entity.getName(); } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; // mapped-by strategies cannot be overridden + } + public void addStrategy() { if (this.mappedByAttribute == null) { this.setMappedByAttribute(""); //$NON-NLS-1$ diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappingJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappingJoinColumnRelationshipStrategy.java index 5e703d851b..4000558efe 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappingJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaMappingJoinColumnRelationshipStrategy.java @@ -15,14 +15,15 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.iterators.SubIteratorWrapper; import org.eclipse.jpt.common.utility.internal.iterators.SuperIteratorWrapper; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaMappingJoinColumnRelationship; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; @@ -30,6 +31,8 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProv import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.resource.java.NullJoinColumnAnnotation; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationDescriptionMessages; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinColumnRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentAttribute; import org.eclipse.jpt.jpa.core.resource.java.JoinColumnAnnotation; import org.eclipse.jpt.jpa.core.resource.java.JoinColumnsAnnotation; @@ -39,6 +42,7 @@ import org.eclipse.jpt.jpa.db.Table; public class GenericJavaMappingJoinColumnRelationshipStrategy extends AbstractJavaJoinColumnRelationshipStrategy + implements JavaMappingJoinColumnRelationshipStrategy2_0 { protected final boolean targetForeignKey; @@ -104,7 +108,7 @@ public class GenericJavaMappingJoinColumnRelationshipStrategy } @Override - protected JavaJoinColumn.Owner buildJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -135,6 +139,10 @@ public class GenericJavaMappingJoinColumnRelationshipStrategy return this.targetForeignKey; } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return overrideRelationship.getJoinColumnStrategy(); + } + // ********** validation ********** @@ -150,7 +158,7 @@ public class GenericJavaMappingJoinColumnRelationshipStrategy // ********** join column owner ********** protected class JoinColumnOwner - implements JavaJoinColumn.Owner + implements JavaReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -215,8 +223,8 @@ public class GenericJavaMappingJoinColumnRelationshipStrategy return GenericJavaMappingJoinColumnRelationshipStrategy.this.getValidationTextRange(astRoot); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new JoinColumnValidator(this.getPersistentAttribute(), (JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new JoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToManyRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToManyRelationship.java index 318babfe30..58298524af 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToManyRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToManyRelationship.java @@ -24,9 +24,12 @@ import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaMappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaOneToManyMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaMappingJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.NullJavaJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingMappedByRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOneToManyRelationship2_0; import org.eclipse.jpt.jpa.core.resource.java.OneToManyAnnotation; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -36,13 +39,13 @@ public class GenericJavaOneToManyRelationship extends AbstractJavaMappingRelationship<JavaOneToManyMapping> implements JavaOneToManyRelationship2_0 { - protected final JavaMappedByRelationshipStrategy mappedByStrategy; + protected final JavaMappingMappedByRelationshipStrategy2_0 mappedByStrategy; - protected final JavaJoinTableRelationshipStrategy joinTableStrategy; + protected final JavaMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; // JPA 2.0 or EclipseLink protected final boolean supportsJoinColumnStrategy; - protected final JavaJoinColumnRelationshipStrategy joinColumnStrategy; + protected final JavaMappingJoinColumnRelationshipStrategy2_0 joinColumnStrategy; public GenericJavaOneToManyRelationship(JavaOneToManyMapping parent, boolean supportsJoinColumnStrategy) { @@ -80,7 +83,7 @@ public class GenericJavaOneToManyRelationship // ********** strategy ********** @Override - protected JavaRelationshipStrategy buildStrategy() { + protected JavaMappingRelationshipStrategy2_0 buildStrategy() { if (this.mappedByStrategy.getMappedByAttribute() != null) { return this.mappedByStrategy; } @@ -121,7 +124,7 @@ public class GenericJavaOneToManyRelationship return false; } - protected JavaMappedByRelationshipStrategy buildMappedByStrategy() { + protected JavaMappingMappedByRelationshipStrategy2_0 buildMappedByStrategy() { return new GenericJavaMappedByRelationshipStrategy(this); } @@ -148,7 +151,7 @@ public class GenericJavaOneToManyRelationship ! this.joinColumnStrategy.hasSpecifiedJoinColumns(); } - protected JavaJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected JavaMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return new GenericJavaMappingJoinTableRelationshipStrategy(this); } @@ -174,7 +177,7 @@ public class GenericJavaOneToManyRelationship return false; } - protected JavaJoinColumnRelationshipStrategy buildJoinColumnStrategy() { + protected JavaMappingJoinColumnRelationshipStrategy2_0 buildJoinColumnStrategy() { return this.supportsJoinColumnStrategy ? new GenericJavaMappingJoinColumnRelationshipStrategy(this, true) : // true = target foreign key new NullJavaJoinColumnRelationshipStrategy(this); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToOneRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToOneRelationship.java index 8ea6e4ef66..2d53030855 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToOneRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOneToOneRelationship.java @@ -25,9 +25,13 @@ import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaMappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaOneToOneMapping; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumnRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaMappingJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.NullJavaJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingMappedByRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOneToOneRelationship2_0; import org.eclipse.jpt.jpa.core.resource.java.OwnableRelationshipMappingAnnotation; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -37,14 +41,14 @@ public class GenericJavaOneToOneRelationship extends AbstractJavaMappingRelationship<JavaOneToOneMapping> implements JavaOneToOneRelationship2_0 { - protected final JavaMappedByRelationshipStrategy mappedByStrategy; + protected final JavaMappingMappedByRelationshipStrategy2_0 mappedByStrategy; - protected final JavaPrimaryKeyJoinColumnRelationshipStrategy primaryKeyJoinColumnStrategy; + protected final JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 primaryKeyJoinColumnStrategy; // JPA 2.0 - protected final JavaJoinTableRelationshipStrategy joinTableStrategy; + protected final JavaMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; - protected final JavaJoinColumnRelationshipStrategy joinColumnStrategy; + protected final JavaMappingJoinColumnRelationshipStrategy2_0 joinColumnStrategy; public GenericJavaOneToOneRelationship(JavaOneToOneMapping parent) { @@ -82,7 +86,7 @@ public class GenericJavaOneToOneRelationship // ********** strategy ********** @Override - protected JavaRelationshipStrategy buildStrategy() { + protected JavaMappingRelationshipStrategy2_0 buildStrategy() { if (this.mappedByStrategy.getMappedByAttribute() != null) { return this.mappedByStrategy; } @@ -120,7 +124,7 @@ public class GenericJavaOneToOneRelationship return mapping.getKey() == MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY; } - protected JavaMappedByRelationshipStrategy buildMappedByStrategy() { + protected JavaMappingMappedByRelationshipStrategy2_0 buildMappedByStrategy() { return new GenericJavaMappedByRelationshipStrategy(this); } @@ -143,7 +147,7 @@ public class GenericJavaOneToOneRelationship this.updateStrategy(); } - protected JavaPrimaryKeyJoinColumnRelationshipStrategy buildPrimaryKeyJoinColumnStrategy() { + protected JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 buildPrimaryKeyJoinColumnStrategy() { return new GenericJavaPrimaryKeyJoinColumnRelationshipStrategy(this); } @@ -170,7 +174,7 @@ public class GenericJavaOneToOneRelationship return false; } - protected JavaJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected JavaMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return this.isJpa2_0Compatible() ? new GenericJavaMappingJoinTableRelationshipStrategy(this) : new NullJavaJoinTableRelationshipStrategy(this); @@ -202,7 +206,7 @@ public class GenericJavaOneToOneRelationship (this.joinTableStrategy.getJoinTable() == null); } - protected JavaJoinColumnRelationshipStrategy buildJoinColumnStrategy() { + protected JavaMappingJoinColumnRelationshipStrategy2_0 buildJoinColumnStrategy() { return new GenericJavaMappingJoinColumnRelationshipStrategy(this); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOverrideJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOverrideJoinColumnRelationshipStrategy.java index 9190e16939..79543b74ed 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOverrideJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaOverrideJoinColumnRelationshipStrategy.java @@ -13,18 +13,15 @@ import java.util.Iterator; import java.util.ListIterator; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; -import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaOverrideRelationship; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn.Owner; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; @@ -69,14 +66,14 @@ public class GenericJavaOverrideJoinColumnRelationshipStrategy } protected AssociationOverrideAnnotation getOverrideAnnotation() { - return this.getAssociationOverride().getOverrideAnnotation(); + return this.getRelationship().getOverrideAnnotation(); } // ********** misc ********** @Override - protected Owner buildJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -89,12 +86,12 @@ public class GenericJavaOverrideJoinColumnRelationshipStrategy public TypeMapping getRelationshipSource() { return this.isTargetForeignKey() ? this.getRelationshipMapping().getResolvedTargetEntity() : - this.getAssociationOverrideContainer().getTypeMapping(); + this.getRelationship().getTypeMapping(); } public TypeMapping getRelationshipTarget() { return this.isTargetForeignKey() ? - this.getAssociationOverrideContainer().getTypeMapping() : + this.getRelationship().getTypeMapping() : this.getRelationshipMappingTargetEntity(); } @@ -110,39 +107,39 @@ public class GenericJavaOverrideJoinColumnRelationshipStrategy @Override public RelationshipMapping getRelationshipMapping() { - return this.getAssociationOverride().getMapping(); + return this.getRelationship().getMapping(); } protected String getAttributeName() { - return this.getAssociationOverride().getName(); + return this.getRelationship().getAttributeName(); } @Override public String getTableName() { return this.isTargetForeignKey() ? super.getTableName() : - this.getAssociationOverrideContainer().getDefaultTableName(); + this.getRelationship().getDefaultTableName(); } @Override public Table resolveDbTable(String tableName) { return this.isTargetForeignKey() ? super.resolveDbTable(tableName) : - this.getAssociationOverrideContainer().resolveDbTable(tableName); + this.getRelationship().resolveDbTable(tableName); } @Override public boolean tableNameIsInvalid(String tableName) { return this.isTargetForeignKey() ? super.tableNameIsInvalid(tableName) : - this.getAssociationOverrideContainer().tableNameIsInvalid(tableName); + this.getRelationship().tableNameIsInvalid(tableName); } @Override public Iterator<String> candidateTableNames() { return this.isTargetForeignKey() ? super.candidateTableNames() : - this.getAssociationOverrideContainer().candidateTableNames(); + this.getRelationship().candidateTableNames(); } public String getColumnTableNotValidDescription() { @@ -153,19 +150,14 @@ public class GenericJavaOverrideJoinColumnRelationshipStrategy return false; } - protected JavaAssociationOverride getAssociationOverride() { - return this.getRelationship().getAssociationOverride(); - } - - protected JavaAssociationOverrideContainer getAssociationOverrideContainer() { - return this.getAssociationOverride().getContainer(); - } - @Override public JavaOverrideRelationship getRelationship() { return (JavaOverrideRelationship) super.getRelationship(); } + + // ********** validation ********** + public TextRange getValidationTextRange(CompilationUnit astRoot) { return this.getRelationship().getValidationTextRange(astRoot); } @@ -174,7 +166,7 @@ public class GenericJavaOverrideJoinColumnRelationshipStrategy // ********** join column owner adapter ********** protected class JoinColumnOwner - implements JavaJoinColumn.Owner + implements JavaReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -234,16 +226,8 @@ public class GenericJavaOverrideJoinColumnRelationshipStrategy return GenericJavaOverrideJoinColumnRelationshipStrategy.this.getValidationTextRange(astRoot); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return this.getAssociationOverrideContainer().buildColumnValidator(this.getAssociationOverride(), (BaseColumn) column, this, (BaseColumnTextRangeResolver) textRangeResolver); - } - - protected JavaAssociationOverride getAssociationOverride() { - return GenericJavaOverrideJoinColumnRelationshipStrategy.this.getAssociationOverride(); - } - - protected JavaAssociationOverrideContainer getAssociationOverrideContainer() { - return GenericJavaOverrideJoinColumnRelationshipStrategy.this.getAssociationOverrideContainer(); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return GenericJavaOverrideJoinColumnRelationshipStrategy.this.getRelationship().buildColumnValidator((ReadOnlyBaseColumn) column, this, (BaseColumnTextRangeResolver) textRangeResolver); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaPrimaryKeyJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaPrimaryKeyJoinColumnRelationshipStrategy.java index a55f54f9b7..cab786efa2 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaPrimaryKeyJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaPrimaryKeyJoinColumnRelationshipStrategy.java @@ -21,17 +21,16 @@ import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterators.SubIteratorWrapper; import org.eclipse.jpt.common.utility.internal.iterators.SuperIteratorWrapper; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.PrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipMapping; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; @@ -39,6 +38,8 @@ import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.jpa1.context.OneToOnePrimaryKeyJoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationDescriptionMessages; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentAttribute; import org.eclipse.jpt.jpa.core.resource.java.NestableAnnotation; import org.eclipse.jpt.jpa.core.resource.java.NestablePrimaryKeyJoinColumnAnnotation; @@ -50,11 +51,11 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericJavaPrimaryKeyJoinColumnRelationshipStrategy extends AbstractJavaJpaContextNode - implements JavaPrimaryKeyJoinColumnRelationshipStrategy + implements JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 { protected final Vector<JavaPrimaryKeyJoinColumn> primaryKeyJoinColumns = new Vector<JavaPrimaryKeyJoinColumn>(); protected final PrimaryKeyJoinColumnContainerAdapter primaryKeyJoinColumnContainerAdapter; - protected final JavaJoinColumn.Owner primaryKeyJoinColumnOwner; + protected final JavaReadOnlyJoinColumn.Owner primaryKeyJoinColumnOwner; public GenericJavaPrimaryKeyJoinColumnRelationshipStrategy(JavaPrimaryKeyJoinColumnRelationship parent) { @@ -187,7 +188,7 @@ public class GenericJavaPrimaryKeyJoinColumnRelationshipStrategy } } - protected JavaJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { return new PrimaryKeyJoinColumnOwner(); } @@ -266,6 +267,10 @@ public class GenericJavaPrimaryKeyJoinColumnRelationshipStrategy return this.getRelationshipMapping().getTypeMapping(); } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; // pk join column strategies cannot be overridden + } + public void addStrategy() { if (this.primaryKeyJoinColumns.size() == 0) { this.addPrimaryKeyJoinColumn(); @@ -315,7 +320,7 @@ public class GenericJavaPrimaryKeyJoinColumnRelationshipStrategy // ********** join column owner ********** protected class PrimaryKeyJoinColumnOwner - implements JavaJoinColumn.Owner + implements JavaReadOnlyJoinColumn.Owner { protected PrimaryKeyJoinColumnOwner() { super(); @@ -380,8 +385,8 @@ public class GenericJavaPrimaryKeyJoinColumnRelationshipStrategy return GenericJavaPrimaryKeyJoinColumnRelationshipStrategy.this.primaryKeyJoinColumnsSize(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new OneToOnePrimaryKeyJoinColumnValidator(this.getPersistentAttribute(), (BaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new OneToOnePrimaryKeyJoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); } protected JavaRelationshipMapping getRelationshipMapping() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaVirtualJoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaVirtualJoinTable.java index f27ca4df39..283cee058d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaVirtualJoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/GenericJavaVirtualJoinTable.java @@ -9,46 +9,58 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; +import java.util.Iterator; +import java.util.List; import java.util.ListIterator; import java.util.Vector; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; +import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinTable; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualRelationship; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Java virtual join table */ public class GenericJavaVirtualJoinTable - extends AbstractJavaVirtualReferenceTable<JoinTable> + extends AbstractJavaVirtualReferenceTable<ReadOnlyJoinTable> implements JavaVirtualJoinTable { - protected final JoinTable overriddenTable; + protected final ReadOnlyJoinTable overriddenTable; protected final Vector<JavaVirtualJoinColumn> specifiedInverseJoinColumns = new Vector<JavaVirtualJoinColumn>(); protected final SpecifiedInverseJoinColumnContainerAdapter specifiedInverseJoinColumnContainerAdapter = new SpecifiedInverseJoinColumnContainerAdapter(); - protected final ReadOnlyJoinColumn.Owner inverseJoinColumnOwner; + protected final JavaReadOnlyJoinColumn.Owner inverseJoinColumnOwner; protected JavaVirtualJoinColumn defaultInverseJoinColumn; - public GenericJavaVirtualJoinTable(JavaVirtualJoinTableRelationshipStrategy parent, JoinTable overriddenTable) { - super(parent); + public GenericJavaVirtualJoinTable(JavaVirtualJoinTableRelationshipStrategy parent, Owner owner, ReadOnlyJoinTable overriddenTable) { + super(parent, owner); this.overriddenTable = overriddenTable; this.inverseJoinColumnOwner = this.buildInverseJoinColumnOwner(); } @@ -67,7 +79,7 @@ public class GenericJavaVirtualJoinTable // ********** table ********** @Override - public JoinTable getOverriddenTable() { + public ReadOnlyJoinTable getOverriddenTable() { return this.overriddenTable; } @@ -113,7 +125,7 @@ public class GenericJavaVirtualJoinTable ContextContainerTools.update(this.specifiedInverseJoinColumnContainerAdapter); } - protected Iterable<JoinColumn> getOverriddenInverseJoinColumns() { + protected Iterable<ReadOnlyJoinColumn> getOverriddenInverseJoinColumns() { return CollectionTools.iterable(this.getOverriddenTable().specifiedInverseJoinColumns()); } @@ -121,7 +133,7 @@ public class GenericJavaVirtualJoinTable this.moveItemInList(index, joinColumn, this.specifiedInverseJoinColumns, SPECIFIED_INVERSE_JOIN_COLUMNS_LIST); } - protected JavaVirtualJoinColumn addSpecifiedInverseJoinColumn(int index, JoinColumn joinColumn) { + protected JavaVirtualJoinColumn addSpecifiedInverseJoinColumn(int index, ReadOnlyJoinColumn joinColumn) { JavaVirtualJoinColumn virtualJoinColumn = this.buildInverseJoinColumn(joinColumn); this.addItemToList(index, virtualJoinColumn, this.specifiedInverseJoinColumns, SPECIFIED_INVERSE_JOIN_COLUMNS_LIST); return virtualJoinColumn; @@ -135,21 +147,21 @@ public class GenericJavaVirtualJoinTable * specified inverse join column container adapter */ protected class SpecifiedInverseJoinColumnContainerAdapter - implements ContextContainerTools.Adapter<JavaVirtualJoinColumn, JoinColumn> + implements ContextContainerTools.Adapter<JavaVirtualJoinColumn, ReadOnlyJoinColumn> { public Iterable<JavaVirtualJoinColumn> getContextElements() { return GenericJavaVirtualJoinTable.this.getSpecifiedInverseJoinColumns(); } - public Iterable<JoinColumn> getResourceElements() { + public Iterable<ReadOnlyJoinColumn> getResourceElements() { return GenericJavaVirtualJoinTable.this.getOverriddenInverseJoinColumns(); } - public JoinColumn getResourceElement(JavaVirtualJoinColumn contextElement) { + public ReadOnlyJoinColumn getResourceElement(JavaVirtualJoinColumn contextElement) { return contextElement.getOverriddenColumn(); } public void moveContextElement(int index, JavaVirtualJoinColumn element) { GenericJavaVirtualJoinTable.this.moveSpecifiedInverseJoinColumn(index, element); } - public void addContextElement(int index, JoinColumn element) { + public void addContextElement(int index, ReadOnlyJoinColumn element) { GenericJavaVirtualJoinTable.this.addSpecifiedInverseJoinColumn(index, element); } public void removeContextElement(JavaVirtualJoinColumn element) { @@ -204,30 +216,30 @@ public class GenericJavaVirtualJoinTable return (JavaVirtualJoinTableRelationshipStrategy) super.getParent(); } - protected JavaVirtualJoinTableRelationshipStrategy getJoinStrategy() { + protected JavaVirtualJoinTableRelationshipStrategy getRelationshipStrategy() { return this.getParent(); } @Override - protected ReadOnlyJoinColumn.Owner buildJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } - protected ReadOnlyJoinColumn.Owner buildInverseJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildInverseJoinColumnOwner() { return new InverseJoinColumnOwner(); } - protected JavaVirtualJoinColumn buildInverseJoinColumn(JoinColumn joinColumn) { + protected JavaVirtualJoinColumn buildInverseJoinColumn(ReadOnlyJoinColumn joinColumn) { return this.buildJoinColumn(this.inverseJoinColumnOwner, joinColumn); } @Override protected String buildDefaultName() { - return this.getJoinStrategy().getJoinTableDefaultName(); + return this.getRelationshipStrategy().getJoinTableDefaultName(); } public RelationshipMapping getRelationshipMapping() { - return this.getJoinStrategy().getRelationship().getMapping(); + return this.getRelationshipStrategy().getRelationship().getMapping(); } public PersistentAttribute getPersistentAttribute() { @@ -235,13 +247,26 @@ public class GenericJavaVirtualJoinTable } + // ********** validation ********** + + @Override + protected void validateJoinColumns(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validateJoinColumns(messages, reporter, astRoot); + this.validateNodes(this.getInverseJoinColumns(), messages, reporter, astRoot); + } + + public boolean validatesAgainstDatabase() { + return this.getRelationshipStrategy().validatesAgainstDatabase(); + } + + // ********** join column owners ********** /** * just a little common behavior */ protected abstract class AbstractJoinColumnOwner - implements ReadOnlyJoinColumn.Owner + implements JavaReadOnlyJoinColumn.Owner { protected AbstractJoinColumnOwner() { super(); @@ -252,6 +277,34 @@ public class GenericJavaVirtualJoinTable } /** + * @see MappingTools#buildJoinColumnDefaultName(org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn, org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn.Owner) + */ + public String getDefaultColumnName() { + throw new UnsupportedOperationException(); + } + + /** + * If there is a specified table name it needs to be the same + * the default table name. The table is always the join table. + */ + public boolean tableNameIsInvalid(String tableName) { + return Tools.valuesAreDifferent(this.getDefaultTableName(), tableName); + } + + /** + * the join column can only be on the join table itself + */ + public Iterator<String> candidateTableNames() { + return EmptyIterator.instance(); + } + + public org.eclipse.jpt.jpa.db.Table resolveDbTable(String tableName) { + return Tools.valuesAreEqual(GenericJavaVirtualJoinTable.this.getName(), tableName) ? + GenericJavaVirtualJoinTable.this.getDbTable() : + null; + } + + /** * by default, the join column is, obviously, in the join table; * not sure whether it can be anywhere else... */ @@ -259,15 +312,12 @@ public class GenericJavaVirtualJoinTable return GenericJavaVirtualJoinTable.this.getName(); } - /** - * @see MappingTools#buildJoinColumnDefaultName(org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn, org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn.Owner) - */ - public String getDefaultColumnName() { - throw new UnsupportedOperationException(); + public TextRange getValidationTextRange(CompilationUnit astRoot) { + return GenericJavaVirtualJoinTable.this.getValidationTextRange(astRoot); } protected JavaVirtualRelationship getRelationship() { - return GenericJavaVirtualJoinTable.this.getJoinStrategy().getRelationship(); + return GenericJavaVirtualJoinTable.this.getRelationshipStrategy().getRelationship(); } } @@ -291,6 +341,10 @@ public class GenericJavaVirtualJoinTable return MappingTools.getTargetAttributeName(GenericJavaVirtualJoinTable.this.getRelationshipMapping()); } + public org.eclipse.jpt.jpa.db.Table getReferencedColumnDbTable() { + return this.getTypeMapping().getPrimaryDbTable(); + } + public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { return GenericJavaVirtualJoinTable.this.defaultJoinColumn == joinColumn; } @@ -298,6 +352,10 @@ public class GenericJavaVirtualJoinTable public int joinColumnsSize() { return GenericJavaVirtualJoinTable.this.joinColumnsSize(); } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return GenericJavaVirtualJoinTable.this.getRelationshipStrategy().buildJoinTableJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + } } @@ -322,6 +380,11 @@ public class GenericJavaVirtualJoinTable return (relationshipMapping == null) ? null : relationshipMapping.getName(); } + public org.eclipse.jpt.jpa.db.Table getReferencedColumnDbTable() { + Entity relationshipTarget = this.getRelationshipTarget(); + return (relationshipTarget == null) ? null : relationshipTarget.getPrimaryDbTable(); + } + public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { return GenericJavaVirtualJoinTable.this.defaultInverseJoinColumn == joinColumn; } @@ -329,5 +392,9 @@ public class GenericJavaVirtualJoinTable public int joinColumnsSize() { return GenericJavaVirtualJoinTable.this.inverseJoinColumnsSize(); } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return GenericJavaVirtualJoinTable.this.getRelationshipStrategy().buildJoinTableInverseJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaBaseColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaBaseColumnTextRangeResolver.java index 951094aed6..d1ae9869c9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaBaseColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaBaseColumnTextRangeResolver.java @@ -1,34 +1,28 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.java.JavaBaseColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; public class JavaBaseColumnTextRangeResolver - extends JavaNamedColumnTextRangeResolver + extends AbstractJavaNamedColumnTextRangeResolver<JavaReadOnlyBaseColumn> implements BaseColumnTextRangeResolver { - - public JavaBaseColumnTextRangeResolver(JavaBaseColumn column, CompilationUnit astRoot) { + public JavaBaseColumnTextRangeResolver(JavaReadOnlyBaseColumn column, CompilationUnit astRoot) { super(column, astRoot); } - @Override - protected JavaBaseColumn getColumn() { - return (JavaBaseColumn) super.getColumn(); - } public TextRange getTableTextRange() { - return this.getColumn().getTableTextRange(this.astRoot); + return this.column.getTableTextRange(this.astRoot); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaJoinColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaJoinColumnTextRangeResolver.java index e715135955..5d1f33cb37 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaJoinColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaJoinColumnTextRangeResolver.java @@ -1,38 +1,32 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; public class JavaJoinColumnTextRangeResolver - extends JavaNamedColumnTextRangeResolver + extends AbstractJavaNamedColumnTextRangeResolver<JavaReadOnlyJoinColumn> implements JoinColumnTextRangeResolver { - public JavaJoinColumnTextRangeResolver(JavaJoinColumn column, CompilationUnit astRoot) { + public JavaJoinColumnTextRangeResolver(JavaReadOnlyJoinColumn column, CompilationUnit astRoot) { super(column, astRoot); } - @Override - protected JavaJoinColumn getColumn() { - return (JavaJoinColumn) super.getColumn(); - } - public TextRange getTableTextRange() { - return this.getColumn().getTableTextRange(this.astRoot); + return this.column.getTableTextRange(this.astRoot); } public TextRange getReferencedColumnNameTextRange() { - return this.getColumn().getReferencedColumnNameTextRange(this.astRoot); + return this.column.getReferencedColumnNameTextRange(this.astRoot); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaNamedColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaNamedColumnTextRangeResolver.java index cab6e08e67..6dbf8d9884 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaNamedColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaNamedColumnTextRangeResolver.java @@ -1,37 +1,21 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; -import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; public class JavaNamedColumnTextRangeResolver - implements NamedColumnTextRangeResolver + extends AbstractJavaNamedColumnTextRangeResolver<JavaReadOnlyNamedColumn> { - protected final JavaNamedColumn javaNamedColumn; - - protected final CompilationUnit astRoot; - - public JavaNamedColumnTextRangeResolver(JavaNamedColumn javaNamedColumn, CompilationUnit astRoot) { - this.javaNamedColumn = javaNamedColumn; - this.astRoot = astRoot; - } - - protected JavaNamedColumn getColumn() { - return this.javaNamedColumn; - } - - public TextRange getNameTextRange() { - return this.javaNamedColumn.getNameTextRange(this.astRoot); + public JavaNamedColumnTextRangeResolver(JavaReadOnlyNamedColumn column, CompilationUnit astRoot) { + super(column, astRoot); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaOverrideTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaOverrideTextRangeResolver.java index 7dcd7ce470..cc39280cb8 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaOverrideTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaOverrideTextRangeResolver.java @@ -1,36 +1,31 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.java.JavaOverride; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyOverride; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; public class JavaOverrideTextRangeResolver implements OverrideTextRangeResolver { - protected final JavaOverride javaOverride; + protected final JavaReadOnlyOverride javaOverride; protected final CompilationUnit astRoot; - public JavaOverrideTextRangeResolver(JavaOverride javaOverride, CompilationUnit astRoot) { + public JavaOverrideTextRangeResolver(JavaReadOnlyOverride javaOverride, CompilationUnit astRoot) { this.javaOverride = javaOverride; this.astRoot = astRoot; } - protected JavaOverride getOverride() { - return this.javaOverride; - } - public TextRange getNameTextRange() { return this.javaOverride.getNameTextRange(this.astRoot); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaPrimaryKeyJoinColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaPrimaryKeyJoinColumnTextRangeResolver.java index 261f522f4a..5c48c75400 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaPrimaryKeyJoinColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaPrimaryKeyJoinColumnTextRangeResolver.java @@ -1,13 +1,12 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -16,7 +15,7 @@ import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; public class JavaPrimaryKeyJoinColumnTextRangeResolver - extends JavaNamedColumnTextRangeResolver + extends AbstractJavaNamedColumnTextRangeResolver<JavaPrimaryKeyJoinColumn> implements BaseJoinColumnTextRangeResolver { @@ -24,12 +23,7 @@ public class JavaPrimaryKeyJoinColumnTextRangeResolver super(column, astRoot); } - @Override - protected JavaPrimaryKeyJoinColumn getColumn() { - return (JavaPrimaryKeyJoinColumn) super.getColumn(); - } - public TextRange getReferencedColumnNameTextRange() { - return this.getColumn().getReferencedColumnNameTextRange(this.astRoot); + return this.column.getReferencedColumnNameTextRange(this.astRoot); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaTableTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaTableTextRangeResolver.java index 2f431635bb..8d42bc6983 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaTableTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/java/JavaTableTextRangeResolver.java @@ -1,45 +1,42 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.java.JavaTable; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyTable; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; public class JavaTableTextRangeResolver implements TableTextRangeResolver { - protected final JavaTable javaTable; + protected final JavaReadOnlyTable table; protected final CompilationUnit astRoot; - public JavaTableTextRangeResolver(JavaTable javaTable, CompilationUnit astRoot) { - this.javaTable = javaTable; - this.astRoot = astRoot; - } - protected JavaTable getTable() { - return this.javaTable; + public JavaTableTextRangeResolver(JavaReadOnlyTable table, CompilationUnit astRoot) { + super(); + this.table = table; + this.astRoot = astRoot; } public TextRange getNameTextRange() { - return this.javaTable.getNameTextRange(this.astRoot); + return this.table.getNameTextRange(this.astRoot); } public TextRange getCatalogTextRange() { - return this.javaTable.getCatalogTextRange(this.astRoot); + return this.table.getCatalogTextRange(this.astRoot); } public TextRange getSchemaTextRange() { - return this.javaTable.getSchemaTextRange(this.astRoot); + return this.table.getSchemaTextRange(this.astRoot); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java index f6aa8a2149..a671215769 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseColumn.java @@ -14,13 +14,14 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmBaseColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlColumn; /** * <code>orm.xml</code> column or join column */ -public abstract class AbstractOrmBaseColumn<X extends AbstractXmlColumn, O extends OrmBaseColumn.Owner> +public abstract class AbstractOrmBaseColumn<X extends AbstractXmlColumn, O extends OrmReadOnlyBaseColumn.Owner> extends AbstractOrmNamedColumn<X, O> implements OrmBaseColumn { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java index 9334507a51..3d0109dfad 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java @@ -20,11 +20,12 @@ import org.eclipse.jpt.common.utility.internal.iterators.TransformationIterator; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.Embeddable; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; @@ -92,9 +93,7 @@ public abstract class AbstractOrmBaseEmbeddedMapping<X extends AbstractXmlEmbedd return this.getContextNodeFactory().buildOrmAttributeOverrideContainer(this, this.buildAttributeOverrideContainerOwner()); } - protected OrmAttributeOverrideContainer.Owner buildAttributeOverrideContainerOwner() { - return new AttributeOverrideContainerOwner(); - } + protected abstract OrmAttributeOverrideContainer.Owner buildAttributeOverrideContainerOwner(); // ********** target embeddable ********** @@ -231,7 +230,7 @@ public abstract class AbstractOrmBaseEmbeddedMapping<X extends AbstractXmlEmbedd // ********** attribute override container owner ********* - protected class AttributeOverrideContainerOwner + protected abstract class AttributeOverrideContainerOwner implements OrmAttributeOverrideContainer.Owner { public OrmTypeMapping getTypeMapping() { @@ -243,8 +242,8 @@ public abstract class AbstractOrmBaseEmbeddedMapping<X extends AbstractXmlEmbedd } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? this.allOverridableAttributeNames_(typeMapping) : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? this.allOverridableAttributeNames_(overriddenTypeMapping) : EmptyIterator.<String>instance(); } /** @@ -252,8 +251,12 @@ public abstract class AbstractOrmBaseEmbeddedMapping<X extends AbstractXmlEmbedd * <p> * NB: Overridden in {@link GenericOrmEmbeddedIdMapping.AttributeOverrideContainerOwner} */ - protected Iterator<String> allOverridableAttributeNames_(TypeMapping typeMapping) { - return typeMapping.allOverridableAttributeNames(); + protected Iterator<String> allOverridableAttributeNames_(TypeMapping overriddenTypeMapping) { + return overriddenTypeMapping.allOverridableAttributeNames(); + } + + public Iterable<String> getJavaOverrideNames() { + return null; } public EList<XmlAttributeOverride> getXmlOverrides() { @@ -280,12 +283,12 @@ public abstract class AbstractOrmBaseEmbeddedMapping<X extends AbstractXmlEmbedd return this.getTypeMapping().getPrimaryTableName(); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); } public TextRange getValidationTextRange() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java index 60ab3a1f63..1ee7c0a032 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmBasicMapping.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -17,10 +17,10 @@ import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.jpa.core.MappingKeys; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Converter; import org.eclipse.jpt.jpa.core.context.FetchType; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmBasicMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmColumn; @@ -419,7 +419,7 @@ public abstract class AbstractOrmBasicMapping<X extends XmlBasic> this.converter.validate(messages, reporter); } - public JptValidator buildColumnValidator(NamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { - return new NamedColumnValidator(this.getPersistentAttribute(), (BaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java index 127d74b7d3..4831eebcd7 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmEntity.java @@ -9,21 +9,19 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; -import java.util.Collection; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Set; import java.util.Vector; - import org.eclipse.emf.common.util.EList; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.ClassName; import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.HashBag; import org.eclipse.jpt.common.utility.internal.NotNullFilter; import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.Tools; @@ -36,7 +34,6 @@ import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.SubIterableWrapper; import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; import org.eclipse.jpt.common.utility.internal.iterators.CompositeIterator; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; @@ -49,24 +46,26 @@ import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.DiscriminatorColumn; import org.eclipse.jpt.jpa.core.context.DiscriminatorType; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.InheritanceType; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.PersistentType; import org.eclipse.jpt.jpa.core.context.PrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.ReadOnlyPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.ReadOnlySecondaryTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.Relationship; @@ -75,25 +74,26 @@ import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaEntity; import org.eclipse.jpt.jpa.core.context.java.JavaIdClassReference; +import org.eclipse.jpt.jpa.core.context.java.JavaOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; +import org.eclipse.jpt.jpa.core.context.java.JavaTypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.orm.OrmBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmDiscriminatorColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmEntity; import org.eclipse.jpt.jpa.core.context.orm.OrmGeneratorContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmIdClassReference; -import org.eclipse.jpt.jpa.core.context.orm.OrmNamedColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentType; import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmQueryContainer; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmSecondaryTable; import org.eclipse.jpt.jpa.core.context.orm.OrmTable; -import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualSecondaryTable; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; @@ -123,7 +123,7 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.SecondaryTableValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.TableValidator; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; -import org.eclipse.jpt.jpa.core.jpa2.context.SingleRelationshipMapping2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCacheableHolder2_0; import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentType; import org.eclipse.jpt.jpa.core.resource.orm.Inheritance; @@ -160,6 +160,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> protected boolean specifiedTableIsAllowed; protected boolean tableIsUndefined; + protected final ReadOnlyTable.Owner secondaryTableOwner; protected final Vector<OrmSecondaryTable> specifiedSecondaryTables = new Vector<OrmSecondaryTable>(); protected final SpecifiedSecondaryTableContainerAdapter specifiedSecondaryTableContainerAdapter = new SpecifiedSecondaryTableContainerAdapter(); @@ -203,6 +204,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> this.specifiedName = xmlEntity.getName(); this.idClassReference = this.buildIdClassReference(); this.table = this.buildTable(); + this.secondaryTableOwner = this.buildSecondaryTableOwner(); this.initializeSpecifiedSecondaryTables(); this.primaryKeyJoinColumnOwner = this.buildPrimaryKeyJoinColumnOwner(); this.initializeSpecifiedPrimaryKeyJoinColumns(); @@ -493,9 +495,9 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } protected static class TableOwner - implements Table.Owner + implements ReadOnlyTable.Owner { - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { return new TableValidator(table, textRangeResolver); } } @@ -593,16 +595,12 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> protected void initializeSpecifiedSecondaryTables() { for (XmlSecondaryTable xmlTable : this.getXmlSecondaryTables()) { - this.specifiedSecondaryTables.add(this.buildSecondaryTable(xmlTable)); + this.specifiedSecondaryTables.add(this.buildSpecifiedSecondaryTable(xmlTable)); } } - protected OrmSecondaryTable buildSecondaryTable(XmlSecondaryTable xmlSecondaryTable) { - return this.getContextNodeFactory().buildOrmSecondaryTable(this, this.buildSecondaryTableOwner(), xmlSecondaryTable); - } - - protected Table.Owner buildSecondaryTableOwner() { - return new SecondaryTableOwner(); + protected OrmSecondaryTable buildSpecifiedSecondaryTable(XmlSecondaryTable xmlSecondaryTable) { + return this.getContextNodeFactory().buildOrmSecondaryTable(this, this.secondaryTableOwner, xmlSecondaryTable); } protected void clearSpecifiedSecondaryTables() { @@ -624,7 +622,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } protected OrmSecondaryTable addSpecifiedSecondaryTable_(int index, XmlSecondaryTable xmlSecondaryTable) { - OrmSecondaryTable secondaryTable = this.buildSecondaryTable(xmlSecondaryTable); + OrmSecondaryTable secondaryTable = this.buildSpecifiedSecondaryTable(xmlSecondaryTable); this.addItemToList(index, secondaryTable, this.specifiedSecondaryTables, SPECIFIED_SECONDARY_TABLES_LIST); return secondaryTable; } @@ -659,14 +657,6 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } } - protected static class SecondaryTableOwner - implements Table.Owner - { - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { - return new SecondaryTableValidator((SecondaryTable) table, textRangeResolver); - } - } - // ********** virtual secondary tables ********** @@ -722,7 +712,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } protected OrmVirtualSecondaryTable buildVirtualSecondaryTable(JavaSecondaryTable javaSecondaryTable) { - return this.getContextNodeFactory().buildOrmVirtualSecondaryTable(this, javaSecondaryTable); + return this.getContextNodeFactory().buildOrmVirtualSecondaryTable(this, this.secondaryTableOwner, javaSecondaryTable); } protected void removeVirtualSecondaryTable(OrmVirtualSecondaryTable secondaryTable) { @@ -799,6 +789,18 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> // the virtual secondary tables will be built during the update } + protected Table.Owner buildSecondaryTableOwner() { + return new SecondaryTableOwner(); + } + + protected static class SecondaryTableOwner + implements ReadOnlyTable.Owner + { + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return new SecondaryTableValidator((ReadOnlySecondaryTable) table, textRangeResolver); + } + } + // ********** primary key join columns ********** @@ -1335,6 +1337,21 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } + // ********** override container ********** + + protected JavaEntity getJavaOverrideContainerEntity() { + if (this.isMetadataComplete()) { + return null; + } + JavaPersistentType javaType = this.getJavaPersistentType(); + if (javaType == null) { + return null; + } + JavaTypeMapping javaTypeMapping = javaType.getMapping(); + return (javaTypeMapping instanceof JavaEntity) ? (JavaEntity) javaTypeMapping : null; + } + + // ********** attribute override container ********** public OrmAttributeOverrideContainer getAttributeOverrideContainer() { @@ -1350,7 +1367,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> return (superPersistentType == null) ? null : superPersistentType.getMapping(); } - protected Column resolveOverriddenColumnForAttributeOverride(String attributeName) { + protected ReadOnlyColumn resolveOverriddenColumnForAttributeOverride(String attributeName) { if ( ! this.isMetadataComplete()) { JavaPersistentType javaType = this.getJavaPersistentType(); if (javaType != null) { @@ -1394,7 +1411,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> return super.resolveOverriddenRelationship(attributeName); } - protected Relationship resolveOverriddenRelationshipForAssociationOverride(String attributeName) { + protected ReadOnlyRelationship resolveOverriddenRelationshipForAssociationOverride(String attributeName) { if ( ! this.isMetadataComplete()) { JavaPersistentType javaType = this.getJavaPersistentType(); if (javaType != null) { @@ -1482,7 +1499,13 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } protected boolean tableNameIsValid(String tableName) { - return this.tableIsUndefined || CollectionTools.contains(this.getAllAssociatedTableNames(), tableName); + return this.tableIsUndefined || this.tableNameIsValid_(tableName); + } + + protected boolean tableNameIsValid_(String tableName) { + return this.connectionProfileIsActive() ? + (this.resolveDbTable(tableName) != null) : + CollectionTools.contains(this.getAllAssociatedTableNames(), tableName); } @@ -1800,7 +1823,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> } protected void validateDuplicateEntityNames(List<IMessage> messages) { - HashBag<String> javaEntityNamesExclOverridden = CollectionTools.bag(this.getPersistenceUnit().javaEntityNamesExclOverridden()); + HashSet<String> javaEntityNamesExclOverridden = CollectionTools.set(this.getPersistenceUnit().javaEntityNamesExclOverridden()); Map<String, Set<String>> map = this.getPersistenceUnit().mapEntityNameToClassNames(); Set<String> classNames = map.get(this.getName()); // Check whether or not this entity name has duplicates among the orm entities defined with different classes @@ -1991,7 +2014,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> protected abstract class OverrideContainerOwner implements OrmOverrideContainer.Owner { - public OrmTypeMapping getTypeMapping() { + public AbstractOrmEntity<?> getTypeMapping() { return AbstractOrmEntity.this; } @@ -2003,15 +2026,35 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> return AbstractOrmEntity.this.getOverridableTypeMapping(); } + /** + * Use the Java overrides if appropriate, so we bring over any invalid + * overrides also. + * @see JavaOverrideContainer#getOverrideNames() + */ + public Iterable<String> getJavaOverrideNames() { + JavaEntity javaEntity = this.getJavaOverrideContainerEntity(); + return (javaEntity == null) ? null : this.getOverrideContainer(javaEntity).getOverrideNames(); + } + + /** + * Return the Java entity with the corresponding override container. + * Return <code>null</code> if not appropriate. + */ + protected JavaEntity getJavaOverrideContainerEntity() { + return AbstractOrmEntity.this.getJavaOverrideContainerEntity(); + } + + protected abstract JavaOverrideContainer getOverrideContainer(JavaEntity javaEntity); + public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? this.allOverridableNames_(typeMapping) : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? this.allOverridableNames_(overriddenTypeMapping) : EmptyIterator.<String>instance(); } /** * pre-condition: <code>typeMapping</code> is not <code>null</code> */ - protected abstract Iterator<String> allOverridableNames_(TypeMapping typeMapping); + protected abstract Iterator<String> allOverridableNames_(TypeMapping overriddenTypeMapping); public String getDefaultTableName() { return AbstractOrmEntity.this.getPrimaryTableName(); @@ -2038,64 +2081,37 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> implements OrmAttributeOverrideContainer.Owner { @Override - protected Iterator<String> allOverridableNames_(TypeMapping typeMapping) { - final Collection<String> mappedByRelationshipAttributes = CollectionTools.collection( - new TransformationIterator<SingleRelationshipMapping2_0, String>(this.getMapsIdRelationships()) { - @Override - protected String transform(SingleRelationshipMapping2_0 mapping) { - return mapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getValue(); - } - }); - return new FilteringIterator<String>(typeMapping.allOverridableAttributeNames()) { - @Override - protected boolean accept(String name) { - if (mappedByRelationshipAttributes.isEmpty()) { - return true; - } - // overridable names are (usually?) qualified with a container mapping, - // which may also be the one mapped by a relationship - int index = name.indexOf('.'); - String qualifier = (index > 0) ? name.substring(0, index) : name; - return ! mappedByRelationshipAttributes.contains(qualifier); - } - }; + protected JavaOverrideContainer getOverrideContainer(JavaEntity javaEntity) { + return javaEntity.getAttributeOverrideContainer(); } - protected Iterable<SingleRelationshipMapping2_0> getMapsIdRelationships() { - return new FilteringIterable<SingleRelationshipMapping2_0>(this.getSingleRelationshipMappings()) { + @Override + protected Iterator<String> allOverridableNames_(TypeMapping overriddenTypeMapping) { + return new FilteringIterator<String>(overriddenTypeMapping.allOverridableAttributeNames()) { @Override - protected boolean accept(SingleRelationshipMapping2_0 mapping) { - return mapping.getDerivedIdentity().usesMapsIdDerivedIdentityStrategy(); + protected boolean accept(String attributeName) { + return ! AttributeOverrideContainerOwner.this.getTypeMapping().attributeIsDerivedId(attributeName); } }; } - protected Iterable<SingleRelationshipMapping2_0> getSingleRelationshipMappings() { - return new SubIterableWrapper<AttributeMapping, SingleRelationshipMapping2_0>(this.getSingleRelationshipMappings_()); - } - - @SuppressWarnings("unchecked") - protected Iterable<AttributeMapping> getSingleRelationshipMappings_() { - return new CompositeIterable<AttributeMapping>( - this.getTypeMapping().getAllAttributeMappings(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY), - this.getTypeMapping().getAllAttributeMappings(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY) - ); - } - public EList<XmlAttributeOverride> getXmlOverrides() { return AbstractOrmEntity.this.xmlTypeMapping.getAttributeOverrides(); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AttributeOverrideValidator((AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AttributeOverrideValidator((ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AttributeOverrideColumnValidator((AttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AttributeOverrideColumnValidator((ReadOnlyAttributeOverride) override, column, textRangeResolver, new EntityTableDescriptionProvider()); } - public Column resolveOverriddenColumn(String attributeName) { - return AbstractOrmEntity.this.resolveOverriddenColumnForAttributeOverride(attributeName); + public ReadOnlyColumn resolveOverriddenColumn(String attributeName) { + JavaEntity javaEntity = this.getJavaOverrideContainerEntity(); + return (javaEntity != null) ? + javaEntity.getAttributeOverrideContainer().getOverrideColumn(attributeName) : + AbstractOrmEntity.this.resolveOverriddenColumnForAttributeOverride(attributeName); } } @@ -2104,9 +2120,14 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> protected class AssociationOverrideContainerOwner extends OverrideContainerOwner - implements OrmAssociationOverrideContainer.Owner + implements OrmAssociationOverrideContainer2_0.Owner { @Override + protected JavaOverrideContainer getOverrideContainer(JavaEntity javaEntity) { + return javaEntity.getAssociationOverrideContainer(); + } + + @Override protected Iterator<String> allOverridableNames_(TypeMapping typeMapping) { return typeMapping.allOverridableAssociationNames(); } @@ -2115,28 +2136,31 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> return AbstractOrmEntity.this.xmlTypeMapping.getAssociationOverrides(); } - public Relationship resolveOverriddenRelationship(String attributeName) { - return AbstractOrmEntity.this.resolveOverriddenRelationshipForAssociationOverride(attributeName); + public ReadOnlyRelationship resolveOverriddenRelationship(String attributeName) { + JavaEntity javaEntity = this.getJavaOverrideContainerEntity(); + return (javaEntity != null) ? + javaEntity.getAssociationOverrideContainer().getOverrideRelationship(attributeName) : + AbstractOrmEntity.this.resolveOverriddenRelationshipForAssociationOverride(attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AssociationOverrideValidator((AssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AssociationOverrideValidator((ReadOnlyAssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new MappedSuperclassOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinColumnValidator((AssociationOverride) override, (JoinColumn) column, (JoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinColumnValidator((ReadOnlyAssociationOverride) override, (ReadOnlyJoinColumn) column, (ReadOnlyJoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideJoinColumnValidator(override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideInverseJoinColumnValidator(override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildTableValidator(AssociationOverride override, Table t, TableTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinTableValidator(override, (JoinTable) t, textRangeResolver); + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable t, TableTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinTableValidator(override, (ReadOnlyJoinTable) t, textRangeResolver); } } @@ -2147,7 +2171,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> * some common behavior */ protected abstract class NamedColumnOwner - implements OrmNamedColumn.Owner + implements OrmReadOnlyNamedColumn.Owner { public TypeMapping getTypeMapping() { return AbstractOrmEntity.this; @@ -2171,7 +2195,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> protected class PrimaryKeyJoinColumnOwner extends NamedColumnOwner - implements OrmBaseJoinColumn.Owner + implements OrmReadOnlyBaseJoinColumn.Owner { public org.eclipse.jpt.jpa.db.Table getReferencedColumnDbTable() { Entity parentEntity = AbstractOrmEntity.this.getParentEntity(); @@ -2194,8 +2218,8 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> return (parentEntity == null) ? AbstractOrmEntity.this.getPrimaryKeyColumnName() : parentEntity.getPrimaryKeyColumnName(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new EntityPrimaryKeyJoinColumnValidator((BaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new EntityPrimaryKeyJoinColumnValidator((ReadOnlyBaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); } } @@ -2251,7 +2275,7 @@ public abstract class AbstractOrmEntity<X extends XmlEntity> this.isTablePerClass() ? null : DiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE; } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { return new DiscriminatorColumnValidator(column, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java index 3cf5ff56f6..d2ab3a23e4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmIdMapping.java @@ -15,14 +15,13 @@ import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.ArrayTools; -import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.jpa.core.MappingKeys; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Converter; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmColumnMapping; @@ -36,7 +35,6 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmXmlContextNodeFactory; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; -import org.eclipse.jpt.jpa.core.internal.context.TypeMappingTools; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.NamedColumnValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.NullOrmConverter; @@ -70,8 +68,8 @@ public abstract class AbstractOrmIdMapping<X extends XmlId> protected OrmConverter converter; // never null - /* 2.0 feature - a relationship may map this ID */ - protected boolean mappedByRelationship; + /* JPA 2.0 - the embedded id may be derived from a relationship */ + protected boolean derived; protected static final OrmConverter.Adapter[] CONVERTER_ADAPTER_ARRAY = new OrmConverter.Adapter[] { @@ -109,7 +107,7 @@ public abstract class AbstractOrmIdMapping<X extends XmlId> this.generatedValue.update(); } this.converter.update(); - this.setMappedByRelationship(this.buildMappedByRelationship()); + this.setDerived(this.buildDerived()); } @@ -293,28 +291,24 @@ public abstract class AbstractOrmIdMapping<X extends XmlId> } - // ********** mapped by relationship ********** + // ********** derived ********** - public boolean isMappedByRelationship() { - return this.mappedByRelationship; + public boolean isDerived() { + return this.derived; } - protected void setMappedByRelationship(boolean value) { - boolean old = this.mappedByRelationship; - this.mappedByRelationship = value; - this.firePropertyChanged(MAPPED_BY_RELATIONSHIP_PROPERTY, old, value); + protected void setDerived(boolean derived) { + boolean old = this.derived; + this.derived = derived; + this.firePropertyChanged(DERIVED_PROPERTY, old, derived); } - protected boolean buildMappedByRelationship() { - return this.isJpa2_0Compatible() && this.buildMappedByRelationship_(); + protected boolean buildDerived() { + return this.isJpa2_0Compatible() && this.buildDerived_(); } - protected boolean buildMappedByRelationship_() { - return CollectionTools.contains(this.getMappedByRelationshipAttributeNames(), this.getName()); - } - - protected Iterable<String> getMappedByRelationshipAttributeNames() { - return TypeMappingTools.getMappedByRelationshipAttributeNames(this.getTypeMapping()); + protected boolean buildDerived_() { + return this.getTypeMapping().attributeIsDerivedId(this.name); } @@ -360,11 +354,11 @@ public abstract class AbstractOrmIdMapping<X extends XmlId> // ********** OrmColumn.Owner implementation ********** public String getDefaultColumnName() { - return (this.mappedByRelationship && ! this.isColumnSpecified()) ? null : this.name; + return (this.derived && ! this.isColumnSpecified()) ? null : this.name; } public String getDefaultTableName() { - return (this.mappedByRelationship && ! this.isColumnSpecified()) ? null : this.getTypeMapping().getPrimaryTableName(); + return (this.derived && ! this.isColumnSpecified()) ? null : this.getTypeMapping().getPrimaryTableName(); } public Table resolveDbTable(String tableName) { @@ -456,15 +450,15 @@ public abstract class AbstractOrmIdMapping<X extends XmlId> // the column is validated. // JPA 1.0: The column is always be validated, since the ID is never mapped by a // relationship. - if (this.isColumnSpecified() || ! this.mappedByRelationship) { + if (this.isColumnSpecified() || ! this.derived) { this.column.validate(messages, reporter); } // JPA 2.0: If the column is specified and the ID is mapped by a relationship, // we have an error. // JPA 1.0: The ID cannot be mapped by a relationship. - if (this.isColumnSpecified() && this.mappedByRelationship) { - messages.add(this.buildMappedByRelationshipAndColumnSpecifiedMessage()); + if (this.isColumnSpecified() && this.derived) { + messages.add(this.buildColumnSpecifiedAndDerivedMessage()); } if (this.generatedValue != null) { @@ -474,7 +468,7 @@ public abstract class AbstractOrmIdMapping<X extends XmlId> this.converter.validate(messages, reporter); } - protected IMessage buildMappedByRelationshipAndColumnSpecifiedMessage() { + protected IMessage buildColumnSpecifiedAndDerivedMessage() { return this.buildMessage( JpaValidationMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED, EMPTY_STRING_ARRAY, @@ -500,7 +494,7 @@ public abstract class AbstractOrmIdMapping<X extends XmlId> return JpaValidationDescriptionMessages.ATTRIBUTE_DESC; } - public JptValidator buildColumnValidator(NamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { - return new NamedColumnValidator(this.getPersistentAttribute(), (BaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java index 80c03483f2..64532a0496 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinColumnRelationshipStrategy.java @@ -28,6 +28,7 @@ import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; import org.eclipse.jpt.jpa.core.resource.orm.XmlJoinColumn; @@ -42,7 +43,7 @@ public abstract class AbstractOrmJoinColumnRelationshipStrategy { protected final Vector<OrmJoinColumn> specifiedJoinColumns = new Vector<OrmJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter; - protected final OrmJoinColumn.Owner joinColumnOwner; + protected final OrmReadOnlyJoinColumn.Owner joinColumnOwner; protected OrmJoinColumn defaultJoinColumn; @@ -207,7 +208,7 @@ public abstract class AbstractOrmJoinColumnRelationshipStrategy } } - protected abstract OrmJoinColumn.Owner buildJoinColumnOwner(); + protected abstract OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner(); // ********** default join column ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java index 922e5bcd64..a84fd271ba 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmJoinTableRelationshipStrategy.java @@ -13,8 +13,8 @@ import java.util.List; import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTable; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; @@ -28,7 +28,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public abstract class AbstractOrmJoinTableRelationshipStrategy extends AbstractOrmXmlContextNode - implements OrmJoinTableRelationshipStrategy, Table.Owner + implements OrmJoinTableRelationshipStrategy, ReadOnlyTable.Owner { protected OrmJoinTable joinTable; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappingRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappingRelationship.java index 0095c229ff..b0387bc002 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappingRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMappingRelationship.java @@ -19,7 +19,7 @@ import org.eclipse.jpt.jpa.core.context.RelationshipStrategy; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmMappingRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlRelationshipMapping; /** @@ -31,7 +31,7 @@ public abstract class AbstractOrmMappingRelationship<M extends OrmRelationshipMa extends AbstractOrmXmlContextNode implements OrmMappingRelationship { - protected OrmRelationshipStrategy strategy; + protected OrmMappingRelationshipStrategy2_0 strategy; protected AbstractOrmMappingRelationship(M parent) { @@ -50,17 +50,17 @@ public abstract class AbstractOrmMappingRelationship<M extends OrmRelationshipMa // ********** strategy ********** - public OrmRelationshipStrategy getStrategy() { + public OrmMappingRelationshipStrategy2_0 getStrategy() { return this.strategy; } - protected void setStrategy(OrmRelationshipStrategy strategy) { + protected void setStrategy(OrmMappingRelationshipStrategy2_0 strategy) { RelationshipStrategy old = this.strategy; this.strategy = strategy; this.firePropertyChanged(STRATEGY_PROPERTY, old, strategy); } - protected abstract OrmRelationshipStrategy buildStrategy(); + protected abstract OrmMappingRelationshipStrategy2_0 buildStrategy(); /** * This is called by subclasses when the various supported strategies are diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java index d16d0c7f01..1f2dbc3b9b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmMultiRelationshipMapping.java @@ -22,17 +22,17 @@ import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementIterable; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.AttributeMapping; -import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.Embeddable; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.FetchType; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; import org.eclipse.jpt.jpa.core.context.PersistentType; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; @@ -747,8 +747,8 @@ public abstract class AbstractOrmMultiRelationshipMapping<X extends AbstractXmlM AbstractOrmMultiRelationshipMapping.this.removeXmlMapKeyColumn(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new MapKeyColumnValidator(this.getPersistentAttribute(), (BaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new MapKeyColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); } } @@ -764,14 +764,18 @@ public abstract class AbstractOrmMultiRelationshipMapping<X extends AbstractXmlM } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? typeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? overriddenTypeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); } protected JavaAttributeOverride getSpecifiedJavaAttributeOverrideNamed(String attributeName) { return AbstractOrmMultiRelationshipMapping.this.getSpecifiedJavaMapKeyAttributeOverrideNamed(attributeName); } + public Iterable<String> getJavaOverrideNames() { + return null; + } + public EList<XmlAttributeOverride> getXmlOverrides() { return AbstractOrmMultiRelationshipMapping.this.xmlAttributeMapping.getMapKeyAttributeOverrides(); } @@ -788,12 +792,12 @@ public abstract class AbstractOrmMultiRelationshipMapping<X extends AbstractXmlM return Tools.valuesAreDifferent(this.getDefaultTableName(), tableName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new RelationshipStrategyTableDescriptionProvider(this.getRelationshipStrategy())); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java index c400e098f3..303ed9a645 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011s Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -11,10 +11,11 @@ package org.eclipse.jpt.jpa.core.internal.context.orm; import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmNamedColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn; @@ -33,7 +34,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; * </ul> * <strong>NB:</strong> any subclass that directly holds its XML column must:<ul> * <li>call the "super" constructor that takes an XML column - * {@link #AbstractOrmNamedColumn(XmlContextNode, OrmNamedColumn.Owner, AbstractXmlNamedColumn)} + * {@link #AbstractOrmNamedColumn(XmlContextNode, OrmReadOnlyNamedColumn.Owner, AbstractXmlNamedColumn)} * <li>override {@link #setXmlColumn(AbstractXmlNamedColumn)} to set the XML column * so it is in place before the column's state (e.g. {@link #specifiedName}) * is initialized @@ -41,7 +42,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; * Typically, a column belonging to a list of columns will directly hold its XML * column; since the context column only exists if the XML column exists. */ -public abstract class AbstractOrmNamedColumn<X extends AbstractXmlNamedColumn, O extends OrmNamedColumn.Owner> +public abstract class AbstractOrmNamedColumn<X extends AbstractXmlNamedColumn, O extends OrmReadOnlyNamedColumn.Owner> extends AbstractOrmXmlContextNode implements OrmNamedColumn { @@ -260,7 +261,7 @@ public abstract class AbstractOrmNamedColumn<X extends AbstractXmlNamedColumn, O } /** - * This is used by the subclasses that implement {@link BaseJoinColumn}. + * This is used by the subclasses that implement {@link ReadOnlyBaseJoinColumn#isVirtual()}. */ public boolean isVirtual() { return false; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumnTextRangeResolver.java new file mode 100644 index 0000000000..73f81db31f --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmNamedColumnTextRangeResolver.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.internal.context.orm; + +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; + +public abstract class AbstractOrmNamedColumnTextRangeResolver<C extends OrmReadOnlyNamedColumn> + implements NamedColumnTextRangeResolver +{ + protected final C column; + + + protected AbstractOrmNamedColumnTextRangeResolver(C column) { + super(); + this.column = column; + } + + public TextRange getNameTextRange() { + return this.column.getNameTextRange(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java index 124df96c1c..31778e7022 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java @@ -206,6 +206,19 @@ public abstract class AbstractOrmTypeMapping<X extends XmlTypeMapping> this.setOverrideMetadataComplete(oldMapping.isOverrideMetadataComplete()); } + public X getXmlTypeMapping() { + return this.xmlTypeMapping; + } + + public boolean attributeIsDerivedId(String attributeName) { + return TypeMappingTools.attributeIsDerivedId(this, attributeName); + } + + @Override + public void toString(StringBuilder sb) { + sb.append(this.getPersistentType().getName()); + } + // ********** tables ********** @@ -371,18 +384,6 @@ public abstract class AbstractOrmTypeMapping<X extends XmlTypeMapping> } - // ********** misc ********** - - public X getXmlTypeMapping() { - return this.xmlTypeMapping; - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.getPersistentType().getName()); - } - - // ********** text ranges ********** public JpaStructureNode getStructureNode(int offset) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java index 3ec67591c0..7b49b8fb6f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVersionMapping.java @@ -18,9 +18,9 @@ import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.jpa.core.MappingKeys; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Converter; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmColumnMapping; @@ -324,7 +324,7 @@ public abstract class AbstractOrmVersionMapping<X extends XmlVersion> } protected void validateAttributeType(List<IMessage> messages) { - if (!ArrayTools.contains(VERSION_MAPPING_SUPPORTED_TYPES, this.getPersistentAttribute().getTypeName())) { + if (!ArrayTools.contains(SUPPORTED_TYPE_NAMES, this.getPersistentAttribute().getTypeName())) { messages.add( DefaultJpaValidationMessages.buildMessage( IMessage.NORMAL_SEVERITY, @@ -337,7 +337,7 @@ public abstract class AbstractOrmVersionMapping<X extends XmlVersion> } } - public JptValidator buildColumnValidator(NamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { - return new NamedColumnValidator(this.getPersistentAttribute(), (BaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) col, (BaseColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualBaseColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualBaseColumn.java index 96cd8a6fe7..513e186bbd 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualBaseColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualBaseColumn.java @@ -9,14 +9,17 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import java.util.Iterator; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.VirtualBaseColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; -public abstract class AbstractOrmVirtualBaseColumn<O extends ReadOnlyNamedColumn.Owner, C extends BaseColumn> +public abstract class AbstractOrmVirtualBaseColumn<O extends OrmReadOnlyBaseColumn.Owner, C extends ReadOnlyBaseColumn> extends AbstractOrmVirtualNamedColumn<O, C> - implements VirtualBaseColumn + implements VirtualBaseColumn, OrmReadOnlyBaseColumn { protected String specifiedTable; protected String defaultTable; @@ -235,4 +238,27 @@ public abstract class AbstractOrmVirtualBaseColumn<O extends ReadOnlyNamedColumn protected boolean buildDefaultUpdatable() { return DEFAULT_UPDATABLE; } + + + // ********** misc ********** + + public boolean tableNameIsInvalid() { + return this.owner.tableNameIsInvalid(this.getTable()); + } + + public Iterator<String> candidateTableNames() { + return this.owner.candidateTableNames(); + } + + + // ********** validation ********** + + public TextRange getTableTextRange() { + return this.getValidationTextRange(); + } + + @Override + protected NamedColumnTextRangeResolver buildTextRangeResolver() { + return new OrmBaseColumnTextRangeResolver(this); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualNamedColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualNamedColumn.java index a13e9d8835..bd15434ed1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualNamedColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualNamedColumn.java @@ -9,24 +9,33 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; +import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.VirtualNamedColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.jpt.jpa.db.Column; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * <code>orm.xml</code> virtual<ul> * <li>column * <li>join column + * <li>primary key join column * </ul> * <strong>NB:</strong> all state is sync'ed/updated in {@link #update()} * because <em>all</em> of its derived from the context model (i.e. none of it * is derived from the resource model). */ -public abstract class AbstractOrmVirtualNamedColumn<O extends ReadOnlyNamedColumn.Owner, C extends NamedColumn> +public abstract class AbstractOrmVirtualNamedColumn<O extends ReadOnlyNamedColumn.Owner, C extends ReadOnlyNamedColumn> extends AbstractOrmXmlContextNode - implements VirtualNamedColumn + implements VirtualNamedColumn, OrmReadOnlyNamedColumn { protected final O owner; @@ -115,12 +124,46 @@ public abstract class AbstractOrmVirtualNamedColumn<O extends ReadOnlyNamedColum } + // ********** database stuff ********** + + protected Column getDbColumn() { + Table table = this.getDbTable(); + return (table == null) ? null : table.getColumnForIdentifier(this.getName()); + } + + public Table getDbTable() { + return this.owner.resolveDbTable(this.getTable()); + } + + public boolean isResolved() { + return this.getDbColumn() != null; + } + + // ********** validation ********** + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + this.buildColumnValidator().validate(messages, reporter); + } + + protected JptValidator buildColumnValidator() { + return this.owner.buildColumnValidator(this, this.buildTextRangeResolver()); + } + + protected NamedColumnTextRangeResolver buildTextRangeResolver() { + return new OrmNamedColumnTextRangeResolver(this); + } + public TextRange getValidationTextRange() { return this.getParent().getValidationTextRange(); } + public TextRange getNameTextRange() { + return this.getValidationTextRange(); + } + // ********** misc ********** @@ -129,6 +172,13 @@ public abstract class AbstractOrmVirtualNamedColumn<O extends ReadOnlyNamedColum return (XmlContextNode) super.getParent(); } + /** + * This is used by the subclasses that implement {@link ReadOnlyBaseJoinColumn#isVirtual()}. + */ + public boolean isVirtual() { + return true; + } + @Override public void toString(StringBuilder sb) { String table = this.getTable(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualReferenceTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualReferenceTable.java index 2e366584cc..52387a012a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualReferenceTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualReferenceTable.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; +import java.util.List; import java.util.ListIterator; import java.util.Vector; import org.eclipse.jpt.common.utility.internal.CollectionTools; @@ -16,27 +17,29 @@ import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; -import org.eclipse.jpt.jpa.core.context.JoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; -import org.eclipse.jpt.jpa.core.context.ReferenceTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyReferenceTable; import org.eclipse.jpt.jpa.core.context.VirtualReferenceTable; import org.eclipse.jpt.jpa.core.context.XmlContextNode; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; -public abstract class AbstractOrmVirtualReferenceTable<T extends ReferenceTable> +public abstract class AbstractOrmVirtualReferenceTable<T extends ReadOnlyReferenceTable> extends AbstractOrmVirtualTable<T> implements VirtualReferenceTable { protected final Vector<OrmVirtualJoinColumn> specifiedJoinColumns = new Vector<OrmVirtualJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter = new SpecifiedJoinColumnContainerAdapter(); - protected final ReadOnlyJoinColumn.Owner joinColumnOwner; + protected final OrmReadOnlyJoinColumn.Owner joinColumnOwner; protected OrmVirtualJoinColumn defaultJoinColumn; - protected AbstractOrmVirtualReferenceTable(XmlContextNode parent) { - super(parent); + protected AbstractOrmVirtualReferenceTable(XmlContextNode parent, Owner owner) { + super(parent, owner); this.joinColumnOwner = this.buildJoinColumnOwner(); } @@ -92,7 +95,7 @@ public abstract class AbstractOrmVirtualReferenceTable<T extends ReferenceTable> ContextContainerTools.update(this.specifiedJoinColumnContainerAdapter); } - protected Iterable<JoinColumn> getOverriddenJoinColumns() { + protected Iterable<ReadOnlyJoinColumn> getOverriddenJoinColumns() { return CollectionTools.iterable(this.getOverriddenTable().specifiedJoinColumns()); } @@ -100,7 +103,7 @@ public abstract class AbstractOrmVirtualReferenceTable<T extends ReferenceTable> this.moveItemInList(index, joinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); } - protected OrmVirtualJoinColumn addSpecifiedJoinColumn(int index, JoinColumn joinColumn) { + protected OrmVirtualJoinColumn addSpecifiedJoinColumn(int index, ReadOnlyJoinColumn joinColumn) { OrmVirtualJoinColumn virtualJoinColumn = this.buildJoinColumn(joinColumn); this.addItemToList(index, virtualJoinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); return virtualJoinColumn; @@ -114,21 +117,21 @@ public abstract class AbstractOrmVirtualReferenceTable<T extends ReferenceTable> * specified join column container adapter */ protected class SpecifiedJoinColumnContainerAdapter - implements ContextContainerTools.Adapter<OrmVirtualJoinColumn, JoinColumn> + implements ContextContainerTools.Adapter<OrmVirtualJoinColumn, ReadOnlyJoinColumn> { public Iterable<OrmVirtualJoinColumn> getContextElements() { return AbstractOrmVirtualReferenceTable.this.getSpecifiedJoinColumns(); } - public Iterable<JoinColumn> getResourceElements() { + public Iterable<ReadOnlyJoinColumn> getResourceElements() { return AbstractOrmVirtualReferenceTable.this.getOverriddenJoinColumns(); } - public JoinColumn getResourceElement(OrmVirtualJoinColumn contextElement) { + public ReadOnlyJoinColumn getResourceElement(OrmVirtualJoinColumn contextElement) { return contextElement.getOverriddenColumn(); } public void moveContextElement(int index, OrmVirtualJoinColumn element) { AbstractOrmVirtualReferenceTable.this.moveSpecifiedJoinColumn(index, element); } - public void addContextElement(int index, JoinColumn element) { + public void addContextElement(int index, ReadOnlyJoinColumn element) { AbstractOrmVirtualReferenceTable.this.addSpecifiedJoinColumn(index, element); } public void removeContextElement(OrmVirtualJoinColumn element) { @@ -178,15 +181,15 @@ public abstract class AbstractOrmVirtualReferenceTable<T extends ReferenceTable> // ********** misc ********** - protected OrmVirtualJoinColumn buildJoinColumn(JoinColumn joinColumn) { + protected OrmVirtualJoinColumn buildJoinColumn(ReadOnlyJoinColumn joinColumn) { return this.buildJoinColumn(this.joinColumnOwner, joinColumn); } - protected OrmVirtualJoinColumn buildJoinColumn(ReadOnlyJoinColumn.Owner owner, JoinColumn joinColumn) { - return this.getContextNodeFactory().buildOrmVirtualJoinColumn(this, owner, joinColumn); + protected OrmVirtualJoinColumn buildJoinColumn(OrmReadOnlyJoinColumn.Owner columnOwner, ReadOnlyJoinColumn joinColumn) { + return this.getContextNodeFactory().buildOrmVirtualJoinColumn(this, columnOwner, joinColumn); } - protected abstract ReadOnlyJoinColumn.Owner buildJoinColumnOwner(); + protected abstract OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner(); @Override protected String buildDefaultSchema() { @@ -197,4 +200,23 @@ public abstract class AbstractOrmVirtualReferenceTable<T extends ReferenceTable> protected String buildDefaultCatalog() { return this.getContextDefaultCatalog(); } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + boolean continueValidating = this.buildTableValidator().validate(messages, reporter); + + //join column validation will handle the check for whether to validate against the database + //some validation messages are not database specific. If the database validation for the + //table fails we will stop there and not validate the join columns at all + if (continueValidating) { + this.validateJoinColumns(messages, reporter); + } + } + + protected void validateJoinColumns(List<IMessage> messages, IReporter reporter) { + this.validateNodes(this.getJoinColumns(), messages, reporter); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualTable.java index a2da665475..451233658e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmVirtualTable.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; +import java.util.List; import java.util.ListIterator; import java.util.Vector; import org.eclipse.jpt.common.core.utility.TextRange; @@ -16,20 +17,27 @@ import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.NameTools; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; -import org.eclipse.jpt.jpa.core.context.Table; -import org.eclipse.jpt.jpa.core.context.UniqueConstraint; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.VirtualTable; import org.eclipse.jpt.jpa.core.context.XmlContextNode; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyTable; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualUniqueConstraint; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.db.Catalog; import org.eclipse.jpt.jpa.db.Schema; import org.eclipse.jpt.jpa.db.SchemaContainer; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; -public abstract class AbstractOrmVirtualTable<T extends Table> +public abstract class AbstractOrmVirtualTable<T extends ReadOnlyTable> extends AbstractOrmXmlContextNode - implements VirtualTable + implements VirtualTable, OrmReadOnlyTable { + protected final Owner owner; + protected String specifiedName; protected String defaultName; @@ -43,8 +51,9 @@ public abstract class AbstractOrmVirtualTable<T extends Table> protected final UniqueConstraintContainerAdapter uniqueConstraintContainerAdapter = new UniqueConstraintContainerAdapter(); - protected AbstractOrmVirtualTable(XmlContextNode parent) { + protected AbstractOrmVirtualTable(XmlContextNode parent, Owner owner) { super(parent); + this.owner = owner; } @@ -196,7 +205,7 @@ public abstract class AbstractOrmVirtualTable<T extends Table> ContextContainerTools.update(this.uniqueConstraintContainerAdapter); } - protected Iterable<UniqueConstraint> getOverriddenUniqueConstraints() { + protected Iterable<ReadOnlyUniqueConstraint> getOverriddenUniqueConstraints() { return CollectionTools.iterable(this.getOverriddenTable().uniqueConstraints()); } @@ -204,13 +213,13 @@ public abstract class AbstractOrmVirtualTable<T extends Table> this.moveItemInList(index, constraint, this.uniqueConstraints, UNIQUE_CONSTRAINTS_LIST); } - protected OrmVirtualUniqueConstraint addUniqueConstraint(int index, UniqueConstraint uniqueConstraint) { + protected OrmVirtualUniqueConstraint addUniqueConstraint(int index, ReadOnlyUniqueConstraint uniqueConstraint) { OrmVirtualUniqueConstraint virtualConstraint = this.buildUniqueConstraint(uniqueConstraint); this.addItemToList(index, virtualConstraint, this.uniqueConstraints, UNIQUE_CONSTRAINTS_LIST); return virtualConstraint; } - protected OrmVirtualUniqueConstraint buildUniqueConstraint(UniqueConstraint uniqueConstraint) { + protected OrmVirtualUniqueConstraint buildUniqueConstraint(ReadOnlyUniqueConstraint uniqueConstraint) { return this.getContextNodeFactory().buildOrmVirtualUniqueConstraint(this, uniqueConstraint); } @@ -222,21 +231,21 @@ public abstract class AbstractOrmVirtualTable<T extends Table> * unique constraint container adapter */ protected class UniqueConstraintContainerAdapter - implements ContextContainerTools.Adapter<OrmVirtualUniqueConstraint, UniqueConstraint> + implements ContextContainerTools.Adapter<OrmVirtualUniqueConstraint, ReadOnlyUniqueConstraint> { public Iterable<OrmVirtualUniqueConstraint> getContextElements() { return AbstractOrmVirtualTable.this.getUniqueConstraints(); } - public Iterable<UniqueConstraint> getResourceElements() { + public Iterable<ReadOnlyUniqueConstraint> getResourceElements() { return AbstractOrmVirtualTable.this.getOverriddenUniqueConstraints(); } - public UniqueConstraint getResourceElement(OrmVirtualUniqueConstraint contextElement) { + public ReadOnlyUniqueConstraint getResourceElement(OrmVirtualUniqueConstraint contextElement) { return contextElement.getOverriddenUniqueConstraint(); } public void moveContextElement(int index, OrmVirtualUniqueConstraint element) { AbstractOrmVirtualTable.this.moveUniqueConstraint(index, element); } - public void addContextElement(int index, UniqueConstraint resourceElement) { + public void addContextElement(int index, ReadOnlyUniqueConstraint resourceElement) { AbstractOrmVirtualTable.this.addUniqueConstraint(index, resourceElement); } public void removeContextElement(OrmVirtualUniqueConstraint element) { @@ -257,6 +266,10 @@ public abstract class AbstractOrmVirtualTable<T extends Table> return (dbSchemaContainer == null) ? null : dbSchemaContainer.getSchemaForIdentifier(this.getSchema()); } + public boolean schemaIsResolved() { + return this.getDbSchema() != null; + } + /** * If we don't have a catalog (i.e. we don't even have a <em>default</em> catalog), * then the database probably does not support catalogs; and we need to @@ -276,7 +289,16 @@ public abstract class AbstractOrmVirtualTable<T extends Table> return (catalog == null) ? null : this.resolveDbCatalog(catalog); } - protected boolean isResolved() { + /** + * If we don't have a catalog (i.e. we don't even have a <em>default</em> + * catalog), then the database probably does not support catalogs. + */ + public boolean catalogIsResolved() { + String catalog = this.getCatalog(); + return (catalog == null) || (this.resolveDbCatalog(catalog) != null); + } + + public boolean isResolved() { return this.getDbTable() != null; } @@ -296,10 +318,36 @@ public abstract class AbstractOrmVirtualTable<T extends Table> // ********** validation ********** + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + this.buildTableValidator().validate(messages, reporter); + } + + protected JptValidator buildTableValidator() { + return this.owner.buildTableValidator(this, this.buildTextRangeResolver()); + } + + protected TableTextRangeResolver buildTextRangeResolver() { + return new OrmTableTextRangeResolver(this); + } + public TextRange getValidationTextRange() { return this.getParent().getValidationTextRange(); } + public TextRange getNameTextRange() { + return this.getValidationTextRange(); + } + + public TextRange getSchemaTextRange() { + return this.getValidationTextRange(); + } + + public TextRange getCatalogTextRange() { + return this.getValidationTextRange(); + } + // ********** misc ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java index fd4ac81334..6281f21c9b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java @@ -9,13 +9,13 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.UniqueConstraint; import org.eclipse.jpt.jpa.core.context.XmlContextNode; -import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn.Owner; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; import org.eclipse.jpt.jpa.core.context.orm.EntityMappings; @@ -24,7 +24,6 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.orm.OrmBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmBasicMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmConverter; @@ -56,6 +55,8 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmQuery; import org.eclipse.jpt.jpa.core.context.orm.OrmQueryContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmQueryHint; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.context.orm.OrmSecondaryTable; import org.eclipse.jpt.jpa.core.context.orm.OrmSequenceGenerator; @@ -208,15 +209,15 @@ public abstract class AbstractOrmXmlContextNodeFactory return new GenericOrmSecondaryTable(parent, owner, xmlSecondaryTable); } - public OrmVirtualSecondaryTable buildOrmVirtualSecondaryTable(OrmEntity parent, JavaSecondaryTable javaSecondaryTable) { - return new GenericOrmVirtualSecondaryTable(parent, javaSecondaryTable); + public OrmVirtualSecondaryTable buildOrmVirtualSecondaryTable(OrmEntity parent, ReadOnlyTable.Owner owner, JavaSecondaryTable javaSecondaryTable) { + return new GenericOrmVirtualSecondaryTable(parent, owner, javaSecondaryTable); } - public OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(XmlContextNode parent, OrmBaseJoinColumn.Owner owner, XmlPrimaryKeyJoinColumn resourcePrimaryKeyJoinColumn) { + public OrmPrimaryKeyJoinColumn buildOrmPrimaryKeyJoinColumn(XmlContextNode parent, OrmReadOnlyBaseJoinColumn.Owner owner, XmlPrimaryKeyJoinColumn resourcePrimaryKeyJoinColumn) { return new GenericOrmPrimaryKeyJoinColumn(parent, owner, resourcePrimaryKeyJoinColumn); } - public OrmVirtualPrimaryKeyJoinColumn buildOrmVirtualPrimaryKeyJoinColumn(XmlContextNode parent, Owner owner, JavaPrimaryKeyJoinColumn javaPrimaryKeyJoinColumn) { + public OrmVirtualPrimaryKeyJoinColumn buildOrmVirtualPrimaryKeyJoinColumn(XmlContextNode parent, OrmReadOnlyBaseJoinColumn.Owner owner, JavaPrimaryKeyJoinColumn javaPrimaryKeyJoinColumn) { return new GenericOrmVirtualPrimaryKeyJoinColumn(parent, owner, javaPrimaryKeyJoinColumn); } @@ -224,16 +225,16 @@ public abstract class AbstractOrmXmlContextNodeFactory return new GenericOrmJoinTable(parent, owner); } - public OrmVirtualJoinTable buildOrmVirtualJoinTable(OrmVirtualJoinTableRelationshipStrategy parent, JoinTable overriddenTable) { - return new GenericOrmVirtualJoinTable(parent, overriddenTable); + public OrmVirtualJoinTable buildOrmVirtualJoinTable(OrmVirtualJoinTableRelationshipStrategy parent, ReadOnlyTable.Owner owner, ReadOnlyJoinTable overriddenTable) { + return new GenericOrmVirtualJoinTable(parent, owner, overriddenTable); } - public OrmJoinColumn buildOrmJoinColumn(XmlContextNode parent, OrmJoinColumn.Owner owner, XmlJoinColumn xmlJoinColumn) { + public OrmJoinColumn buildOrmJoinColumn(XmlContextNode parent, OrmReadOnlyJoinColumn.Owner owner, XmlJoinColumn xmlJoinColumn) { return new GenericOrmJoinColumn(parent, owner, xmlJoinColumn); } - public OrmVirtualJoinColumn buildOrmVirtualJoinColumn(XmlContextNode parent, ReadOnlyJoinColumn.Owner owner, JoinColumn joinColumn) { - return new GenericOrmVirtualJoinColumn(parent, owner, joinColumn); + public OrmVirtualJoinColumn buildOrmVirtualJoinColumn(XmlContextNode parent, OrmReadOnlyJoinColumn.Owner owner, ReadOnlyJoinColumn overriddenColumn) { + return new GenericOrmVirtualJoinColumn(parent, owner, overriddenColumn); } public OrmAttributeOverrideContainer buildOrmAttributeOverrideContainer(XmlContextNode parent, OrmAttributeOverrideContainer.Owner owner) { @@ -364,7 +365,7 @@ public abstract class AbstractOrmXmlContextNodeFactory return new GenericOrmUniqueConstraint(parent, owner, resourceUniqueConstraint); } - public OrmVirtualUniqueConstraint buildOrmVirtualUniqueConstraint(XmlContextNode parent, UniqueConstraint overriddenUniqueConstraint) { + public OrmVirtualUniqueConstraint buildOrmVirtualUniqueConstraint(XmlContextNode parent, ReadOnlyUniqueConstraint overriddenUniqueConstraint) { return new GenericOrmVirtualUniqueConstraint(parent, overriddenUniqueConstraint); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java index e4a2fc81e0..7ada92b093 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToManyRelationship.java @@ -20,7 +20,9 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmManyToManyMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmManyToManyRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmMappedByRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingMappedByRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlManyToMany; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -29,9 +31,9 @@ public class GenericOrmManyToManyRelationship extends AbstractOrmMappingRelationship<OrmManyToManyMapping> implements OrmManyToManyRelationship { - protected final OrmMappedByRelationshipStrategy mappedByStrategy; + protected final OrmMappingMappedByRelationshipStrategy2_0 mappedByStrategy; - protected final OrmJoinTableRelationshipStrategy joinTableStrategy; + protected final OrmMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; public GenericOrmManyToManyRelationship(OrmManyToManyMapping parent) { @@ -63,7 +65,7 @@ public class GenericOrmManyToManyRelationship // ********** strategy ********** @Override - protected OrmRelationshipStrategy buildStrategy() { + protected OrmMappingRelationshipStrategy2_0 buildStrategy() { if (this.mappedByStrategy.getMappedByAttribute() != null) { return this.mappedByStrategy; } @@ -91,7 +93,7 @@ public class GenericOrmManyToManyRelationship return mapping.getKey() == MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY; } - protected OrmMappedByRelationshipStrategy buildMappedByStrategy() { + protected OrmMappingMappedByRelationshipStrategy2_0 buildMappedByStrategy() { return new GenericOrmMappedByRelationshipStrategy(this); } @@ -116,7 +118,7 @@ public class GenericOrmManyToManyRelationship return this.mappedByStrategy.getMappedByAttribute() == null; } - protected OrmJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected OrmMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return new GenericOrmMappingJoinTableRelationshipStrategy(this); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java index 39a61109b0..5379388ee0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmManyToOneRelationship.java @@ -17,8 +17,10 @@ import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmManyToOneMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmManyToOneRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlManyToOne; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -27,10 +29,10 @@ public class GenericOrmManyToOneRelationship extends AbstractOrmMappingRelationship<OrmManyToOneMapping> implements OrmManyToOneRelationship2_0 { - protected final OrmJoinColumnRelationshipStrategy joinColumnStrategy; + protected final OrmMappingJoinColumnRelationshipStrategy2_0 joinColumnStrategy; // JPA 2.0 - protected final OrmJoinTableRelationshipStrategy joinTableStrategy; + protected final OrmMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; public GenericOrmManyToOneRelationship(OrmManyToOneMapping parent) { @@ -62,7 +64,7 @@ public class GenericOrmManyToOneRelationship // ********** strategy ********** @Override - protected OrmRelationshipStrategy buildStrategy() { + protected OrmMappingRelationshipStrategy2_0 buildStrategy() { if (this.isJpa2_0Compatible()) { if (this.joinTableStrategy.getJoinTable() != null){ return this.joinTableStrategy; @@ -92,7 +94,7 @@ public class GenericOrmManyToOneRelationship return false; } - protected OrmJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected OrmMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return this.isJpa2_0Compatible() ? new GenericOrmMappingJoinTableRelationshipStrategy(this) : new NullOrmJoinTableRelationshipStrategy(this); @@ -121,7 +123,7 @@ public class GenericOrmManyToOneRelationship return this.joinTableStrategy.getJoinTable() == null; } - protected OrmJoinColumnRelationshipStrategy buildJoinColumnStrategy() { + protected OrmMappingJoinColumnRelationshipStrategy2_0 buildJoinColumnStrategy() { return new GenericOrmMappingJoinColumnRelationshipStrategy(this); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java index b7e8c4ba8c..9443c3f0cc 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappedByRelationshipStrategy.java @@ -18,12 +18,14 @@ import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.MappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmMappedByRelationship; -import org.eclipse.jpt.jpa.core.context.orm.OrmMappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationDescriptionMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingMappedByRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlMappedByMapping; import org.eclipse.jpt.jpa.db.Table; import org.eclipse.osgi.util.NLS; @@ -32,7 +34,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericOrmMappedByRelationshipStrategy extends AbstractOrmXmlContextNode - implements OrmMappedByRelationshipStrategy + implements OrmMappingMappedByRelationshipStrategy2_0 { protected String mappedByAttribute; @@ -134,6 +136,10 @@ public class GenericOrmMappedByRelationshipStrategy return (entity == null) ? null : entity.getName(); } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; // mapped-by strategies cannot be overridden + } + public void addStrategy() { if (this.mappedByAttribute == null) { this.setMappedByAttribute(""); //$NON-NLS-1$ diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinColumnRelationshipStrategy.java index 242b287424..b686e08619 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinColumnRelationshipStrategy.java @@ -12,25 +12,28 @@ package org.eclipse.jpt.jpa.core.internal.context.orm; import java.util.Iterator; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmMappingJoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn.Owner; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationDescriptionMessages; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinColumnRelationshipStrategy2_0; import org.eclipse.jpt.jpa.db.Table; public class GenericOrmMappingJoinColumnRelationshipStrategy extends AbstractOrmJoinColumnRelationshipStrategy + implements OrmMappingJoinColumnRelationshipStrategy2_0 { protected final boolean targetForeignKey; @@ -49,7 +52,7 @@ public class GenericOrmMappingJoinColumnRelationshipStrategy @Override - protected Owner buildJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -80,6 +83,10 @@ public class GenericOrmMappingJoinColumnRelationshipStrategy return this.targetForeignKey; } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return overrideRelationship.getJoinColumnStrategy(); + } + // ********** validation ********** @@ -95,7 +102,7 @@ public class GenericOrmMappingJoinColumnRelationshipStrategy // ********** join column owner ********** protected class JoinColumnOwner - implements OrmJoinColumn.Owner + implements OrmReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -157,8 +164,8 @@ public class GenericOrmMappingJoinColumnRelationshipStrategy return GenericOrmMappingJoinColumnRelationshipStrategy.this.getValidationTextRange(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new JoinColumnValidator(this.getPersistentAttribute(), (JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new JoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinTableRelationshipStrategy.java index dc2597f119..38e575d0c0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmMappingJoinTableRelationshipStrategy.java @@ -10,10 +10,11 @@ package org.eclipse.jpt.jpa.core.internal.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; -import org.eclipse.jpt.jpa.core.context.Table; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.orm.OrmMappingJoinTableRelationship; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; @@ -22,9 +23,12 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.InverseJoinColumnValidator import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableValidator; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinTableRelationshipStrategy2_0; public class GenericOrmMappingJoinTableRelationshipStrategy extends AbstractOrmJoinTableRelationshipStrategy + implements OrmMappingJoinTableRelationshipStrategy2_0 { public GenericOrmMappingJoinTableRelationshipStrategy(OrmMappingJoinTableRelationship parent) { super(parent); @@ -35,6 +39,10 @@ public class GenericOrmMappingJoinTableRelationshipStrategy return this.getJpaPlatformVariation().isJoinTableOverridable(); } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return overrideRelationship.getJoinTableStrategy(); + } + // ********** validation ********** @@ -50,15 +58,15 @@ public class GenericOrmMappingJoinTableRelationshipStrategy return getRelationshipMapping().getPersistentAttribute(); } - public JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new JoinColumnValidator(this.getPersistentAttribute(), column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new InverseJoinColumnValidator(this.getPersistentAttribute(), column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { - return new JoinTableValidator(this.getPersistentAttribute(), (JoinTable) table, textRangeResolver); + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return new JoinTableValidator(this.getPersistentAttribute(), (ReadOnlyJoinTable) table, textRangeResolver); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java index 674c6bb988..6331704dc9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToManyRelationship.java @@ -21,8 +21,11 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmMappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmOneToManyMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.NullOrmJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingMappedByRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmOneToManyRelationship2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlOneToMany; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -32,13 +35,13 @@ public class GenericOrmOneToManyRelationship extends AbstractOrmMappingRelationship<OrmOneToManyMapping> implements OrmOneToManyRelationship2_0 { - protected final OrmMappedByRelationshipStrategy mappedByStrategy; + protected final OrmMappingMappedByRelationshipStrategy2_0 mappedByStrategy; - protected final OrmJoinTableRelationshipStrategy joinTableStrategy; + protected final OrmMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; // JPA 2.0 or EclipseLink protected final boolean supportsJoinColumnStrategy; - protected final OrmJoinColumnRelationshipStrategy joinColumnStrategy; + protected final OrmMappingJoinColumnRelationshipStrategy2_0 joinColumnStrategy; public GenericOrmOneToManyRelationship(OrmOneToManyMapping parent, boolean supportsJoinColumnStrategy) { @@ -76,7 +79,7 @@ public class GenericOrmOneToManyRelationship // ********** strategy ********** @Override - protected OrmRelationshipStrategy buildStrategy() { + protected OrmMappingRelationshipStrategy2_0 buildStrategy() { if (this.mappedByStrategy.getMappedByAttribute() != null) { return this.mappedByStrategy; } @@ -117,7 +120,7 @@ public class GenericOrmOneToManyRelationship return false; } - protected OrmMappedByRelationshipStrategy buildMappedByStrategy() { + protected OrmMappingMappedByRelationshipStrategy2_0 buildMappedByStrategy() { return new GenericOrmMappedByRelationshipStrategy(this); } @@ -144,7 +147,7 @@ public class GenericOrmOneToManyRelationship ! this.joinColumnStrategy.hasSpecifiedJoinColumns(); } - protected OrmJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected OrmMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return new GenericOrmMappingJoinTableRelationshipStrategy(this); } @@ -170,7 +173,7 @@ public class GenericOrmOneToManyRelationship return false; } - protected OrmJoinColumnRelationshipStrategy buildJoinColumnStrategy() { + protected OrmMappingJoinColumnRelationshipStrategy2_0 buildJoinColumnStrategy() { return this.supportsJoinColumnStrategy ? new GenericOrmMappingJoinColumnRelationshipStrategy(this, true) : // true = target foreign key new NullOrmJoinColumnRelationshipStrategy(this); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java index 1f7fbbd2cb..3863f7e8f3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOneToOneRelationship.java @@ -22,7 +22,11 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmMappedByRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmOneToOneMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumnRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingMappedByRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmOneToOneRelationship2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlOneToOne; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -32,14 +36,14 @@ public class GenericOrmOneToOneRelationship extends AbstractOrmMappingRelationship<OrmOneToOneMapping> implements OrmOneToOneRelationship2_0 { - protected final OrmMappedByRelationshipStrategy mappedByStrategy; + protected final OrmMappingMappedByRelationshipStrategy2_0 mappedByStrategy; - protected final OrmPrimaryKeyJoinColumnRelationshipStrategy primaryKeyJoinColumnStrategy; + protected final OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 primaryKeyJoinColumnStrategy; // JPA 2.0 - protected final OrmJoinTableRelationshipStrategy joinTableStrategy; + protected final OrmMappingJoinTableRelationshipStrategy2_0 joinTableStrategy; - protected final OrmJoinColumnRelationshipStrategy joinColumnStrategy; + protected final OrmMappingJoinColumnRelationshipStrategy2_0 joinColumnStrategy; public GenericOrmOneToOneRelationship(OrmOneToOneMapping parent) { @@ -77,7 +81,7 @@ public class GenericOrmOneToOneRelationship // ********** strategy ********** @Override - protected OrmRelationshipStrategy buildStrategy() { + protected OrmMappingRelationshipStrategy2_0 buildStrategy() { if (this.mappedByStrategy.getMappedByAttribute() != null) { return this.mappedByStrategy; } @@ -115,7 +119,7 @@ public class GenericOrmOneToOneRelationship return mapping.getKey() == MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY; } - protected OrmMappedByRelationshipStrategy buildMappedByStrategy() { + protected OrmMappingMappedByRelationshipStrategy2_0 buildMappedByStrategy() { return new GenericOrmMappedByRelationshipStrategy(this); } @@ -138,7 +142,7 @@ public class GenericOrmOneToOneRelationship this.updateStrategy(); } - protected OrmPrimaryKeyJoinColumnRelationshipStrategy buildPrimaryKeyJoinColumnStrategy() { + protected OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 buildPrimaryKeyJoinColumnStrategy() { return new GenericOrmPrimaryKeyJoinColumnRelationshipStrategy(this); } @@ -165,7 +169,7 @@ public class GenericOrmOneToOneRelationship return false; } - protected OrmJoinTableRelationshipStrategy buildJoinTableStrategy() { + protected OrmMappingJoinTableRelationshipStrategy2_0 buildJoinTableStrategy() { return this.isJpa2_0Compatible() ? new GenericOrmMappingJoinTableRelationshipStrategy(this) : new NullOrmJoinTableRelationshipStrategy(this); @@ -197,7 +201,7 @@ public class GenericOrmOneToOneRelationship (this.joinTableStrategy.getJoinTable() == null); } - protected OrmJoinColumnRelationshipStrategy buildJoinColumnStrategy() { + protected OrmMappingJoinColumnRelationshipStrategy2_0 buildJoinColumnStrategy() { return new GenericOrmMappingJoinColumnRelationshipStrategy(this); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOverrideJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOverrideJoinColumnRelationshipStrategy.java index f6f28b8520..937fbcb0b0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOverrideJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmOverrideJoinColumnRelationshipStrategy.java @@ -11,18 +11,15 @@ package org.eclipse.jpt.jpa.core.internal.context.orm; import java.util.Iterator; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverride; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideRelationship; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn.Owner; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; @@ -36,7 +33,7 @@ public class GenericOrmOverrideJoinColumnRelationshipStrategy } @Override - protected Owner buildJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -49,12 +46,12 @@ public class GenericOrmOverrideJoinColumnRelationshipStrategy public TypeMapping getRelationshipSource() { return this.isTargetForeignKey() ? this.getRelationshipMapping().getResolvedTargetEntity() : - this.getAssociationOverrideContainer().getTypeMapping(); + this.getRelationship().getTypeMapping(); } public TypeMapping getRelationshipTarget() { return this.isTargetForeignKey() ? - this.getAssociationOverrideContainer().getTypeMapping() : + this.getRelationship().getTypeMapping() : this.getRelationshipMappingTargetEntity(); } @@ -70,39 +67,39 @@ public class GenericOrmOverrideJoinColumnRelationshipStrategy @Override public RelationshipMapping getRelationshipMapping() { - return this.getAssociationOverride().getMapping(); + return this.getRelationship().getMapping(); } protected String getAttributeName() { - return this.getAssociationOverride().getName(); + return this.getRelationship().getAttributeName(); } @Override public String getTableName() { return this.isTargetForeignKey() ? super.getTableName() : - this.getAssociationOverrideContainer().getDefaultTableName(); + this.getRelationship().getDefaultTableName(); } @Override public Table resolveDbTable(String tableName) { return this.isTargetForeignKey() ? super.resolveDbTable(tableName) : - this.getAssociationOverrideContainer().resolveDbTable(tableName); + this.getRelationship().resolveDbTable(tableName); } @Override public boolean tableNameIsInvalid(String tableName) { return this.isTargetForeignKey() ? super.tableNameIsInvalid(tableName) : - this.getAssociationOverrideContainer().tableNameIsInvalid(tableName); + this.getRelationship().tableNameIsInvalid(tableName); } @Override public Iterator<String> candidateTableNames() { return this.isTargetForeignKey() ? super.candidateTableNames() : - this.getAssociationOverrideContainer().candidateTableNames(); + this.getRelationship().candidateTableNames(); } public String getColumnTableNotValidDescription() { @@ -113,14 +110,6 @@ public class GenericOrmOverrideJoinColumnRelationshipStrategy return false; } - protected OrmAssociationOverride getAssociationOverride() { - return this.getRelationship().getAssociationOverride(); - } - - protected AssociationOverrideContainer getAssociationOverrideContainer() { - return this.getAssociationOverride().getContainer(); - } - @Override public OrmOverrideRelationship getRelationship() { return (OrmOverrideRelationship) super.getRelationship(); @@ -134,7 +123,7 @@ public class GenericOrmOverrideJoinColumnRelationshipStrategy // ********** join column owner ********** protected class JoinColumnOwner - implements OrmJoinColumn.Owner + implements OrmReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -194,16 +183,8 @@ public class GenericOrmOverrideJoinColumnRelationshipStrategy return GenericOrmOverrideJoinColumnRelationshipStrategy.this.getValidationTextRange(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return this.getAssociationOverrideContainer().buildColumnValidator(this.getAssociationOverride(), (BaseColumn) column, this, (BaseColumnTextRangeResolver) textRangeResolver); - } - - protected OrmAssociationOverride getAssociationOverride() { - return GenericOrmOverrideJoinColumnRelationshipStrategy.this.getAssociationOverride(); - } - - protected AssociationOverrideContainer getAssociationOverrideContainer() { - return GenericOrmOverrideJoinColumnRelationshipStrategy.this.getAssociationOverrideContainer(); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return GenericOrmOverrideJoinColumnRelationshipStrategy.this.getRelationship().buildColumnValidator((ReadOnlyBaseColumn) column, this, (BaseColumnTextRangeResolver) textRangeResolver); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java index 0aed2f60db..62b5d863f7 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.java @@ -17,24 +17,25 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.PrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.jpa1.context.OneToOnePrimaryKeyJoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationDescriptionMessages; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; import org.eclipse.jpt.jpa.core.resource.orm.XmlPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.resource.orm.XmlPrimaryKeyJoinColumnContainer; @@ -44,11 +45,11 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericOrmPrimaryKeyJoinColumnRelationshipStrategy extends AbstractOrmXmlContextNode - implements OrmPrimaryKeyJoinColumnRelationshipStrategy + implements OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 { protected final Vector<OrmPrimaryKeyJoinColumn> primaryKeyJoinColumns = new Vector<OrmPrimaryKeyJoinColumn>(); protected final PrimaryKeyJoinColumnContainerAdapter primaryKeyJoinColumnContainerAdapter; - protected final OrmJoinColumn.Owner primaryKeyJoinColumnOwner; + protected final OrmReadOnlyJoinColumn.Owner primaryKeyJoinColumnOwner; public GenericOrmPrimaryKeyJoinColumnRelationshipStrategy(OrmPrimaryKeyJoinColumnRelationship parent) { @@ -188,7 +189,7 @@ public class GenericOrmPrimaryKeyJoinColumnRelationshipStrategy } } - protected OrmJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { return new PrimaryKeyJoinColumnOwner(); } @@ -236,6 +237,10 @@ public class GenericOrmPrimaryKeyJoinColumnRelationshipStrategy return this.getRelationshipMapping().getTypeMapping(); } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; // pk join column strategies cannot be overridden + } + public void addStrategy() { if (this.primaryKeyJoinColumns.size() == 0) { this.addPrimaryKeyJoinColumn(); @@ -271,7 +276,7 @@ public class GenericOrmPrimaryKeyJoinColumnRelationshipStrategy // ********** join column owner ********** protected class PrimaryKeyJoinColumnOwner - implements OrmJoinColumn.Owner + implements OrmReadOnlyJoinColumn.Owner { protected PrimaryKeyJoinColumnOwner() { super(); @@ -333,8 +338,8 @@ public class GenericOrmPrimaryKeyJoinColumnRelationshipStrategy return GenericOrmPrimaryKeyJoinColumnRelationshipStrategy.this.getValidationTextRange(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new OneToOnePrimaryKeyJoinColumnValidator(this.getPersistentAttribute(), (BaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new OneToOnePrimaryKeyJoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); } protected RelationshipMapping getRelationshipMapping() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualJoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualJoinTable.java index c93dd749e9..d4bcbdaca6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualJoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualJoinTable.java @@ -9,46 +9,57 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; +import java.util.Iterator; +import java.util.List; import java.util.ListIterator; import java.util.Vector; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; +import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinTable; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualRelationship; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * <code>orm.xml</code> virtual join table */ public class GenericOrmVirtualJoinTable - extends AbstractOrmVirtualReferenceTable<JoinTable> + extends AbstractOrmVirtualReferenceTable<ReadOnlyJoinTable> implements OrmVirtualJoinTable { - protected final JoinTable overriddenTable; + protected final ReadOnlyJoinTable overriddenTable; protected final Vector<OrmVirtualJoinColumn> specifiedInverseJoinColumns = new Vector<OrmVirtualJoinColumn>(); protected final SpecifiedInverseJoinColumnContainerAdapter specifiedInverseJoinColumnContainerAdapter = new SpecifiedInverseJoinColumnContainerAdapter(); - protected final ReadOnlyJoinColumn.Owner inverseJoinColumnOwner; + protected final OrmReadOnlyJoinColumn.Owner inverseJoinColumnOwner; protected OrmVirtualJoinColumn defaultInverseJoinColumn; - public GenericOrmVirtualJoinTable(OrmVirtualJoinTableRelationshipStrategy parent, JoinTable overriddenTable) { - super(parent); + public GenericOrmVirtualJoinTable(OrmVirtualJoinTableRelationshipStrategy parent, Owner owner, ReadOnlyJoinTable overriddenTable) { + super(parent, owner); this.overriddenTable = overriddenTable; this.inverseJoinColumnOwner = this.buildInverseJoinColumnOwner(); } @@ -67,7 +78,7 @@ public class GenericOrmVirtualJoinTable // ********** table ********** @Override - public JoinTable getOverriddenTable() { + public ReadOnlyJoinTable getOverriddenTable() { return this.overriddenTable; } @@ -113,7 +124,7 @@ public class GenericOrmVirtualJoinTable ContextContainerTools.update(this.specifiedInverseJoinColumnContainerAdapter); } - protected Iterable<JoinColumn> getOverriddenInverseJoinColumns() { + protected Iterable<ReadOnlyJoinColumn> getOverriddenInverseJoinColumns() { return CollectionTools.iterable(this.getOverriddenTable().specifiedInverseJoinColumns()); } @@ -121,7 +132,7 @@ public class GenericOrmVirtualJoinTable this.moveItemInList(index, joinColumn, this.specifiedInverseJoinColumns, SPECIFIED_INVERSE_JOIN_COLUMNS_LIST); } - protected OrmVirtualJoinColumn addSpecifiedInverseJoinColumn(int index, JoinColumn joinColumn) { + protected OrmVirtualJoinColumn addSpecifiedInverseJoinColumn(int index, ReadOnlyJoinColumn joinColumn) { OrmVirtualJoinColumn virtualJoinColumn = this.buildInverseJoinColumn(joinColumn); this.addItemToList(index, virtualJoinColumn, this.specifiedInverseJoinColumns, SPECIFIED_INVERSE_JOIN_COLUMNS_LIST); return virtualJoinColumn; @@ -135,21 +146,21 @@ public class GenericOrmVirtualJoinTable * specified inverse join column container adapter */ protected class SpecifiedInverseJoinColumnContainerAdapter - implements ContextContainerTools.Adapter<OrmVirtualJoinColumn, JoinColumn> + implements ContextContainerTools.Adapter<OrmVirtualJoinColumn, ReadOnlyJoinColumn> { public Iterable<OrmVirtualJoinColumn> getContextElements() { return GenericOrmVirtualJoinTable.this.getSpecifiedInverseJoinColumns(); } - public Iterable<JoinColumn> getResourceElements() { + public Iterable<ReadOnlyJoinColumn> getResourceElements() { return GenericOrmVirtualJoinTable.this.getOverriddenInverseJoinColumns(); } - public JoinColumn getResourceElement(OrmVirtualJoinColumn contextElement) { + public ReadOnlyJoinColumn getResourceElement(OrmVirtualJoinColumn contextElement) { return contextElement.getOverriddenColumn(); } public void moveContextElement(int index, OrmVirtualJoinColumn element) { GenericOrmVirtualJoinTable.this.moveSpecifiedInverseJoinColumn(index, element); } - public void addContextElement(int index, JoinColumn element) { + public void addContextElement(int index, ReadOnlyJoinColumn element) { GenericOrmVirtualJoinTable.this.addSpecifiedInverseJoinColumn(index, element); } public void removeContextElement(OrmVirtualJoinColumn element) { @@ -204,30 +215,30 @@ public class GenericOrmVirtualJoinTable return (OrmVirtualJoinTableRelationshipStrategy) super.getParent(); } - protected OrmVirtualJoinTableRelationshipStrategy getJoinStrategy() { + protected OrmVirtualJoinTableRelationshipStrategy getRelationshipStrategy() { return this.getParent(); } @Override - protected ReadOnlyJoinColumn.Owner buildJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } - protected ReadOnlyJoinColumn.Owner buildInverseJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildInverseJoinColumnOwner() { return new InverseJoinColumnOwner(); } - protected OrmVirtualJoinColumn buildInverseJoinColumn(JoinColumn joinColumn) { + protected OrmVirtualJoinColumn buildInverseJoinColumn(ReadOnlyJoinColumn joinColumn) { return this.buildJoinColumn(this.inverseJoinColumnOwner, joinColumn); } @Override protected String buildDefaultName() { - return this.getJoinStrategy().getJoinTableDefaultName(); + return this.getRelationshipStrategy().getJoinTableDefaultName(); } public RelationshipMapping getRelationshipMapping() { - return this.getJoinStrategy().getRelationship().getMapping(); + return this.getRelationshipStrategy().getRelationship().getMapping(); } public PersistentAttribute getPersistentAttribute() { @@ -235,13 +246,26 @@ public class GenericOrmVirtualJoinTable } + // ********** validation ********** + + @Override + protected void validateJoinColumns(List<IMessage> messages, IReporter reporter) { + super.validateJoinColumns(messages, reporter); + this.validateNodes(this.getInverseJoinColumns(), messages, reporter); + } + + public boolean validatesAgainstDatabase() { + return this.getRelationshipStrategy().validatesAgainstDatabase(); + } + + // ********** join column owners ********** /** * just a little common behavior */ protected abstract class AbstractJoinColumnOwner - implements ReadOnlyJoinColumn.Owner + implements OrmReadOnlyJoinColumn.Owner { protected AbstractJoinColumnOwner() { super(); @@ -252,6 +276,34 @@ public class GenericOrmVirtualJoinTable } /** + * @see MappingTools#buildJoinColumnDefaultName(org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn, org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn.Owner) + */ + public String getDefaultColumnName() { + throw new UnsupportedOperationException(); + } + + /** + * If there is a specified table name it needs to be the same + * the default table name. The table is always the join table. + */ + public boolean tableNameIsInvalid(String tableName) { + return Tools.valuesAreDifferent(this.getDefaultTableName(), tableName); + } + + /** + * the join column can only be on the join table itself + */ + public Iterator<String> candidateTableNames() { + return EmptyIterator.instance(); + } + + public org.eclipse.jpt.jpa.db.Table resolveDbTable(String tableName) { + return Tools.valuesAreEqual(GenericOrmVirtualJoinTable.this.getName(), tableName) ? + GenericOrmVirtualJoinTable.this.getDbTable() : + null; + } + + /** * by default, the join column is, obviously, in the join table; * not sure whether it can be anywhere else... */ @@ -259,15 +311,16 @@ public class GenericOrmVirtualJoinTable return GenericOrmVirtualJoinTable.this.getName(); } - /** - * @see MappingTools#buildJoinColumnDefaultName(org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn, org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn.Owner) - */ - public String getDefaultColumnName() { - throw new UnsupportedOperationException(); + public TextRange getValidationTextRange() { + return GenericOrmVirtualJoinTable.this.getValidationTextRange(); } protected OrmVirtualRelationship getRelationship() { - return GenericOrmVirtualJoinTable.this.getJoinStrategy().getRelationship(); + return this.getRelationshipStrategy().getRelationship(); + } + + protected OrmVirtualJoinTableRelationshipStrategy getRelationshipStrategy() { + return GenericOrmVirtualJoinTable.this.getRelationshipStrategy(); } } @@ -291,6 +344,16 @@ public class GenericOrmVirtualJoinTable return MappingTools.getTargetAttributeName(GenericOrmVirtualJoinTable.this.getRelationshipMapping()); } + @Override + public org.eclipse.jpt.jpa.db.Table resolveDbTable(String tableName) { + org.eclipse.jpt.jpa.db.Table dbTable = super.resolveDbTable(tableName); + return (dbTable != null) ? dbTable : this.getTypeMapping().resolveDbTable(tableName); + } + + public org.eclipse.jpt.jpa.db.Table getReferencedColumnDbTable() { + return this.getTypeMapping().getPrimaryDbTable(); + } + public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { return GenericOrmVirtualJoinTable.this.defaultJoinColumn == joinColumn; } @@ -298,6 +361,10 @@ public class GenericOrmVirtualJoinTable public int joinColumnsSize() { return GenericOrmVirtualJoinTable.this.joinColumnsSize(); } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return this.getRelationshipStrategy().buildJoinTableJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + } } @@ -322,6 +389,21 @@ public class GenericOrmVirtualJoinTable return (relationshipMapping == null) ? null : relationshipMapping.getName(); } + @Override + public org.eclipse.jpt.jpa.db.Table resolveDbTable(String tableName) { + org.eclipse.jpt.jpa.db.Table dbTable = super.resolveDbTable(tableName); + if (dbTable != null) { + return dbTable; + } + Entity relationshipTarget = this.getRelationshipTarget(); + return (relationshipTarget == null) ? null : relationshipTarget.resolveDbTable(tableName); + } + + public org.eclipse.jpt.jpa.db.Table getReferencedColumnDbTable() { + Entity relationshipTarget = this.getRelationshipTarget(); + return (relationshipTarget == null) ? null : relationshipTarget.getPrimaryDbTable(); + } + public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { return GenericOrmVirtualJoinTable.this.defaultInverseJoinColumn == joinColumn; } @@ -329,5 +411,9 @@ public class GenericOrmVirtualJoinTable public int joinColumnsSize() { return GenericOrmVirtualJoinTable.this.inverseJoinColumnsSize(); } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return this.getRelationshipStrategy().buildJoinTableInverseJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.java index b341965c0e..17cabbf8c3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.java @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; +import java.util.Iterator; +import java.util.List; import java.util.ListIterator; import java.util.Vector; import org.eclipse.jpt.common.core.utility.TextRange; @@ -18,22 +20,28 @@ import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; +import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.JoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; -import org.eclipse.jpt.jpa.core.context.Relationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinColumn; -import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinColumnRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualOverrideRelationship; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy extends AbstractOrmXmlContextNode @@ -41,12 +49,12 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy { protected final Vector<OrmVirtualJoinColumn> specifiedJoinColumns = new Vector<OrmVirtualJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter; - protected final ReadOnlyJoinColumn.Owner joinColumnOwner; + protected final OrmReadOnlyJoinColumn.Owner joinColumnOwner; protected OrmVirtualJoinColumn defaultJoinColumn; - public GenericOrmVirtualOverrideJoinColumnRelationshipStrategy(OrmVirtualJoinColumnRelationship parent) { + public GenericOrmVirtualOverrideJoinColumnRelationshipStrategy(OrmVirtualOverrideRelationship parent) { super(parent); this.specifiedJoinColumnContainerAdapter = this.buildSpecifiedJoinColumnContainerAdapter(); this.joinColumnOwner = this.buildJoinColumnOwner(); @@ -104,10 +112,10 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy ContextContainerTools.update(this.specifiedJoinColumnContainerAdapter); } - protected Iterable<JoinColumn> getOverriddenSpecifiedJoinColumns() { - JoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); + protected Iterable<ReadOnlyJoinColumn> getOverriddenSpecifiedJoinColumns() { + ReadOnlyJoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); return (overriddenStrategy == null) ? - EmptyIterable.<JoinColumn>instance() : + EmptyIterable.<ReadOnlyJoinColumn>instance() : CollectionTools.iterable(overriddenStrategy.specifiedJoinColumns()); } @@ -115,7 +123,7 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy this.moveItemInList(index, joinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); } - protected OrmVirtualJoinColumn addSpecifiedJoinColumn(int index, JoinColumn joinColumn) { + protected OrmVirtualJoinColumn addSpecifiedJoinColumn(int index, ReadOnlyJoinColumn joinColumn) { OrmVirtualJoinColumn virtualJoinColumn = this.buildJoinColumn(joinColumn); this.addItemToList(index, virtualJoinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); return virtualJoinColumn; @@ -133,21 +141,21 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy * specified join column container adapter */ protected class SpecifiedJoinColumnContainerAdapter - implements ContextContainerTools.Adapter<OrmVirtualJoinColumn, JoinColumn> + implements ContextContainerTools.Adapter<OrmVirtualJoinColumn, ReadOnlyJoinColumn> { public Iterable<OrmVirtualJoinColumn> getContextElements() { return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.getSpecifiedJoinColumns(); } - public Iterable<JoinColumn> getResourceElements() { + public Iterable<ReadOnlyJoinColumn> getResourceElements() { return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.getOverriddenSpecifiedJoinColumns(); } - public JoinColumn getResourceElement(OrmVirtualJoinColumn contextElement) { + public ReadOnlyJoinColumn getResourceElement(OrmVirtualJoinColumn contextElement) { return contextElement.getOverriddenColumn(); } public void moveContextElement(int index, OrmVirtualJoinColumn element) { GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.moveSpecifiedJoinColumn(index, element); } - public void addContextElement(int index, JoinColumn resourceElement) { + public void addContextElement(int index, ReadOnlyJoinColumn resourceElement) { GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.addSpecifiedJoinColumn(index, resourceElement); } public void removeContextElement(OrmVirtualJoinColumn element) { @@ -155,7 +163,7 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy } } - protected ReadOnlyJoinColumn.Owner buildJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -183,7 +191,7 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy } protected void updateDefaultJoinColumn() { - JoinColumn overriddenDefaultJoinColumn = this.getOverriddenDefaultJoinColumn(); + ReadOnlyJoinColumn overriddenDefaultJoinColumn = this.getOverriddenDefaultJoinColumn(); if (overriddenDefaultJoinColumn == null) { if (this.defaultJoinColumn != null) { this.setDefaultJoinColumn(null); @@ -197,8 +205,8 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy } } - protected JoinColumn getOverriddenDefaultJoinColumn() { - JoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); + protected ReadOnlyJoinColumn getOverriddenDefaultJoinColumn() { + ReadOnlyJoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); return (overriddenStrategy == null) ? null : overriddenStrategy.getDefaultJoinColumn(); } @@ -206,25 +214,25 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy // ********** misc ********** @Override - public OrmVirtualJoinColumnRelationship getParent() { - return (OrmVirtualJoinColumnRelationship) super.getParent(); + public OrmVirtualOverrideRelationship getParent() { + return (OrmVirtualOverrideRelationship) super.getParent(); } - public OrmVirtualJoinColumnRelationship getRelationship() { + public OrmVirtualOverrideRelationship getRelationship() { return this.getParent(); } - protected JoinColumnRelationshipStrategy getOverriddenStrategy() { - JoinColumnRelationship relationship = this.getOverriddenJoinColumnRelationship(); + protected ReadOnlyJoinColumnRelationshipStrategy getOverriddenStrategy() { + ReadOnlyJoinColumnRelationship relationship = this.getOverriddenJoinColumnRelationship(); return (relationship == null) ? null : relationship.getJoinColumnStrategy(); } - protected JoinColumnRelationship getOverriddenJoinColumnRelationship() { - Relationship relationship = this.resolveOverriddenRelationship(); - return (relationship instanceof JoinColumnRelationship) ? (JoinColumnRelationship) relationship : null; + protected ReadOnlyJoinColumnRelationship getOverriddenJoinColumnRelationship() { + ReadOnlyRelationship relationship = this.resolveOverriddenRelationship(); + return (relationship instanceof ReadOnlyJoinColumnRelationship) ? (ReadOnlyJoinColumnRelationship) relationship : null; } - protected Relationship resolveOverriddenRelationship() { + protected ReadOnlyRelationship resolveOverriddenRelationship() { return this.getRelationship().resolveOverriddenRelationship(); } @@ -236,13 +244,15 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy public TypeMapping getRelationshipSource() { return this.isTargetForeignKey() ? + // relationship mapping is not null this.getRelationshipMapping().getResolvedTargetEntity() : - this.getAssociationOverrideContainer().getTypeMapping(); + this.getRelationship().getTypeMapping(); } public TypeMapping getRelationshipTarget() { return this.isTargetForeignKey() ? - this.getAssociationOverrideContainer().getTypeMapping() : + this.getRelationship().getTypeMapping() : + // relationship mapping may still be null this.getRelationshipMappingTargetEntity(); } @@ -257,26 +267,56 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy } protected RelationshipMapping getRelationshipMapping() { - return this.getAssociationOverride().getMapping(); + return this.getRelationship().getMapping(); } - protected OrmReadOnlyAssociationOverride getAssociationOverride() { - return ((OrmVirtualOverrideRelationship) this.getRelationship()).getAssociationOverride(); + public String getTableName() { + return this.isTargetForeignKey() ? + this.getTargetDefaultTableName() : + this.getRelationship().getDefaultTableName(); } - protected OrmAssociationOverrideContainer getAssociationOverrideContainer() { - return this.getAssociationOverride().getContainer(); + protected String getTargetDefaultTableName() { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping == null) ? null : typeMapping.getPrimaryTableName(); } - public String getTableName() { + protected Table resolveDbTable(String tableName) { return this.isTargetForeignKey() ? - this.getSourceTableName() : - this.getAssociationOverrideContainer().getDefaultTableName(); + this.resolveTargetDbTable(tableName) : + this.getRelationship().resolveDbTable(tableName); } - protected String getSourceTableName() { - TypeMapping typeMapping = this.getRelationshipSource(); - return (typeMapping == null) ? null : typeMapping.getPrimaryTableName(); + protected Table resolveTargetDbTable(String tableName) { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping == null) ? null : typeMapping.resolveDbTable(tableName); + } + + protected boolean tableNameIsInvalid(String tableName) { + return this.isTargetForeignKey() ? + this.targetTableNameIsInvalid(tableName) : + this.getRelationship().tableNameIsInvalid(tableName); + } + + protected boolean targetTableNameIsInvalid(String tableName) { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping != null) && typeMapping.tableNameIsInvalid(tableName); + } + + protected Table getReferencedColumnDbTable() { + TypeMapping relationshipTarget = this.getRelationshipTarget(); + return (relationshipTarget == null) ? null : relationshipTarget.getPrimaryDbTable(); + } + + protected Iterator<String> candidateTableNames() { + return this.isTargetForeignKey() ? + this.targetCandidateTableNames() : + this.getRelationship().candidateTableNames(); + } + + protected Iterator<String> targetCandidateTableNames() { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping != null) ? typeMapping.allAssociatedTableNames() : EmptyIterator.<String>instance(); } public TextRange getValidationTextRange() { @@ -284,18 +324,29 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy } protected String getAttributeName() { - return this.getAssociationOverride().getName(); + return this.getRelationship().getAttributeName(); } - protected OrmVirtualJoinColumn buildJoinColumn(JoinColumn overriddenJoinColumn) { + protected OrmVirtualJoinColumn buildJoinColumn(ReadOnlyJoinColumn overriddenJoinColumn) { return this.getContextNodeFactory().buildOrmVirtualJoinColumn(this, this.joinColumnOwner, overriddenJoinColumn); } + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + for (OrmVirtualJoinColumn joinColumn : this.getJoinColumns()) { + joinColumn.validate(messages, reporter); + } + } + + // ********** join column owner ********** protected class JoinColumnOwner - implements ReadOnlyJoinColumn.Owner + implements OrmReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -322,6 +373,22 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.getRelationshipTargetEntity(); } + public boolean tableNameIsInvalid(String tableName) { + return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.candidateTableNames(); + } + + public Table resolveDbTable(String tableName) { + return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.resolveDbTable(tableName); + } + + public Table getReferencedColumnDbTable() { + return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.getReferencedColumnDbTable(); + } + public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { return false; } @@ -329,5 +396,13 @@ public class GenericOrmVirtualOverrideJoinColumnRelationshipStrategy public int joinColumnsSize() { return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.joinColumnsSize(); } + + public TextRange getValidationTextRange() { + return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.getValidationTextRange(); + } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return GenericOrmVirtualOverrideJoinColumnRelationshipStrategy.this.getRelationship().buildColumnValidator((ReadOnlyBaseColumn) column, this, (BaseColumnTextRangeResolver) textRangeResolver); + } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualSecondaryTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualSecondaryTable.java index 8cb015eeb6..57b6634afd 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualSecondaryTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/GenericOrmVirtualSecondaryTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,8 +9,10 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; +import java.util.List; import java.util.ListIterator; import java.util.Vector; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; @@ -18,13 +20,22 @@ import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; import org.eclipse.jpt.jpa.core.context.orm.OrmEntity; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualSecondaryTable; +import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.jpa1.context.SecondaryTablePrimaryKeyJoinColumnValidator; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * <code>orm.xml</code> virtual secondary table @@ -37,13 +48,13 @@ public class GenericOrmVirtualSecondaryTable protected final Vector<OrmVirtualPrimaryKeyJoinColumn> specifiedPrimaryKeyJoinColumns = new Vector<OrmVirtualPrimaryKeyJoinColumn>(); protected final SpecifiedPrimaryKeyJoinColumnContainerAdapter specifiedPrimaryKeyJoinColumnContainerAdapter = new SpecifiedPrimaryKeyJoinColumnContainerAdapter(); - protected final ReadOnlyBaseJoinColumn.Owner primaryKeyJoinColumnOwner; + protected final OrmReadOnlyBaseJoinColumn.Owner primaryKeyJoinColumnOwner; protected OrmVirtualPrimaryKeyJoinColumn defaultPrimaryKeyJoinColumn; - public GenericOrmVirtualSecondaryTable(OrmEntity parent, JavaSecondaryTable overriddenTable) { - super(parent); + public GenericOrmVirtualSecondaryTable(OrmEntity parent, Owner owner, JavaSecondaryTable overriddenTable) { + super(parent, owner); this.overriddenTable = overriddenTable; this.primaryKeyJoinColumnOwner = this.buildPrimaryKeyJoinColumnOwner(); } @@ -204,7 +215,7 @@ public class GenericOrmVirtualSecondaryTable return true; } - protected ReadOnlyBaseJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { + protected OrmReadOnlyBaseJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { return new PrimaryKeyJoinColumnOwner(); } @@ -213,6 +224,25 @@ public class GenericOrmVirtualSecondaryTable } + // ********** validation ********** + + public boolean validatesAgainstDatabase() { + return this.connectionProfileIsActive(); + } + + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + boolean continueValidating = this.buildTableValidator().validate(messages, reporter); + + //join column validation will handle the check for whether to validate against the database + //some validation messages are not database specific. If the database validation for the + //table fails we will stop there and not validate the join columns at all + if (continueValidating) { + this.validateNodes(this.getPrimaryKeyJoinColumns(), messages, reporter); + } + } + + // ********** defaults ********** /** @@ -237,7 +267,7 @@ public class GenericOrmVirtualSecondaryTable // ********** primary key join column owner ********** protected class PrimaryKeyJoinColumnOwner - implements ReadOnlyBaseJoinColumn.Owner + implements OrmReadOnlyBaseJoinColumn.Owner { protected OrmEntity getEntity() { return GenericOrmVirtualSecondaryTable.this.getEntity(); @@ -261,12 +291,28 @@ public class GenericOrmVirtualSecondaryTable this.getEntity().getPrimaryKeyColumnName(); } - public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { - return GenericOrmVirtualSecondaryTable.this.defaultPrimaryKeyJoinColumn == joinColumn; + public Table resolveDbTable(String tableName) { + return GenericOrmVirtualSecondaryTable.this.getDbTable(); } public int joinColumnsSize() { return GenericOrmVirtualSecondaryTable.this.primaryKeyJoinColumnsSize(); } + + public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { + return GenericOrmVirtualSecondaryTable.this.defaultPrimaryKeyJoinColumn == joinColumn; + } + + public Table getReferencedColumnDbTable() { + return this.getTypeMapping().getPrimaryDbTable(); + } + + public TextRange getValidationTextRange() { + return GenericOrmVirtualSecondaryTable.this.getValidationTextRange(); + } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new SecondaryTablePrimaryKeyJoinColumnValidator(GenericOrmVirtualSecondaryTable.this, (ReadOnlyBaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); + } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/NullOrmJoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/NullOrmJoinTableRelationshipStrategy.java index 2e5b2ad2af..9902535c1d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/NullOrmJoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/NullOrmJoinTableRelationshipStrategy.java @@ -10,19 +10,21 @@ package org.eclipse.jpt.jpa.core.internal.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTable; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationship; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinTableRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlJoinTable; import org.eclipse.jpt.jpa.db.Table; public class NullOrmJoinTableRelationshipStrategy extends AbstractOrmXmlContextNode - implements OrmJoinTableRelationshipStrategy + implements OrmMappingJoinTableRelationshipStrategy2_0 { public NullOrmJoinTableRelationshipStrategy(OrmJoinTableRelationship parent) { super(parent); @@ -57,11 +59,11 @@ public class NullOrmJoinTableRelationshipStrategy return this.getRelationship().getValidationTextRange(); } - public JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { throw new UnsupportedOperationException(); } - public JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { throw new UnsupportedOperationException(); } @@ -105,6 +107,10 @@ public class NullOrmJoinTableRelationshipStrategy return null; } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; + } + public void addStrategy() { // NOP } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmBaseColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmBaseColumnTextRangeResolver.java index a26ed24f13..d5f514a9a0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmBaseColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmBaseColumnTextRangeResolver.java @@ -1,34 +1,28 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.orm.OrmBaseColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; public class OrmBaseColumnTextRangeResolver - extends OrmNamedColumnTextRangeResolver + extends AbstractOrmNamedColumnTextRangeResolver<OrmReadOnlyBaseColumn> implements BaseColumnTextRangeResolver { - public OrmBaseColumnTextRangeResolver(OrmBaseColumn column) { + public OrmBaseColumnTextRangeResolver(OrmReadOnlyBaseColumn column) { super(column); } - @Override - protected OrmBaseColumn getColumn() { - return (OrmBaseColumn) super.getColumn(); - } - public TextRange getTableTextRange() { - return this.getColumn().getTableTextRange(); + return this.column.getTableTextRange(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmJoinColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmJoinColumnTextRangeResolver.java index 94c60a0300..269baad85c 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmJoinColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmJoinColumnTextRangeResolver.java @@ -1,39 +1,32 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; -import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; public class OrmJoinColumnTextRangeResolver - extends OrmNamedColumnTextRangeResolver + extends AbstractOrmNamedColumnTextRangeResolver<OrmReadOnlyJoinColumn> implements JoinColumnTextRangeResolver { - public OrmJoinColumnTextRangeResolver(OrmJoinColumn column) { + public OrmJoinColumnTextRangeResolver(OrmReadOnlyJoinColumn column) { super(column); } - @Override - protected OrmJoinColumn getColumn() { - return (OrmJoinColumn) super.getColumn(); - } - public TextRange getTableTextRange() { - return this.getColumn().getTableTextRange(); + return this.column.getTableTextRange(); } public TextRange getReferencedColumnNameTextRange() { - return this.getColumn().getReferencedColumnNameTextRange(); + return this.column.getReferencedColumnNameTextRange(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmNamedColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmNamedColumnTextRangeResolver.java index 37a19aec80..0b1cd614c1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmNamedColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmNamedColumnTextRangeResolver.java @@ -1,33 +1,20 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.orm.OrmNamedColumn; -import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn; public class OrmNamedColumnTextRangeResolver - implements NamedColumnTextRangeResolver + extends AbstractOrmNamedColumnTextRangeResolver<OrmReadOnlyNamedColumn> { - protected final OrmNamedColumn ormNamedColumn; - - public OrmNamedColumnTextRangeResolver(OrmNamedColumn javaNamedColumn) { - this.ormNamedColumn = javaNamedColumn; - } - - protected OrmNamedColumn getColumn() { - return this.ormNamedColumn; - } - - public TextRange getNameTextRange() { - return this.ormNamedColumn.getNameTextRange(); + public OrmNamedColumnTextRangeResolver(OrmReadOnlyNamedColumn column) { + super(column); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmOverrideTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmOverrideTextRangeResolver.java index 0c1d8ee5b5..5f90af8a8d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmOverrideTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmOverrideTextRangeResolver.java @@ -1,32 +1,27 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.orm.OrmOverride; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyOverride; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; public class OrmOverrideTextRangeResolver implements OverrideTextRangeResolver { - protected final OrmOverride ormOverride; + protected final OrmReadOnlyOverride ormOverride; - public OrmOverrideTextRangeResolver(OrmOverride ormOverride) { + public OrmOverrideTextRangeResolver(OrmReadOnlyOverride ormOverride) { this.ormOverride = ormOverride; } - protected OrmOverride getOverride() { - return this.ormOverride; - } - public TextRange getNameTextRange() { return this.ormOverride.getNameTextRange(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmPrimaryKeyJoinColumnTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmPrimaryKeyJoinColumnTextRangeResolver.java index 6fdeb4b124..385aef2de5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmPrimaryKeyJoinColumnTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmPrimaryKeyJoinColumnTextRangeResolver.java @@ -1,35 +1,28 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; public class OrmPrimaryKeyJoinColumnTextRangeResolver - extends OrmNamedColumnTextRangeResolver - implements - BaseJoinColumnTextRangeResolver + extends AbstractOrmNamedColumnTextRangeResolver<OrmReadOnlyBaseJoinColumn> + implements BaseJoinColumnTextRangeResolver { - public OrmPrimaryKeyJoinColumnTextRangeResolver(OrmPrimaryKeyJoinColumn column) { + public OrmPrimaryKeyJoinColumnTextRangeResolver(OrmReadOnlyBaseJoinColumn column) { super(column); } - @Override - protected OrmPrimaryKeyJoinColumn getColumn() { - return (OrmPrimaryKeyJoinColumn) super.getColumn(); - } - public TextRange getReferencedColumnNameTextRange() { - return this.getColumn().getReferencedColumnNameTextRange(); + return this.column.getReferencedColumnNameTextRange(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmTableTextRangeResolver.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmTableTextRangeResolver.java index 3a86a729c1..62ef537690 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmTableTextRangeResolver.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/OrmTableTextRangeResolver.java @@ -1,40 +1,38 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.orm.OrmTable; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyTable; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; public class OrmTableTextRangeResolver implements TableTextRangeResolver { - protected final OrmTable ormTable; + protected final OrmReadOnlyTable table; - public OrmTableTextRangeResolver(OrmTable ormTable) { - this.ormTable = ormTable; - } - protected OrmTable getTable() { - return this.ormTable; + public OrmTableTextRangeResolver(OrmReadOnlyTable table) { + super(); + this.table = table; } public TextRange getNameTextRange() { - return this.ormTable.getNameTextRange(); + return this.table.getNameTextRange(); } public TextRange getCatalogTextRange() { - return this.ormTable.getCatalogTextRange(); + return this.table.getCatalogTextRange(); } public TextRange getSchemaTextRange() { - return this.ormTable.getSchemaTextRange(); + return this.table.getSchemaTextRange(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractJoinTableValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractJoinTableValidator.java index 58e53d7f21..56d9ae3421 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractJoinTableValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractJoinTableValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,18 +9,19 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; -public abstract class AbstractJoinTableValidator extends AbstractTableValidator +public abstract class AbstractJoinTableValidator + extends AbstractTableValidator { - protected AbstractJoinTableValidator(JoinTable table, TableTextRangeResolver textRangeResolver) { + protected AbstractJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { super(table, textRangeResolver); } - protected AbstractJoinTableValidator(PersistentAttribute persistentAttribute, JoinTable table, TableTextRangeResolver textRangeResolver) { + protected AbstractJoinTableValidator(ReadOnlyPersistentAttribute persistentAttribute, ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { super(persistentAttribute, table, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractNamedColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractNamedColumnValidator.java index 340f0ea854..6947bee1b6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractNamedColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractNamedColumnValidator.java @@ -11,9 +11,9 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.List; import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; @@ -23,19 +23,19 @@ import org.eclipse.jpt.jpa.db.Table; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; -public abstract class AbstractNamedColumnValidator<C extends NamedColumn, R extends NamedColumnTextRangeResolver> +public abstract class AbstractNamedColumnValidator<C extends ReadOnlyNamedColumn, R extends NamedColumnTextRangeResolver> implements JptValidator { - // this is null for columns defined on entities and secondary tables - protected final PersistentAttribute persistentAttribute; + /** this is <code>null</code> for columns defined on entities and secondary tables */ + protected final ReadOnlyPersistentAttribute persistentAttribute; protected final C column; protected final R textRangeResolver; protected final TableDescriptionProvider tableDescriptionProvider; - - protected final TableValidator tableValidator; + + protected final JptValidator tableValidator; protected AbstractNamedColumnValidator( @@ -52,14 +52,14 @@ public abstract class AbstractNamedColumnValidator<C extends NamedColumn, R exte } protected AbstractNamedColumnValidator( - PersistentAttribute persistentAttribute, + ReadOnlyPersistentAttribute persistentAttribute, C column, R textRangeResolver) { this(persistentAttribute, column, textRangeResolver, TableDescriptionProvider.Null.instance()); } protected AbstractNamedColumnValidator( - PersistentAttribute persistentAttribute, + ReadOnlyPersistentAttribute persistentAttribute, C column, R textRangeResolver, TableDescriptionProvider tableDescriptionProvider) { @@ -70,15 +70,15 @@ public abstract class AbstractNamedColumnValidator<C extends NamedColumn, R exte this.tableValidator = this.buildTableValidator(); } - protected TableValidator buildTableValidator() { - return TableValidator.Null.instance(); + protected JptValidator buildTableValidator() { + return JptValidator.Null.instance(); } - public boolean validate(List<IMessage> messages, IReporter reporter) { - if (this.tableValidator.tableNameIsInvalid()) { - return this.tableValidator.validate(messages, reporter); + public final boolean validate(List<IMessage> messages, IReporter reporter) { + if (this.tableValidator.validate(messages, reporter)) { + // validate the name only if the table is valid + this.validateName(messages); } - this.validateName(messages); return true; } @@ -90,7 +90,7 @@ public abstract class AbstractNamedColumnValidator<C extends NamedColumn, R exte } protected IMessage buildUnresolvedNameMessage() { - return this.columnParentIsVirtualAttribute() ? + return this.columnIsPartOfVirtualAttribute() ? this.buildVirtualAttributeUnresolvedNameMessage() : this.buildUnresolvedNameMessage(this.getUnresolvedNameMessage()); } @@ -126,42 +126,13 @@ public abstract class AbstractNamedColumnValidator<C extends NamedColumn, R exte protected abstract String getVirtualAttributeUnresolvedNameMessage(); - public boolean columnParentIsVirtualAttribute() { + protected boolean columnIsPartOfVirtualAttribute() { return (this.persistentAttribute != null) && this.persistentAttribute.isVirtual(); } - // ********** table validator ********** - - public interface TableValidator - extends JptValidator - { - boolean tableNameIsInvalid(); - - final class Null - implements TableValidator - { - private static final TableValidator INSTANCE = new Null(); - public static TableValidator instance() { - return INSTANCE; - } - // ensure single instance - private Null() { - super(); - } - public boolean validate(List<IMessage> messages, IReporter reporter) { - return true; - } - public boolean tableNameIsInvalid() { - return false; - } - @Override - public String toString() { - return StringTools.buildToStringClassName(this.getClass()); - } - } - } + // ********** table description provider ********** public interface TableDescriptionProvider { String getColumnTableDescriptionMessage(); @@ -182,39 +153,45 @@ public abstract class AbstractNamedColumnValidator<C extends NamedColumn, R exte } @Override public String toString() { - return StringTools.buildToStringClassName(this.getClass()); + return StringTools.buildSingletonToString(this); } } } + + // ********** base column table validator ********** + + /** + * This column table validator (or its subclasses) can only be used by + * a validator for a <em>base</em> column, which specifies a table. This + * includes both normal columns and join columns. + */ protected class BaseColumnTableValidator - implements TableValidator + implements JptValidator { protected BaseColumnTableValidator() { super(); } - protected BaseColumn getColumn() { - return (BaseColumn) AbstractNamedColumnValidator.this.column; + public boolean validate(List<IMessage> messages, IReporter reporter) { + if (this.getColumn().tableNameIsInvalid()) { + messages.add(this.buildTableNotValidMessage()); + return false; + } + return true; } - - protected BaseColumnTextRangeResolver getTextRangeResolver() { - return (BaseColumnTextRangeResolver) AbstractNamedColumnValidator.this.textRangeResolver; + + protected ReadOnlyBaseColumn getColumn() { + return (ReadOnlyBaseColumn) AbstractNamedColumnValidator.this.column; } - public boolean tableNameIsInvalid() { - return this.getColumn().tableNameIsInvalid(); - } - - public boolean validate(List<IMessage> messages, IReporter reporter) { - messages.add(this.buildTableNotValidMessage()); - return false; + protected IMessage buildTableNotValidMessage() { + return AbstractNamedColumnValidator.this.columnIsPartOfVirtualAttribute() ? + this.buildVirtualAttributeTableNotValidMessage() : + this.buildTableNotValidMessage_(); } - protected IMessage buildTableNotValidMessage() { - if (AbstractNamedColumnValidator.this.columnParentIsVirtualAttribute()) { - return this.buildVirtualAttributeTableNotValidMessage(); - } + protected IMessage buildTableNotValidMessage_() { return DefaultJpaValidationMessages.buildMessage( IMessage.HIGH_SEVERITY, this.getColumnTableNotValidMessage(), @@ -236,6 +213,10 @@ public abstract class AbstractNamedColumnValidator<C extends NamedColumn, R exte return AbstractNamedColumnValidator.this.tableDescriptionProvider.getColumnTableDescriptionMessage(); } + protected BaseColumnTextRangeResolver getTextRangeResolver() { + return (BaseColumnTextRangeResolver) AbstractNamedColumnValidator.this.textRangeResolver; + } + protected IMessage buildVirtualAttributeTableNotValidMessage() { return DefaultJpaValidationMessages.buildMessage( IMessage.HIGH_SEVERITY, diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPersistentAttributeValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPersistentAttributeValidator.java index 31e58001cd..b3f6f76fbb 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPersistentAttributeValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPersistentAttributeValidator.java @@ -11,7 +11,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.List; import org.eclipse.jpt.jpa.core.MappingKeys; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.PersistentAttributeTextRangeResolver; @@ -22,7 +22,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public abstract class AbstractPersistentAttributeValidator implements JptValidator { - protected PersistentAttribute persistentAttribute; + protected ReadOnlyPersistentAttribute persistentAttribute; protected JavaPersistentAttribute javaPersistentAttribute; @@ -30,7 +30,7 @@ public abstract class AbstractPersistentAttributeValidator protected AbstractPersistentAttributeValidator( - PersistentAttribute persistentAttribute, JavaPersistentAttribute javaPersistentAttribute, PersistentAttributeTextRangeResolver textRangeResolver) { + ReadOnlyPersistentAttribute persistentAttribute, JavaPersistentAttribute javaPersistentAttribute, PersistentAttributeTextRangeResolver textRangeResolver) { this.persistentAttribute = persistentAttribute; this.javaPersistentAttribute = javaPersistentAttribute; this.textRangeResolver = textRangeResolver; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java index 4c3f9fd870..093825f005 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java @@ -1,13 +1,12 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.Collection; @@ -145,7 +144,7 @@ public abstract class AbstractPrimaryKeyValidator } AttributeMapping resolvedAttributeMapping = - mapsIdRelationshipMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getResolvedAttributeMappingValue(); + mapsIdRelationshipMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getDerivedIdAttributeMapping(); if (resolvedAttributeMapping != null && ! ClassName.areAutoboxEquivalents( resolvedAttributeMapping.getPersistentAttribute().getTypeName(), @@ -572,9 +571,7 @@ public abstract class AbstractPrimaryKeyValidator if (definesComplexPrimaryKey(entity)) { return true; } - else { - simplePrimaryKeyMappingCount++; - } + simplePrimaryKeyMappingCount++; if (simplePrimaryKeyMappingCount > 1) { return true; } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractTableValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractTableValidator.java index 41230e1e76..da999a22e5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractTableValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractTableValidator.java @@ -10,8 +10,8 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.List; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; -import org.eclipse.jpt.jpa.core.context.Table; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; @@ -21,22 +21,22 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public abstract class AbstractTableValidator implements JptValidator { - // this is null for tables defined on entities - protected final PersistentAttribute persistentAttribute; + /** this is <code>null</code> for tables defined on entities */ + protected final ReadOnlyPersistentAttribute persistentAttribute; - protected final Table table; + protected final ReadOnlyTable table; protected final TableTextRangeResolver textRangeResolver; protected AbstractTableValidator( - Table table, + ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { this(null, table, textRangeResolver); } protected AbstractTableValidator( - PersistentAttribute persistentAttribute, - Table table, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { super(); this.persistentAttribute = persistentAttribute; @@ -44,10 +44,6 @@ public abstract class AbstractTableValidator this.textRangeResolver = textRangeResolver; } - protected Table getTable() { - return this.table; - } - protected TableTextRangeResolver getTextRangeResolver() { return this.textRangeResolver; } @@ -82,7 +78,7 @@ public abstract class AbstractTableValidator } protected IMessage buildUnresolvedCatalogMessage() { - return this.tableParentIsVirtualAttribute() ? + return this.tableIsPartOfVirtualAttribute() ? this.buildVirtualAttributeUnresolvedCatalogMessage() : this.buildUnresolvedCatalogMessage(this.getUnresolvedCatalogMessage()); } @@ -119,7 +115,7 @@ public abstract class AbstractTableValidator protected abstract String getVirtualAttributeUnresolvedCatalogMessage(); protected IMessage buildUnresolvedSchemaMessage() { - return this.tableParentIsVirtualAttribute() ? + return this.tableIsPartOfVirtualAttribute() ? this.buildVirtualAttributeUnresolvedSchemaMessage() : this.buildUnresolvedSchemaMessage(this.getUnresolvedSchemaMessage()); } @@ -156,7 +152,7 @@ public abstract class AbstractTableValidator protected abstract String getVirtualAttributeUnresolvedSchemaMessage(); protected IMessage buildUnresolvedNameMessage() { - return this.tableParentIsVirtualAttribute() ? + return this.tableIsPartOfVirtualAttribute() ? this.buildVirtualAttributeUnresolvedNameMessage() : this.buildUnresolvedNameMessage(this.getUnresolvedNameMessage()); } @@ -188,7 +184,7 @@ public abstract class AbstractTableValidator protected abstract String getVirtualAttributeUnresolvedNameMessage(); - protected boolean tableParentIsVirtualAttribute() { + protected boolean tableIsPartOfVirtualAttribute() { return (this.persistentAttribute != null) && this.persistentAttribute.isVirtual(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideInverseJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideInverseJoinColumnValidator.java index 87cf85b822..d7df3d59c4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideInverseJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideInverseJoinColumnValidator.java @@ -9,10 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AssociationOverride; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -20,12 +21,12 @@ import org.eclipse.wst.validation.internal.provisional.core.IMessage; public class AssociationOverrideInverseJoinColumnValidator extends InverseJoinColumnValidator { - final AssociationOverride override; + final ReadOnlyAssociationOverride override; public AssociationOverrideInverseJoinColumnValidator( - AssociationOverride override, - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyAssociationOverride override, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(column, joinColumnOwner, textRangeResolver, provider); @@ -33,10 +34,10 @@ public class AssociationOverrideInverseJoinColumnValidator } public AssociationOverrideInverseJoinColumnValidator( - PersistentAttribute persistentAttribute, - AssociationOverride override, - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAssociationOverride override, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, column, joinColumnOwner, textRangeResolver, provider); @@ -44,7 +45,7 @@ public class AssociationOverrideInverseJoinColumnValidator } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new TableValidator(); } @@ -91,7 +92,7 @@ public class AssociationOverrideInverseJoinColumnValidator } @Override - public IMessage buildUnresolvedReferencedColumnNameMessage() { + protected IMessage buildUnresolvedReferencedColumnNameMessage() { return this.override.isVirtual() ? this.buildVirtualOverrideUnresolvedReferencedColumnNameMessage() : super.buildUnresolvedReferencedColumnNameMessage(); @@ -205,6 +206,8 @@ public class AssociationOverrideInverseJoinColumnValidator } + // ********** table validator ********** + public class TableValidator extends InverseJoinColumnValidator.TableValidator { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinColumnValidator.java index 445e3ff59d..a495440ed5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinColumnValidator.java @@ -9,10 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AssociationOverride; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -20,13 +21,13 @@ import org.eclipse.wst.validation.internal.provisional.core.IMessage; public class AssociationOverrideJoinColumnValidator extends JoinColumnValidator { - final AssociationOverride override; + final ReadOnlyAssociationOverride override; public AssociationOverrideJoinColumnValidator( - AssociationOverride override, - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyAssociationOverride override, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(column, joinColumnOwner, textRangeResolver, provider); @@ -34,10 +35,10 @@ public class AssociationOverrideJoinColumnValidator } public AssociationOverrideJoinColumnValidator( - PersistentAttribute persistentAttribute, - AssociationOverride override, - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAssociationOverride override, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, column, joinColumnOwner, textRangeResolver, provider); @@ -45,7 +46,7 @@ public class AssociationOverrideJoinColumnValidator } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new TableValidator(); } @@ -92,7 +93,7 @@ public class AssociationOverrideJoinColumnValidator } @Override - public IMessage buildUnresolvedReferencedColumnNameMessage() { + protected IMessage buildUnresolvedReferencedColumnNameMessage() { return this.override.isVirtual() ? this.buildVirtualOverrideUnresolvedReferencedColumnNameMessage() : super.buildUnresolvedReferencedColumnNameMessage(); @@ -206,6 +207,8 @@ public class AssociationOverrideJoinColumnValidator } + // ********** table validator ********** + protected class TableValidator extends JoinColumnValidator.TableValidator { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinTableValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinTableValidator.java index f9158fe374..24731b8de4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinTableValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideJoinTableValidator.java @@ -9,9 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AssociationOverride; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -20,20 +20,20 @@ import org.eclipse.wst.validation.internal.provisional.core.IMessage; public class AssociationOverrideJoinTableValidator extends AbstractJoinTableValidator { - private final AssociationOverride override; + private final ReadOnlyAssociationOverride override; public AssociationOverrideJoinTableValidator( - AssociationOverride override, - JoinTable table, + ReadOnlyAssociationOverride override, + ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { super(table, textRangeResolver); this.override = override; } public AssociationOverrideJoinTableValidator( - PersistentAttribute persistentAttribute, - AssociationOverride override, - JoinTable table, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAssociationOverride override, + ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { super(persistentAttribute, table, textRangeResolver); this.override = override; @@ -52,9 +52,9 @@ public class AssociationOverrideJoinTableValidator JpaValidationMessages.VIRTUAL_ASSOCIATION_OVERRIDE_JOIN_TABLE_UNRESOLVED_NAME, new String[] { this.override.getName(), - this.getTable().getName() + this.table.getName() }, - this.getTable(), + this.table, this.getTextRangeResolver().getNameTextRange() ); } @@ -72,9 +72,9 @@ public class AssociationOverrideJoinTableValidator JpaValidationMessages.VIRTUAL_ASSOCIATION_OVERRIDE_JOIN_TABLE_UNRESOLVED_CATALOG, new String[] { this.override.getName(), - this.getTable().getCatalog() + this.table.getCatalog() }, - this.getTable(), + this.table, this.getTextRangeResolver().getCatalogTextRange() ); } @@ -92,40 +92,44 @@ public class AssociationOverrideJoinTableValidator JpaValidationMessages.VIRTUAL_ASSOCIATION_OVERRIDE_JOIN_TABLE_UNRESOLVED_SCHEMA, new String[] { this.override.getName(), - this.getTable().getSchema() + this.table.getSchema() }, - this.getTable(), + this.table, this.getTextRangeResolver().getSchemaTextRange() ); } @Override protected IMessage buildVirtualAttributeUnresolvedNameMessage() { - throw new UnsupportedOperationException("Nested relationship mappings with JoinTable are unsupported"); //$NON-NLS-1$ + throw this.buildNestedJoinTableNotSupportedException(); } @Override protected IMessage buildVirtualAttributeUnresolvedCatalogMessage() { - throw new UnsupportedOperationException("Nested relationship mappings with JoinTable are unsupported"); //$NON-NLS-1$ + throw this.buildNestedJoinTableNotSupportedException(); } @Override protected IMessage buildVirtualAttributeUnresolvedSchemaMessage() { - throw new UnsupportedOperationException("Nested relationship mappings with JoinTable are unsupported"); //$NON-NLS-1$ + throw this.buildNestedJoinTableNotSupportedException(); } @Override protected String getVirtualAttributeUnresolvedCatalogMessage() { - throw new UnsupportedOperationException("Nested relationship mappings with JoinTable are unsupported"); //$NON-NLS-1$ + throw this.buildNestedJoinTableNotSupportedException(); } @Override protected String getVirtualAttributeUnresolvedSchemaMessage() { - throw new UnsupportedOperationException("Nested relationship mappings with JoinTable are unsupported"); //$NON-NLS-1$ + throw this.buildNestedJoinTableNotSupportedException(); } @Override protected String getVirtualAttributeUnresolvedNameMessage() { - throw new UnsupportedOperationException("Nested relationship mappings with JoinTable are unsupported"); //$NON-NLS-1$ + throw this.buildNestedJoinTableNotSupportedException(); + } + + protected UnsupportedOperationException buildNestedJoinTableNotSupportedException() { + return new UnsupportedOperationException("A nested relationship mapping cannot specify a join table"); //$NON-NLS-1$ } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideValidator.java index d0d4e0e8ce..b8417c6248 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AssociationOverrideValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,9 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AssociationOverride; import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -19,7 +19,7 @@ public class AssociationOverrideValidator extends OverrideValidator { public AssociationOverrideValidator( - AssociationOverride override, + ReadOnlyAssociationOverride override, AssociationOverrideContainer container, OverrideTextRangeResolver textRangeResolver, OverrideDescriptionProvider overrideDescriptionProvider) { @@ -27,8 +27,8 @@ public class AssociationOverrideValidator } public AssociationOverrideValidator( - PersistentAttribute persistentAttribute, - AssociationOverride override, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAssociationOverride override, AssociationOverrideContainer container, OverrideTextRangeResolver textRangeResolver, OverrideDescriptionProvider overrideDescriptionProvider) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideColumnValidator.java index fefb771d30..d5102d5f40 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideColumnValidator.java @@ -9,10 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AttributeOverride; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; import org.eclipse.wst.validation.internal.provisional.core.IMessage; @@ -20,11 +21,11 @@ import org.eclipse.wst.validation.internal.provisional.core.IMessage; public class AttributeOverrideColumnValidator extends NamedColumnValidator { - final AttributeOverride override; + final ReadOnlyAttributeOverride override; public AttributeOverrideColumnValidator( - AttributeOverride override, - BaseColumn column, + ReadOnlyAttributeOverride override, + ReadOnlyBaseColumn column, BaseColumnTextRangeResolver textRangeResolver, TableDescriptionProvider message) { super(column, textRangeResolver, message); @@ -32,9 +33,9 @@ public class AttributeOverrideColumnValidator } public AttributeOverrideColumnValidator( - PersistentAttribute persistentAttribute, - AttributeOverride override, - BaseColumn column, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAttributeOverride override, + ReadOnlyBaseColumn column, BaseColumnTextRangeResolver textRangeResolver, TableDescriptionProvider message) { super(persistentAttribute, column, textRangeResolver, message); @@ -42,7 +43,7 @@ public class AttributeOverrideColumnValidator } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new TableValidator(); } @@ -93,6 +94,8 @@ public class AttributeOverrideColumnValidator } + // ********** table validator ********** + protected class TableValidator extends BaseColumnTableValidator { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideValidator.java index 4cc07bea91..7f820a41c4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AttributeOverrideValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,9 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -19,7 +19,7 @@ public class AttributeOverrideValidator extends OverrideValidator { public AttributeOverrideValidator( - AttributeOverride override, + ReadOnlyAttributeOverride override, AttributeOverrideContainer container, OverrideTextRangeResolver textRangeResolver, OverrideDescriptionProvider overrideDescriptionProvider) { @@ -27,8 +27,8 @@ public class AttributeOverrideValidator } public AttributeOverrideValidator( - PersistentAttribute persistentAttribute, - AttributeOverride override, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAttributeOverride override, AttributeOverrideContainer container, OverrideTextRangeResolver textRangeResolver, OverrideDescriptionProvider overrideDescriptionProvider) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/BaseJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/BaseJoinColumnValidator.java index a4826b5fd3..67f9c1b414 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/BaseJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/BaseJoinColumnValidator.java @@ -11,20 +11,20 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.List; import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.wst.validation.internal.provisional.core.IMessage; -public abstract class BaseJoinColumnValidator<C extends BaseJoinColumn, R extends BaseJoinColumnTextRangeResolver> +public abstract class BaseJoinColumnValidator<C extends ReadOnlyBaseJoinColumn, R extends BaseJoinColumnTextRangeResolver> extends AbstractNamedColumnValidator<C, R> { - private final BaseJoinColumn.Owner joinColumnOwner; + private final ReadOnlyBaseJoinColumn.Owner joinColumnOwner; protected BaseJoinColumnValidator( C column, - BaseJoinColumn.Owner joinColumnOwner, + ReadOnlyBaseJoinColumn.Owner joinColumnOwner, R textRangeResolver, TableDescriptionProvider provider) { super(column, textRangeResolver, provider); @@ -32,9 +32,9 @@ public abstract class BaseJoinColumnValidator<C extends BaseJoinColumn, R extend } protected BaseJoinColumnValidator( - PersistentAttribute persistentAttribute, + ReadOnlyPersistentAttribute persistentAttribute, C column, - BaseJoinColumn.Owner joinColumnOwner, + ReadOnlyBaseJoinColumn.Owner joinColumnOwner, R textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, column, textRangeResolver, provider); @@ -78,7 +78,7 @@ public abstract class BaseJoinColumnValidator<C extends BaseJoinColumn, R extend } protected IMessage buildUnresolvedReferencedColumnNameMessage() { - return this.columnParentIsVirtualAttribute() ? + return this.columnIsPartOfVirtualAttribute() ? this.buildVirtualAttributeUnresolvedReferencedColumnNameMessage() : this.buildUnresolvedReferencedColumnNameMessage(this.getUnresolvedReferencedColumnNameMessage()); } @@ -115,7 +115,7 @@ public abstract class BaseJoinColumnValidator<C extends BaseJoinColumn, R extend protected abstract String getVirtualAttributeUnresolvedReferencedColumnNameMessage(); protected IMessage buildUnspecifiedNameMultipleJoinColumnsMessage() { - return this.columnParentIsVirtualAttribute() ? + return this.columnIsPartOfVirtualAttribute() ? this.buildVirtualAttributeUnspecifiedNameMultipleJoinColumnsMessage() : this.buildUnspecifiedNameMultipleJoinColumnsMessage(this.getUnspecifiedNameMultipleJoinColumnsMessage()); } @@ -145,7 +145,7 @@ public abstract class BaseJoinColumnValidator<C extends BaseJoinColumn, R extend protected abstract String getVirtualAttributeUnspecifiedNameMultipleJoinColumnsMessage(); protected IMessage buildUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage() { - return this.columnParentIsVirtualAttribute() ? + return this.columnIsPartOfVirtualAttribute() ? this.buildVirtualAttributeUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage() : this.buildUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage(this.getUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage()); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/DiscriminatorColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/DiscriminatorColumnValidator.java index 28b4c7c6f0..c993c07889 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/DiscriminatorColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/DiscriminatorColumnValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,15 +9,15 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; public class DiscriminatorColumnValidator - extends AbstractNamedColumnValidator<NamedColumn, NamedColumnTextRangeResolver> + extends AbstractNamedColumnValidator<ReadOnlyNamedColumn, NamedColumnTextRangeResolver> { public DiscriminatorColumnValidator( - NamedColumn namedColumn, + ReadOnlyNamedColumn namedColumn, NamedColumnTextRangeResolver textRangeResolver) { super(namedColumn, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/EntityPrimaryKeyJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/EntityPrimaryKeyJoinColumnValidator.java index a0d355339e..cafc2d9552 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/EntityPrimaryKeyJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/EntityPrimaryKeyJoinColumnValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,15 +9,15 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; public class EntityPrimaryKeyJoinColumnValidator extends PrimaryKeyJoinColumnValidator { public EntityPrimaryKeyJoinColumnValidator( - BaseJoinColumn column, - BaseJoinColumn.Owner owner, + ReadOnlyBaseJoinColumn column, + ReadOnlyBaseJoinColumn.Owner owner, BaseJoinColumnTextRangeResolver textRangeResolver) { super(column, owner, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/GenericPersistentAttributeValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/GenericPersistentAttributeValidator.java index bb0e7941d9..1838129d29 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/GenericPersistentAttributeValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/GenericPersistentAttributeValidator.java @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.List; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.PersistentAttributeTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -20,7 +20,7 @@ public class GenericPersistentAttributeValidator extends AbstractPersistentAttributeValidator { public GenericPersistentAttributeValidator( - PersistentAttribute persistentAttribute, JavaPersistentAttribute javaPersistentAttribute, PersistentAttributeTextRangeResolver textRangeResolver) + ReadOnlyPersistentAttribute persistentAttribute, JavaPersistentAttribute javaPersistentAttribute, PersistentAttributeTextRangeResolver textRangeResolver) { super(persistentAttribute, javaPersistentAttribute, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/InverseJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/InverseJoinColumnValidator.java index f74bc5e6cf..a495cc48ed 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/InverseJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/InverseJoinColumnValidator.java @@ -9,33 +9,34 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; public class InverseJoinColumnValidator - extends BaseJoinColumnValidator<JoinColumn, JoinColumnTextRangeResolver> + extends BaseJoinColumnValidator<ReadOnlyJoinColumn, JoinColumnTextRangeResolver> { protected InverseJoinColumnValidator( - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(column, joinColumnOwner, textRangeResolver, provider); } public InverseJoinColumnValidator( - PersistentAttribute persistentAttribute, - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, column, joinColumnOwner, textRangeResolver, provider); } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new TableValidator(); } @@ -79,6 +80,9 @@ public class InverseJoinColumnValidator return JpaValidationMessages.VIRTUAL_ATTRIBUTE_INVERSE_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS; } + + // ********** table validator ********** + protected class TableValidator extends BaseColumnTableValidator { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinColumnValidator.java index 0742cae182..87ddf14046 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinColumnValidator.java @@ -9,33 +9,34 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; public class JoinColumnValidator - extends BaseJoinColumnValidator<JoinColumn, JoinColumnTextRangeResolver> + extends BaseJoinColumnValidator<ReadOnlyJoinColumn, JoinColumnTextRangeResolver> { protected JoinColumnValidator( - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(column, joinColumnOwner, textRangeResolver, provider); } public JoinColumnValidator( - PersistentAttribute persistentAttribute, - JoinColumn column, - JoinColumn.Owner joinColumnOwner, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyJoinColumn column, + ReadOnlyJoinColumn.Owner joinColumnOwner, JoinColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, column, joinColumnOwner, textRangeResolver, provider); } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new TableValidator(); } @@ -79,6 +80,9 @@ public class JoinColumnValidator return JpaValidationMessages.VIRTUAL_ATTRIBUTE_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS; } + + // ********** table validator ********** + protected class TableValidator extends BaseColumnTableValidator { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinTableValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinTableValidator.java index ff93b88aa0..982d7c16c4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinTableValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/JoinTableValidator.java @@ -9,15 +9,15 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; public class JoinTableValidator extends AbstractJoinTableValidator { - public JoinTableValidator(PersistentAttribute persistentAttribute, JoinTable table, TableTextRangeResolver textRangeResolver) { + public JoinTableValidator(ReadOnlyPersistentAttribute persistentAttribute, ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { super(persistentAttribute, table, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideColumnValidator.java index f58077403a..d8679afc5e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideColumnValidator.java @@ -9,26 +9,27 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AttributeOverride; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; public class MapKeyAttributeOverrideColumnValidator extends AttributeOverrideColumnValidator { public MapKeyAttributeOverrideColumnValidator( - PersistentAttribute persistentAttribute, - AttributeOverride override, - BaseColumn column, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAttributeOverride override, + ReadOnlyBaseColumn column, BaseColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, override, column, textRangeResolver, provider); } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new TableValidator(); } @@ -43,6 +44,8 @@ public class MapKeyAttributeOverrideColumnValidator } + // ********** table validator ********** + protected class TableValidator extends AttributeOverrideColumnValidator.TableValidator { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideValidator.java index 437ccfae03..951bd5634b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyAttributeOverrideValidator.java @@ -9,9 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -19,8 +19,8 @@ public class MapKeyAttributeOverrideValidator extends AttributeOverrideValidator { public MapKeyAttributeOverrideValidator( - PersistentAttribute persistentAttribute, - AttributeOverride override, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyAttributeOverride override, AttributeOverrideContainer container, OverrideTextRangeResolver textRangeResolver, OverrideDescriptionProvider overrideDescriptionProvider) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyColumnValidator.java index 6a7808e2ba..6ac74e6ae5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/MapKeyColumnValidator.java @@ -9,24 +9,25 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; public class MapKeyColumnValidator - extends AbstractNamedColumnValidator<BaseColumn, BaseColumnTextRangeResolver> + extends AbstractNamedColumnValidator<ReadOnlyBaseColumn, BaseColumnTextRangeResolver> { public MapKeyColumnValidator( - PersistentAttribute persistentAttribute, - BaseColumn column, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyBaseColumn column, BaseColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, column, textRangeResolver, provider); } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new TableValidator(); } @@ -40,6 +41,9 @@ public class MapKeyColumnValidator return JpaValidationMessages.VIRTUAL_ATTRIBUTE_MAP_KEY_COLUMN_UNRESOLVED_NAME; } + + // ********** table validator ********** + protected class TableValidator extends BaseColumnTableValidator { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/NamedColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/NamedColumnValidator.java index b98ed9597e..d75649c0a6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/NamedColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/NamedColumnValidator.java @@ -9,32 +9,33 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; public class NamedColumnValidator - extends AbstractNamedColumnValidator<BaseColumn, BaseColumnTextRangeResolver> + extends AbstractNamedColumnValidator<ReadOnlyBaseColumn, BaseColumnTextRangeResolver> { protected NamedColumnValidator( - BaseColumn column, + ReadOnlyBaseColumn column, BaseColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(column, textRangeResolver, provider); } public NamedColumnValidator( - PersistentAttribute persistentAttribute, - BaseColumn column, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyBaseColumn column, BaseColumnTextRangeResolver textRangeResolver, TableDescriptionProvider provider) { super(persistentAttribute, column, textRangeResolver, provider); } @Override - protected TableValidator buildTableValidator() { + protected JptValidator buildTableValidator() { return new BaseColumnTableValidator(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OneToOnePrimaryKeyJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OneToOnePrimaryKeyJoinColumnValidator.java index 1ac30fab13..5f29dd78dc 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OneToOnePrimaryKeyJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OneToOnePrimaryKeyJoinColumnValidator.java @@ -9,8 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -18,9 +18,9 @@ public class OneToOnePrimaryKeyJoinColumnValidator extends PrimaryKeyJoinColumnValidator { public OneToOnePrimaryKeyJoinColumnValidator( - PersistentAttribute persistentAttribute, - BaseJoinColumn column, - BaseJoinColumn.Owner owner, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyBaseJoinColumn column, + ReadOnlyBaseJoinColumn.Owner owner, BaseJoinColumnTextRangeResolver textRangeResolver) { super(persistentAttribute, column, owner, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OverrideValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OverrideValidator.java index 164ac53d97..b247a5d664 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OverrideValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/OverrideValidator.java @@ -12,8 +12,8 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.List; import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; @@ -24,10 +24,10 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; public abstract class OverrideValidator implements JptValidator { - // this is null for overrides defined on entities - protected final PersistentAttribute persistentAttribute; + /** this is <code>null</code> for overrides defined on entities */ + protected final ReadOnlyPersistentAttribute persistentAttribute; - protected final Override_ override; + protected final ReadOnlyOverride override; protected final OverrideContainer container; @@ -36,7 +36,7 @@ public abstract class OverrideValidator protected final OverrideDescriptionProvider overrideDescriptionProvider; protected OverrideValidator( - Override_ override, + ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver, OverrideDescriptionProvider overrideDescriptionProvider) { @@ -45,8 +45,8 @@ public abstract class OverrideValidator protected OverrideValidator( - PersistentAttribute persistentAttribute, - Override_ override, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver, OverrideDescriptionProvider overrideDescriptionProvider) { @@ -62,38 +62,35 @@ public abstract class OverrideValidator } public boolean validate(List<IMessage> messages, IReporter reporter) { - if (!this.validateType(messages)) { + if (this.validateType(messages)) { + // validate the name only if the type is valid return this.validateName(messages); } - return true; + return false; } protected boolean validateType(List<IMessage> messages) { if (this.container.getOverridableTypeMapping() == null) { messages.add(this.buildUnresolvedOverrideTypeMessage()); - return true; + return false; } - return false; + return true; } protected IMessage buildUnresolvedOverrideTypeMessage() { - if (this.override.isVirtual()) { - return DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_TYPE, - new String[] {this.override.getName()}, - this.override, - this.textRangeResolver.getNameTextRange() - ); - } - return DefaultJpaValidationMessages.buildMessage( IMessage.HIGH_SEVERITY, - JpaValidationMessages.ATTRIBUTE_OVERRIDE_INVALID_TYPE, + this.getUnresolvedOverrideTypeMessage(), new String[] {this.override.getName()}, this.override, this.textRangeResolver.getNameTextRange() - ); + ); + } + + protected String getUnresolvedOverrideTypeMessage() { + return this.override.isVirtual() ? + JpaValidationMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_TYPE : + JpaValidationMessages.ATTRIBUTE_OVERRIDE_INVALID_TYPE; } protected boolean validateName(List<IMessage> messages) { @@ -106,9 +103,11 @@ public abstract class OverrideValidator protected IMessage buildUnresolvedNameMessage() { if (this.override.isVirtual()) { + // this can happen when an erroneous Java override triggers a + // corresponding orm.xml virtual override return this.buildVirtualUnresolvedNameMessage(); } - if (this.overrideParentIsVirtualAttribute()) { + if (this.overrideIsPartOfVirtualAttribute()) { return this.buildVirtualAttributeUnresolvedNameMessage(); } return this.buildUnresolvedNameMessage(this.getUnresolvedNameMessage()); @@ -163,7 +162,7 @@ public abstract class OverrideValidator protected abstract String getVirtualAttributeUnresolvedNameMessage(); - protected boolean overrideParentIsVirtualAttribute() { + protected boolean overrideIsPartOfVirtualAttribute() { return (this.persistentAttribute != null) && this.persistentAttribute.isVirtual(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/PrimaryKeyJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/PrimaryKeyJoinColumnValidator.java index 9784fc0182..c531b28f01 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/PrimaryKeyJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/PrimaryKeyJoinColumnValidator.java @@ -9,32 +9,32 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; import org.eclipse.wst.validation.internal.provisional.core.IMessage; public abstract class PrimaryKeyJoinColumnValidator - extends BaseJoinColumnValidator<BaseJoinColumn, BaseJoinColumnTextRangeResolver> + extends BaseJoinColumnValidator<ReadOnlyBaseJoinColumn, BaseJoinColumnTextRangeResolver> { protected PrimaryKeyJoinColumnValidator( - BaseJoinColumn column, - BaseJoinColumn.Owner owner, + ReadOnlyBaseJoinColumn column, + ReadOnlyBaseJoinColumn.Owner owner, BaseJoinColumnTextRangeResolver textRangeResolver) { super(column, owner, textRangeResolver, TableDescriptionProvider.Null.instance()); } protected PrimaryKeyJoinColumnValidator( - PersistentAttribute persistentAttribute, - BaseJoinColumn column, - BaseJoinColumn.Owner owner, + ReadOnlyPersistentAttribute persistentAttribute, + ReadOnlyBaseJoinColumn column, + ReadOnlyBaseJoinColumn.Owner owner, BaseJoinColumnTextRangeResolver textRangeResolver) { super(persistentAttribute, column, owner, textRangeResolver, TableDescriptionProvider.Null.instance()); } @Override - public IMessage buildUnresolvedNameMessage() { + protected IMessage buildUnresolvedNameMessage() { return this.column.isVirtual() ? this.buildUnresolvedNameMessage(this.getVirtualPKJoinColumnUnresolvedNameMessage()) : super.buildUnresolvedNameMessage(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTablePrimaryKeyJoinColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTablePrimaryKeyJoinColumnValidator.java index 5d23f9305b..7ecf62d72b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTablePrimaryKeyJoinColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTablePrimaryKeyJoinColumnValidator.java @@ -9,8 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; -import org.eclipse.jpt.jpa.core.context.SecondaryTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlySecondaryTable; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -19,12 +19,12 @@ import org.eclipse.wst.validation.internal.provisional.core.IMessage; public class SecondaryTablePrimaryKeyJoinColumnValidator extends PrimaryKeyJoinColumnValidator { - private final SecondaryTable secondaryTable; + private final ReadOnlySecondaryTable secondaryTable; public SecondaryTablePrimaryKeyJoinColumnValidator( - SecondaryTable secondaryTable, - BaseJoinColumn column, - BaseJoinColumn.Owner owner, + ReadOnlySecondaryTable secondaryTable, + ReadOnlyBaseJoinColumn column, + ReadOnlyBaseJoinColumn.Owner owner, BaseJoinColumnTextRangeResolver textRangeResolver) { super(column, owner, textRangeResolver); this.secondaryTable = secondaryTable; @@ -39,7 +39,7 @@ public class SecondaryTablePrimaryKeyJoinColumnValidator } @Override - public IMessage buildUnresolvedNameMessage() { + protected IMessage buildUnresolvedNameMessage() { return this.secondaryTableIsVirtual() ? this.buildVirtualSecondaryTableUnresolvedNameMessage() : super.buildUnresolvedNameMessage(); @@ -65,7 +65,7 @@ public class SecondaryTablePrimaryKeyJoinColumnValidator } @Override - public IMessage buildUnresolvedReferencedColumnNameMessage() { + protected IMessage buildUnresolvedReferencedColumnNameMessage() { return this.secondaryTableIsVirtual() ? this.buildVirtualSecondaryTableUnresolvedReferencedColumnNameMessage() : super.buildUnresolvedReferencedColumnNameMessage(); @@ -91,7 +91,7 @@ public class SecondaryTablePrimaryKeyJoinColumnValidator } @Override - public IMessage buildUnspecifiedNameMultipleJoinColumnsMessage() { + protected IMessage buildUnspecifiedNameMultipleJoinColumnsMessage() { return this.secondaryTableIsVirtual() ? this.buildVirtualSecondaryTableUnspecifiedNameMultipleJoinColumnsMessage() : super.buildUnspecifiedNameMultipleJoinColumnsMessage(); @@ -113,7 +113,7 @@ public class SecondaryTablePrimaryKeyJoinColumnValidator } @Override - public IMessage buildUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage() { + protected IMessage buildUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage() { return this.secondaryTableIsVirtual() ? this.buildVirtualSecondaryTableUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage() : super.buildUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTableValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTableValidator.java index 03b4df0b81..ff7cbe3139 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTableValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/SecondaryTableValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,29 +9,25 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.SecondaryTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlySecondaryTable; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; -public class SecondaryTableValidator extends AbstractTableValidator +public class SecondaryTableValidator + extends AbstractTableValidator { - public SecondaryTableValidator(SecondaryTable table, TableTextRangeResolver textRangeResolver) { + public SecondaryTableValidator(ReadOnlySecondaryTable table, TableTextRangeResolver textRangeResolver) { super(table, textRangeResolver); } @Override - public SecondaryTable getTable() { - return (SecondaryTable) super.getTable(); - } - - @Override protected String getUnresolvedCatalogMessage() { return JpaValidationMessages.SECONDARY_TABLE_UNRESOLVED_CATALOG; } @Override protected String getVirtualAttributeUnresolvedCatalogMessage() { - throw new UnsupportedOperationException("No SecondaryTable annotations exist on attributes"); //$NON-NLS-1$ + throw this.buildAttributeTableNotSupportedException(); } @Override @@ -41,7 +37,7 @@ public class SecondaryTableValidator extends AbstractTableValidator @Override protected String getVirtualAttributeUnresolvedSchemaMessage() { - throw new UnsupportedOperationException("No SecondaryTable annotations exist on attributes"); //$NON-NLS-1$ + throw this.buildAttributeTableNotSupportedException(); } @Override @@ -51,6 +47,10 @@ public class SecondaryTableValidator extends AbstractTableValidator @Override protected String getVirtualAttributeUnresolvedNameMessage() { - throw new UnsupportedOperationException("No SecondaryTable annotations exist on attributes"); //$NON-NLS-1$ + throw this.buildAttributeTableNotSupportedException(); + } + + protected UnsupportedOperationException buildAttributeTableNotSupportedException() { + return new UnsupportedOperationException("An attribute cannot specify a secondary table"); //$NON-NLS-1$ } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/TableValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/TableValidator.java index a0dad72ed6..6a099e58b6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/TableValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/TableValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,13 +9,14 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context; -import org.eclipse.jpt.jpa.core.context.Table; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; -public class TableValidator extends AbstractTableValidator +public class TableValidator + extends AbstractTableValidator { - public TableValidator(Table table, TableTextRangeResolver textRangeResolver) { + public TableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { super(table, textRangeResolver); } @@ -26,7 +27,7 @@ public class TableValidator extends AbstractTableValidator @Override protected String getVirtualAttributeUnresolvedCatalogMessage() { - throw new UnsupportedOperationException("No Table annotations exist on attributes"); //$NON-NLS-1$ + throw this.buildAttributeTableNotSupportedException(); } @Override @@ -36,7 +37,7 @@ public class TableValidator extends AbstractTableValidator @Override protected String getVirtualAttributeUnresolvedSchemaMessage() { - throw new UnsupportedOperationException("No Table annotations exist on attributes"); //$NON-NLS-1$ + throw this.buildAttributeTableNotSupportedException(); } @Override @@ -46,6 +47,10 @@ public class TableValidator extends AbstractTableValidator @Override protected String getVirtualAttributeUnresolvedNameMessage() { - throw new UnsupportedOperationException("No Table annotations exist on attributes"); //$NON-NLS-1$ + throw this.buildAttributeTableNotSupportedException(); + } + + protected UnsupportedOperationException buildAttributeTableNotSupportedException() { + return new UnsupportedOperationException("An attribute cannot specify a table"); //$NON-NLS-1$ } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/AbstractJavaOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/AbstractJavaOverrideContainer.java index 0b04e3202c..7ed3dce4d3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/AbstractJavaOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/AbstractJavaOverrideContainer.java @@ -17,15 +17,18 @@ import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.NotNullFilter; import org.eclipse.jpt.common.utility.internal.iterables.CompositeListIterable; import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SubIterableWrapper; +import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.VirtualOverride; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; @@ -38,6 +41,7 @@ import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.java.Annotation; import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentMember; import org.eclipse.jpt.jpa.core.resource.java.NestableAnnotation; @@ -70,9 +74,13 @@ public abstract class AbstractJavaOverrideContainer< A extends OverrideAnnotation & NestableAnnotation > extends AbstractJavaJpaContextNode - implements JavaOverrideContainer + implements JavaOverrideContainer2_0 { - // this can be null if the container is "read-only" (i.e. a "null" container) + /** + * this can be <code>null</code> if the container is "read-only" + * (i.e. a <em>null</em> container) + * @see #getOwner2_0() + */ protected final O owner; protected final Vector<S> specifiedOverrides = new Vector<S>(); @@ -124,6 +132,19 @@ public abstract class AbstractJavaOverrideContainer< return this.selectOverrideNamed(this.getOverrides(), name); } + public Iterable<String> getOverrideNames() { + return new FilteringIterable<String>(this.getOverrideNames_(), NotNullFilter.<String>instance()); + } + + protected Iterable<String> getOverrideNames_() { + return new TransformationIterable<R, String>(this.getOverrides()) { + @Override + protected String transform(R override) { + return override.getName(); + } + }; + } + // ********** override conversions ********** @@ -316,7 +337,10 @@ public abstract class AbstractJavaOverrideContainer< @Override protected boolean accept(A annotation) { String overrideName = annotation.getName(); - return (overrideName != null) && AbstractJavaOverrideContainer.this.owner.isRelevant(overrideName); + return (overrideName != null) && this.getOwner().isRelevant(overrideName); + } + protected JavaOverrideContainer2_0.Owner getOwner() { + return AbstractJavaOverrideContainer.this.getOwner2_0(); } }; } @@ -472,6 +496,10 @@ public abstract class AbstractJavaOverrideContainer< // ********** misc ********** + protected JavaOverrideContainer2_0.Owner getOwner2_0() { + return (JavaOverrideContainer2_0.Owner) this.owner; + } + public TypeMapping getTypeMapping() { return this.owner.getTypeMapping(); } @@ -504,20 +532,20 @@ public abstract class AbstractJavaOverrideContainer< return this.owner.getDefaultTableName(); } - public JptValidator buildValidator(Override_ override, OverrideTextRangeResolver textRangeResolver) { - return this.owner.buildValidator(override, this, textRangeResolver); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideTextRangeResolver textRangeResolver) { + return this.owner.buildOverrideValidator(override, this, textRangeResolver); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { return this.owner.buildColumnValidator(override, column, columnOwner, textRangeResolver); } public String getPossiblePrefix() { - return this.owner.getPossiblePrefix(); + return this.getOwner2_0().getPossiblePrefix(); } public String getWritePrefix() { - return this.owner.getWritePrefix(); + return this.getOwner2_0().getWritePrefix(); } protected R selectOverrideNamed(Iterable<R> overrides, String name) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverride.java index ebcec5ef3e..947adfac86 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverride.java @@ -14,12 +14,18 @@ import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaOverrideRelationship; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAssociationOverride; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaOverride; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverride2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.java.AssociationOverrideAnnotation; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -29,7 +35,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; */ public class GenericJavaAssociationOverride extends AbstractJavaOverride<JavaAssociationOverrideContainer, AssociationOverrideAnnotation> - implements JavaAssociationOverride + implements JavaAssociationOverride2_0 { protected final JavaOverrideRelationship relationship; @@ -76,6 +82,11 @@ public class GenericJavaAssociationOverride // ********** misc ********** + @Override + protected JavaAssociationOverrideContainer2_0 getContainer2_0() { + return (JavaAssociationOverrideContainer2_0) super.getContainer2_0(); + } + public RelationshipMapping getMapping() { return this.getContainer().getRelationshipMapping(this.name); } @@ -119,4 +130,16 @@ public class GenericJavaAssociationOverride super.validate(messages, reporter, astRoot); this.relationship.validate(messages, reporter, astRoot); } + + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableValidator(this, table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableJoinColumnValidator(this, column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableInverseJoinColumnValidator(this, column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverrideContainer.java index 05d375a330..5566657d9d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAssociationOverrideContainer.java @@ -9,11 +9,12 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; -import org.eclipse.jpt.jpa.core.context.AssociationOverride; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.Relationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverrideRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; @@ -23,6 +24,7 @@ import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.java.AssociationOverrideAnnotation; import org.eclipse.jpt.jpa.core.resource.java.AssociationOverridesAnnotation; import org.eclipse.jpt.jpa.core.resource.java.NestableAssociationOverrideAnnotation; @@ -38,7 +40,7 @@ public class GenericJavaAssociationOverrideContainer JavaVirtualAssociationOverride, NestableAssociationOverrideAnnotation > - implements JavaAssociationOverrideContainer + implements JavaAssociationOverrideContainer2_0 { public GenericJavaAssociationOverrideContainer(JavaJpaContextNode parent, JavaAssociationOverrideContainer.Owner owner) { super(parent, owner); @@ -49,20 +51,29 @@ public class GenericJavaAssociationOverrideContainer return MappingTools.getRelationshipMapping(attributeName, this.owner.getOverridableTypeMapping()); } - public Relationship resolveOverriddenRelationship(String associationOverrideName) { + public ReadOnlyRelationship resolveOverriddenRelationship(String associationOverrideName) { return this.owner.resolveOverriddenRelationship(associationOverrideName); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, org.eclipse.jpt.jpa.core.context.JoinColumn.Owner o, JoinColumnTextRangeResolver textRangeResolver) { - return this.owner.buildJoinTableJoinColumnValidator(override, column, o, textRangeResolver); + public ReadOnlyOverrideRelationship getOverrideRelationship(String overrideName) { + return this.getOverrideNamed(overrideName).getRelationship(); } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, org.eclipse.jpt.jpa.core.context.JoinColumn.Owner o, JoinColumnTextRangeResolver textRangeResolver) { - return this.owner.buildJoinTableInverseJoinColumnValidator(override, column, o, textRangeResolver); + @Override + protected JavaAssociationOverrideContainer2_0.Owner getOwner2_0() { + return (JavaAssociationOverrideContainer2_0.Owner) super.getOwner2_0(); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner o, JoinColumnTextRangeResolver textRangeResolver) { + return this.getOwner2_0().buildJoinTableJoinColumnValidator(override, column, o, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner o, JoinColumnTextRangeResolver textRangeResolver) { + return this.getOwner2_0().buildJoinTableInverseJoinColumnValidator(override, column, o, textRangeResolver); } - public JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver) { - return this.owner.buildTableValidator(override, table, textRangeResolver); + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return this.getOwner2_0().buildJoinTableValidator(override, table, textRangeResolver); } @Override diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverride.java index dda23b1611..7147fa7423 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -13,11 +13,9 @@ import java.util.Iterator; import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.utility.Filter; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; -import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; @@ -25,13 +23,11 @@ import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAttributeOverride; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; -import org.eclipse.jpt.jpa.core.internal.context.TypeMappingTools; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaOverride; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; import org.eclipse.jpt.jpa.core.resource.java.AttributeOverrideAnnotation; import org.eclipse.jpt.jpa.core.resource.java.CompleteColumnAnnotation; -import org.eclipse.jpt.jpa.db.Table; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -100,32 +96,12 @@ public class GenericJavaAttributeOverride // ********** column owner implementation ********** - public TypeMapping getTypeMapping() { - return this.getContainer().getTypeMapping(); - } - - public String getDefaultTableName() { - return this.getContainer().getDefaultTableName(); - } - - public Table resolveDbTable(String tableName) { - return this.getContainer().resolveDbTable(tableName); - } - public String getDefaultColumnName() { return this.name; } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return this.getContainer().buildColumnValidator(this, (BaseColumn) column, this, (BaseColumnTextRangeResolver) textRangeResolver); - } - - public boolean tableNameIsInvalid(String tableName) { - return this.getContainer().tableNameIsInvalid(tableName); - } - - public Iterator<String> candidateTableNames() { - return this.getContainer().candidateTableNames(); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, (ReadOnlyBaseColumn) col, this, (BaseColumnTextRangeResolver) textRangeResolver); } public CompleteColumnAnnotation getColumnAnnotation() { @@ -137,26 +113,10 @@ public class GenericJavaAttributeOverride } - // ********** mapped by relationship ********** + // ********** derived ********** - protected boolean isMappedByRelationship() { - return CollectionTools.contains(this.getMappedByRelationshipAttributeNames(), this.buildQualifier()); - } - - protected Iterable<String> getMappedByRelationshipAttributeNames() { - return TypeMappingTools.getMappedByRelationshipAttributeNames(this.getTypeMapping()); - } - - /** - * overridable names are (usually?) qualified with a container mapping, - * which may also be the one mapped by a relationship - */ - protected String buildQualifier() { - if (this.name == null) { - return null; - } - int index = this.name.indexOf('.'); - return (index == -1) ? this.name : this.name.substring(0, index); + protected boolean attributeIsDerivedId() { + return this.getTypeMapping().attributeIsDerivedId(this.name); } @@ -187,28 +147,23 @@ public class GenericJavaAttributeOverride public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { super.validate(messages, reporter, astRoot); - // [JPA 2.0] if the column is specified, or if the override is not mapped by a relationship, - // then the column is validated. - // (In JPA 1.0, the column will always be validated, since the override is never mapped by a - // relationship) - if (this.columnAnnotationIsSpecified() || ! this.isMappedByRelationship()) { - this.column.validate(messages, reporter, astRoot); - } - - // [JPA 2.0] if the override is mapped by a relationship, then that actually is in itself - // a validation error - // (We prevent implied overrides that are mapped by a relationship ... hopefully) - // (In JPA 1.0, this will never occur) - if (this.isMappedByRelationship()) { + if (this.attributeIsDerivedId()) { messages.add( DefaultJpaValidationMessages.buildMessage( IMessage.HIGH_SEVERITY, - JpaValidationMessages.ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED, + JpaValidationMessages.ATTRIBUTE_OVERRIDE_DERIVED_AND_SPECIFIED, EMPTY_STRING_ARRAY, this, this.getValidationTextRange(astRoot) ) ); + + // validate the column if it is specified + if (this.columnAnnotationIsSpecified()) { + this.column.validate(messages, reporter, astRoot); + } + } else { + this.column.validate(messages, reporter, astRoot); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverrideContainer.java index 49ab73bac9..9d84836b8f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaAttributeOverrideContainer.java @@ -9,12 +9,13 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; -import org.eclipse.jpt.jpa.core.context.Column; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAttributeOverride; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAttributeOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.java.AttributeOverrideAnnotation; import org.eclipse.jpt.jpa.core.resource.java.AttributeOverridesAnnotation; import org.eclipse.jpt.jpa.core.resource.java.NestableAttributeOverrideAnnotation; @@ -30,17 +31,21 @@ public class GenericJavaAttributeOverrideContainer JavaVirtualAttributeOverride, NestableAttributeOverrideAnnotation > - implements JavaAttributeOverrideContainer + implements JavaAttributeOverrideContainer2_0 { public GenericJavaAttributeOverrideContainer(JavaJpaContextNode parent, JavaAttributeOverrideContainer.Owner owner) { super(parent, owner); } - public Column resolveOverriddenColumn(String attributeName) { + public ReadOnlyColumn resolveOverriddenColumn(String attributeName) { return (attributeName == null) ? null : this.owner.resolveOverriddenColumn(attributeName); } + public ReadOnlyColumn getOverrideColumn(String overrideName) { + return this.getOverrideNamed(overrideName).getColumn(); + } + @Override protected String getOverrideAnnotationName() { return AttributeOverrideAnnotation.ANNOTATION_NAME; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java index 2db8014c83..20a918f8b1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -11,9 +11,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; import java.util.Iterator; import java.util.List; -import java.util.Set; import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; import org.eclipse.jpt.jpa.core.MappingKeys; @@ -21,7 +19,6 @@ import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaEmbeddedIdMapping; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; -import org.eclipse.jpt.jpa.core.internal.context.TypeMappingTools; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaBaseEmbeddedMapping; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -37,8 +34,8 @@ public class GenericJavaEmbeddedIdMapping extends AbstractJavaBaseEmbeddedMapping<EmbeddedIdAnnotation> implements EmbeddedIdMapping2_0, JavaEmbeddedIdMapping { - /* 2.0 feature - a relationship may map this embedded id */ - protected boolean mappedByRelationship; + /* JPA 2.0 - the embedded id may be derived from a relationship */ + protected boolean derived; public GenericJavaEmbeddedIdMapping(JavaPersistentAttribute parent) { @@ -51,32 +48,28 @@ public class GenericJavaEmbeddedIdMapping @Override public void update() { super.update(); - this.setMappedByRelationship(this.buildMappedByRelationship()); + this.setDerived(this.buildDerived()); } - // ********** mapped by relationship ********** + // ********** derived ********** - public boolean isMappedByRelationship() { - return this.mappedByRelationship; + public boolean isDerived() { + return this.derived; } - protected void setMappedByRelationship(boolean value) { - boolean old = this.mappedByRelationship; - this.mappedByRelationship = value; - this.firePropertyChanged(MAPPED_BY_RELATIONSHIP_PROPERTY, old, value); + protected void setDerived(boolean derived) { + boolean old = this.derived; + this.derived = derived; + this.firePropertyChanged(DERIVED_PROPERTY, old, derived); } - protected boolean buildMappedByRelationship() { - return this.isJpa2_0Compatible() && this.buildMappedByRelationship_(); + protected boolean buildDerived() { + return this.isJpa2_0Compatible() && this.buildDerived_(); } - protected boolean buildMappedByRelationship_() { - return CollectionTools.contains(this.getMappedByRelationshipAttributeNames(), this.getName()); - } - - protected Iterable<String> getMappedByRelationshipAttributeNames() { - return TypeMappingTools.getMappedByRelationshipAttributeNames(this.getTypeMapping()); + protected boolean buildDerived_() { + return this.getTypeMapping().attributeIsDerivedId(this.getName()); } @@ -93,7 +86,7 @@ public class GenericJavaEmbeddedIdMapping @Override protected Iterator<String> embeddableOverridableAttributeMappingNames() { - return (this.mappedByRelationship) ? + return (this.derived) ? EmptyIterator.<String>instance() : super.embeddableOverridableAttributeMappingNames(); } @@ -113,7 +106,7 @@ public class GenericJavaEmbeddedIdMapping // [JPA 2.0] if the embedded id is mapped by a relationship, then any specified // attribute overrides are in error // (in JPA 1.0, this will obviously never be reached) - if (this.mappedByRelationship + if (this.derived && (this.attributeOverrideContainer.specifiedOverridesSize() > 0)) { messages.add( DefaultJpaValidationMessages.buildMessage( @@ -127,6 +120,7 @@ public class GenericJavaEmbeddedIdMapping } } + // ********** attribute override container owner ********* protected class AttributeOverrideContainerOwner @@ -134,31 +128,19 @@ public class GenericJavaEmbeddedIdMapping { @Override public Iterator<String> allOverridableNames() { - return GenericJavaEmbeddedIdMapping.this.isMappedByRelationship() ? + return GenericJavaEmbeddedIdMapping.this.isDerived() ? EmptyIterator.<String>instance() : super.allOverridableNames(); } @Override - protected Iterator<String> allOverridableAttributeNames_(TypeMapping typeMapping) { - final Set<String> mappedByRelationshipAttributeNames = this.buildMappedByRelationshipAttributeNames(); - if (mappedByRelationshipAttributeNames.isEmpty()) { - return super.allOverridableAttributeNames_(typeMapping); - } - return new FilteringIterator<String>(super.allOverridableAttributeNames_(typeMapping)) { + protected Iterator<String> allOverridableAttributeNames_(TypeMapping overriddenTypeMapping) { + return new FilteringIterator<String>(super.allOverridableAttributeNames_(overriddenTypeMapping)) { @Override protected boolean accept(String attributeName) { - // overridable names are (usually?) qualified with a container mapping, - // which may also be the one mapped by a relationship - int dotIndex = attributeName.indexOf('.'); - String qualifier = (dotIndex > 0) ? attributeName.substring(0, dotIndex) : attributeName; - return ! mappedByRelationshipAttributeNames.contains(qualifier); + return ! AttributeOverrideContainerOwner.this.getTypeMapping().attributeIsDerivedId(attributeName); } }; } - - protected Set<String> buildMappedByRelationshipAttributeNames() { - return CollectionTools.set(GenericJavaEmbeddedIdMapping.this.getMappedByRelationshipAttributeNames()); - } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedMapping.java index 995cac9963..5cb380e156 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedMapping.java @@ -21,15 +21,17 @@ import org.eclipse.jpt.jpa.core.MappingKeys; import org.eclipse.jpt.jpa.core.context.AssociationOverride; import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.AttributeMapping; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.Relationship; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.AttributeMappingTools; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; @@ -46,6 +48,7 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.AssociationOverrideValidat import org.eclipse.jpt.jpa.core.internal.jpa1.context.EmbeddableOverrideDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableTableDescriptionProvider; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaEmbeddedMapping2_0; import org.eclipse.jpt.jpa.core.resource.java.EmbeddedAnnotation; import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentMember; @@ -174,6 +177,11 @@ public class GenericJavaEmbeddedMapping return (this.targetEmbeddable == null) ? null : this.targetEmbeddable.resolveOverriddenRelationship(attributeName); } + @Override + protected JavaAttributeOverrideContainer.Owner buildAttributeOverrideContainerOwner() { + return new AttributeOverrideContainerOwner(); + } + // ********** Java completion proposals ********** @@ -202,10 +210,19 @@ public class GenericJavaEmbeddedMapping } + // ********** attribute override container owner ********* + + protected class AttributeOverrideContainerOwner + extends AbstractJavaBaseEmbeddedMapping<EmbeddedAnnotation>.AttributeOverrideContainerOwner + { + // nothing yet + } + + // ********** association override container owner ********** protected class AssociationOverrideContainerOwner - implements JavaAssociationOverrideContainer.Owner + implements JavaAssociationOverrideContainer2_0.Owner { public JavaResourcePersistentMember getResourcePersistentMember() { return GenericJavaEmbeddedMapping.this.getResourcePersistentAttribute(); @@ -261,24 +278,24 @@ public class GenericJavaEmbeddedMapping return GenericJavaEmbeddedMapping.this.getValidationTextRange(astRoot); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AssociationOverrideValidator(this.getPersistentAttribute(), (AssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AssociationOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (AssociationOverride) override, (JoinColumn) column, (JoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (ReadOnlyJoinColumn) column, (ReadOnlyJoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideInverseJoinColumnValidator(this.getPersistentAttribute(), override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinTableValidator(this.getPersistentAttribute(), override, (JoinTable) table, textRangeResolver); + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinTableValidator(this.getPersistentAttribute(), override, (ReadOnlyJoinTable) table, textRangeResolver); } protected JavaPersistentAttribute getPersistentAttribute() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinColumn.java index 9052579cbe..d945316c69 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinColumn.java @@ -19,6 +19,7 @@ import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaBaseColumn; @@ -32,21 +33,21 @@ import org.eclipse.jpt.jpa.db.Table; * Java join column */ public class GenericJavaJoinColumn - extends AbstractJavaBaseColumn<JoinColumnAnnotation, JavaJoinColumn.Owner> + extends AbstractJavaBaseColumn<JoinColumnAnnotation, JavaReadOnlyJoinColumn.Owner> implements JavaJoinColumn { - /** @see AbstractJavaNamedColumn#AbstractJavaNamedColumn(JavaJpaContextNode, org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.java.NamedColumnAnnotation) */ + /** @see AbstractJavaNamedColumn#AbstractJavaNamedColumn(JavaJpaContextNode, org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.java.NamedColumnAnnotation) */ protected /* final */ JoinColumnAnnotation columnAnnotation; // never null protected String specifiedReferencedColumnName; protected String defaultReferencedColumnName; - public GenericJavaJoinColumn(JavaJpaContextNode parent, JavaJoinColumn.Owner owner) { + public GenericJavaJoinColumn(JavaJpaContextNode parent, JavaReadOnlyJoinColumn.Owner owner) { this(parent, owner, null); } - public GenericJavaJoinColumn(JavaJpaContextNode parent, JavaJoinColumn.Owner owner, JoinColumnAnnotation columnAnnotation) { + public GenericJavaJoinColumn(JavaJpaContextNode parent, JavaReadOnlyJoinColumn.Owner owner, JoinColumnAnnotation columnAnnotation) { super(parent, owner, columnAnnotation); this.specifiedReferencedColumnName = this.buildSpecifiedReferencedColumnName(); } @@ -126,10 +127,6 @@ public class GenericJavaJoinColumn protected String buildDefaultReferencedColumnName() { return MappingTools.buildJoinColumnDefaultReferencedColumnName(this.owner); } - - public TextRange getReferencedColumnNameTextRange(CompilationUnit astRoot) { - return this.getValidationTextRange(this.getColumnAnnotation().getReferencedColumnNameTextRange(astRoot), astRoot); - } // ********** database stuff ********** @@ -208,4 +205,8 @@ public class GenericJavaJoinColumn protected NamedColumnTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { return new JavaJoinColumnTextRangeResolver(this, astRoot); } + + public TextRange getReferencedColumnNameTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(this.getColumnAnnotation().getReferencedColumnNameTextRange(astRoot), astRoot); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinTable.java index cc6254661b..fa515cb0dd 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaJoinTable.java @@ -25,16 +25,18 @@ import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterab import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTable; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaRelationship; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; @@ -59,7 +61,7 @@ public class GenericJavaJoinTable { protected final Vector<JavaJoinColumn> specifiedInverseJoinColumns = new Vector<JavaJoinColumn>(); protected final SpecifiedInverseJoinColumnContainerAdapter specifiedInverseJoinColumnContainerAdapter = new SpecifiedInverseJoinColumnContainerAdapter(); - protected final JavaJoinColumn.Owner inverseJoinColumnOwner; + protected final JavaReadOnlyJoinColumn.Owner inverseJoinColumnOwner; protected JavaJoinColumn defaultInverseJoinColumn; @@ -71,7 +73,7 @@ public class GenericJavaJoinTable } @Override - protected JavaJoinColumn.Owner buildJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -122,7 +124,7 @@ public class GenericJavaJoinTable return this.hasSpecifiedInverseJoinColumns() ? this.specifiedInverseJoinColumnsSize() : this.defaultInverseJoinColumnsSize(); } - public void convertDefaultToSpecifiedInverseJoinColumn() { + public void convertDefaultInverseJoinColumnToSpecified() { MappingTools.convertJoinTableDefaultToSpecifiedInverseJoinColumn(this); } @@ -238,7 +240,7 @@ public class GenericJavaJoinTable } } - protected JavaJoinColumn.Owner buildInverseJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildInverseJoinColumnOwner() { return new InverseJoinColumnOwner(); } @@ -348,7 +350,7 @@ public class GenericJavaJoinTable @Override protected void validateJoinColumns(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { super.validateJoinColumns(messages, reporter, astRoot); - this.validateJoinColumns(this.inverseJoinColumns(), messages, reporter, astRoot); + this.validateNodes(this.getInverseJoinColumns(), messages, reporter, astRoot); } public boolean validatesAgainstDatabase() { @@ -362,18 +364,14 @@ public class GenericJavaJoinTable * just a little common behavior */ protected abstract class AbstractJoinColumnOwner - implements JavaJoinColumn.Owner + implements JavaReadOnlyJoinColumn.Owner { protected AbstractJoinColumnOwner() { super(); } public TypeMapping getTypeMapping() { - return GenericJavaJoinTable.this.getRelationshipStrategy().getRelationship().getTypeMapping(); - } - - public PersistentAttribute getPersistentAttribute() { - return GenericJavaJoinTable.this.getPersistentAttribute(); + return this.getRelationship().getTypeMapping(); } /** @@ -385,7 +383,7 @@ public class GenericJavaJoinTable /** * If there is a specified table name it needs to be the same - * the default table name. the table is always the join table + * the default table name. The table is always the join table. */ public boolean tableNameIsInvalid(String tableName) { return Tools.valuesAreDifferent(this.getDefaultTableName(), tableName); @@ -415,6 +413,14 @@ public class GenericJavaJoinTable public TextRange getValidationTextRange(CompilationUnit astRoot) { return GenericJavaJoinTable.this.getValidationTextRange(astRoot); } + + protected JavaRelationship getRelationship() { + return this.getRelationshipStrategy().getRelationship(); + } + + protected JavaJoinTableRelationshipStrategy getRelationshipStrategy() { + return GenericJavaJoinTable.this.getRelationshipStrategy(); + } } @@ -430,7 +436,7 @@ public class GenericJavaJoinTable } public Entity getRelationshipTarget() { - return GenericJavaJoinTable.this.getRelationshipStrategy().getRelationship().getEntity(); + return this.getRelationship().getEntity(); } public String getAttributeName() { @@ -449,8 +455,8 @@ public class GenericJavaJoinTable return GenericJavaJoinTable.this.joinColumnsSize(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return GenericJavaJoinTable.this.getParent().buildJoinTableJoinColumnValidator((JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return this.getRelationshipStrategy().buildJoinTableJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); } } @@ -489,8 +495,8 @@ public class GenericJavaJoinTable return GenericJavaJoinTable.this.inverseJoinColumnsSize(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return GenericJavaJoinTable.this.getParent().buildJoinTableInverseJoinColumnValidator((JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return this.getRelationshipStrategy().buildJoinTableInverseJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaMappingJoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaMappingJoinTableRelationshipStrategy.java index 8979021ad6..7664f5c9d2 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaMappingJoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaMappingJoinTableRelationshipStrategy.java @@ -11,11 +11,11 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; -import org.eclipse.jpt.jpa.core.context.Table; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.java.JavaMappingJoinTableRelationship; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; @@ -25,11 +25,14 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.InverseJoinColumnValidator import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinColumnValidator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableValidator; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinTableRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentAttribute; import org.eclipse.jpt.jpa.core.resource.java.JoinTableAnnotation; public class GenericJavaMappingJoinTableRelationshipStrategy extends AbstractJavaJoinTableRelationshipStrategy + implements JavaMappingJoinTableRelationshipStrategy2_0 { public GenericJavaMappingJoinTableRelationshipStrategy(JavaMappingJoinTableRelationship parent) { super(parent); @@ -73,6 +76,10 @@ public class GenericJavaMappingJoinTableRelationshipStrategy return this.getJpaPlatformVariation().isJoinTableOverridable(); } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return overrideRelationship.getJoinTableStrategy(); + } + // ********** validation ********** @@ -88,15 +95,15 @@ public class GenericJavaMappingJoinTableRelationshipStrategy return this.getRelationshipMapping().getPersistentAttribute(); } - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { return new JoinTableValidator(this.getPersistentAttribute(), (JoinTable) table, textRangeResolver); } - public JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new JoinColumnValidator(this.getPersistentAttribute(), column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new InverseJoinColumnValidator(this.getPersistentAttribute(), column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOrderable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOrderable.java index 906b7044ba..a661cf6e5d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOrderable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOrderable.java @@ -14,11 +14,11 @@ import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.Filter; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; @@ -319,7 +319,7 @@ public class GenericJavaOrderable } protected JavaOrderColumn2_0 buildOrderColumn() { - JavaNamedColumn.Owner columnOwner = new OrderColumnOwner(); + JavaReadOnlyNamedColumn.Owner columnOwner = new OrderColumnOwner(); return this.isJpa2_0Compatible() ? this.getJpaFactory2_0().buildJavaOrderColumn(this, columnOwner) : new GenericJavaOrderColumn2_0(this, columnOwner); @@ -453,7 +453,7 @@ public class GenericJavaOrderable // ********** order column owner (JPA 2.0) ********** protected class OrderColumnOwner - implements JavaNamedColumn.Owner + implements JavaReadOnlyNamedColumn.Owner { public String getDefaultTableName() { return GenericJavaOrderable.this.getDefaultTableName(); @@ -475,7 +475,7 @@ public class GenericJavaOrderable return GenericJavaOrderable.this.getValidationTextRange(astRoot); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { return new OrderColumnValidator(this.getPersistentAttribute(), (OrderColumn2_0) column, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOverrideRelationship.java index e6804dbb4f..f6547648bb 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaOverrideRelationship.java @@ -17,7 +17,11 @@ import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.MappedByRelationship; import org.eclipse.jpt.jpa.core.context.OverrideRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.ReadOnlyOverrideRelationship; import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; @@ -28,10 +32,18 @@ import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipStrategy; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; import org.eclipse.jpt.jpa.core.internal.context.java.GenericJavaOverrideJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.GenericJavaOverrideJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.MappingRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverride2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.resource.java.AssociationOverrideAnnotation; +import org.eclipse.jpt.jpa.db.Table; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -85,13 +97,37 @@ public class GenericJavaOverrideRelationship } protected JavaRelationshipStrategy buildStrategy() { - if (this.isJpa2_0Compatible()) { - if (this.joinColumnStrategy.hasSpecifiedJoinColumns()) { - return this.joinColumnStrategy; - } - return this.joinTableStrategy; - } - return this.joinColumnStrategy; + return this.isJpa2_0Compatible() ? + this.buildStrategy2_0() : + this.joinColumnStrategy; + } + + /** + * The overridden mapping determines the override's strategy. + */ + protected JavaRelationshipStrategy buildStrategy2_0() { + MappingRelationshipStrategy2_0 mappingStrategy = this.getMappingStrategy(); + return (mappingStrategy != null) ? + (JavaRelationshipStrategy) mappingStrategy.selectOverrideStrategy(this) : + this.buildMissingMappingStrategy(); + } + + /** + * Get the strategy from the overridden mapping. + */ + protected MappingRelationshipStrategy2_0 getMappingStrategy() { + RelationshipMapping mapping = this.getMapping(); + return (mapping == null) ? null : (MappingRelationshipStrategy2_0) mapping.getRelationship().getStrategy(); + } + + /** + * Return the strategy to use when the override's name does not match the + * name of an appropriate relationship mapping. + */ + protected JavaRelationshipStrategy buildMissingMappingStrategy() { + return this.joinColumnStrategy.hasSpecifiedJoinColumns() ? + this.joinColumnStrategy : + this.joinTableStrategy; } @@ -106,11 +142,11 @@ public class GenericJavaOverrideRelationship } public void setStrategyToJoinColumn() { - this.joinColumnStrategy.addStrategy(); - this.joinTableStrategy.removeStrategy(); + throw new UnsupportedOperationException(); } public boolean mayHaveDefaultJoinColumn() { + // association overrides do not have defaults return false; } @@ -130,12 +166,12 @@ public class GenericJavaOverrideRelationship } public void setStrategyToJoinTable() { - this.joinTableStrategy.addStrategy(); - this.joinColumnStrategy.removeStrategy(); + throw new UnsupportedOperationException(); } public boolean mayHaveDefaultJoinTable() { - return this.isVirtual() && this.strategyIsJoinTable(); + // association overrides do not have defaults + return false; } protected JavaJoinTableRelationshipStrategy buildJoinTableStrategy() { @@ -192,12 +228,44 @@ public class GenericJavaOverrideRelationship return (JavaAssociationOverride) super.getParent(); } - public JavaAssociationOverride getAssociationOverride() { + protected JavaAssociationOverride getAssociationOverride() { return this.getParent(); } + protected JavaAssociationOverride2_0 getAssociationOverride2_0() { + return (JavaAssociationOverride2_0) this.getAssociationOverride(); + } + public TypeMapping getTypeMapping() { - return this.getAssociationOverride().getContainer().getTypeMapping(); + return this.getAssociationOverride().getTypeMapping(); + } + + public String getAttributeName() { + return this.getAssociationOverride().getName(); + } + + public boolean tableNameIsInvalid(String tableName) { + return this.getAssociationOverride().tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return this.getAssociationOverride().candidateTableNames(); + } + + public Table resolveDbTable(String tableName) { + return this.getAssociationOverride().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getAssociationOverride().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride().buildColumnValidator(column, owner, textRangeResolver); + } + + public AssociationOverrideAnnotation getOverrideAnnotation() { + return this.getAssociationOverride().getOverrideAnnotation(); } public Entity getEntity() { @@ -223,12 +291,7 @@ public class GenericJavaOverrideRelationship return result; } - result = this.joinColumnStrategy.javaCompletionProposals(pos, filter, astRoot); - if (result != null) { - return result; - } - - return this.joinTableStrategy.javaCompletionProposals(pos, filter, astRoot); + return this.strategy.javaCompletionProposals(pos, filter, astRoot); } @@ -241,7 +304,18 @@ public class GenericJavaOverrideRelationship @Override public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { super.validate(messages, reporter, astRoot); - this.joinColumnStrategy.validate(messages, reporter, astRoot); - this.joinTableStrategy.validate(messages, reporter, astRoot); + this.strategy.validate(messages, reporter, astRoot); + } + + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableValidator(table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaPrimaryKeyJoinColumn.java index a692c30c1d..faee3b1904 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaPrimaryKeyJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaPrimaryKeyJoinColumn.java @@ -16,9 +16,9 @@ import org.eclipse.jpt.common.utility.Filter; import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.jpa.core.context.java.JavaBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaNamedColumn; import org.eclipse.jpt.jpa.core.internal.context.java.JavaPrimaryKeyJoinColumnTextRangeResolver; @@ -30,17 +30,17 @@ import org.eclipse.jpt.jpa.db.Table; * Java primary key join column */ public class GenericJavaPrimaryKeyJoinColumn - extends AbstractJavaNamedColumn<PrimaryKeyJoinColumnAnnotation, JavaBaseJoinColumn.Owner> + extends AbstractJavaNamedColumn<PrimaryKeyJoinColumnAnnotation, JavaReadOnlyBaseJoinColumn.Owner> implements JavaPrimaryKeyJoinColumn { - /** @see AbstractJavaNamedColumn#AbstractJavaNamedColumn(org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode, org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.java.NamedColumnAnnotation) */ + /** @see AbstractJavaNamedColumn#AbstractJavaNamedColumn(org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode, org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.java.NamedColumnAnnotation) */ protected /* final */ PrimaryKeyJoinColumnAnnotation columnAnnotation; // never null protected String specifiedReferencedColumnName; protected String defaultReferencedColumnName; - public GenericJavaPrimaryKeyJoinColumn(JavaJpaContextNode parent, JavaBaseJoinColumn.Owner owner, PrimaryKeyJoinColumnAnnotation columnAnnotation) { + public GenericJavaPrimaryKeyJoinColumn(JavaJpaContextNode parent, JavaReadOnlyBaseJoinColumn.Owner owner, PrimaryKeyJoinColumnAnnotation columnAnnotation) { super(parent, owner, columnAnnotation); this.specifiedReferencedColumnName = this.buildSpecifiedReferencedColumnName(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaReferenceTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaReferenceTable.java index 5f8c567183..5c71d1f567 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaReferenceTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaReferenceTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -25,6 +25,7 @@ import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyReferenceTable; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaReferenceTable; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; @@ -44,7 +45,7 @@ public abstract class GenericJavaReferenceTable<A extends ReferenceTableAnnotati { protected final Vector<JavaJoinColumn> specifiedJoinColumns = new Vector<JavaJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter = new SpecifiedJoinColumnContainerAdapter(); - protected final JavaJoinColumn.Owner joinColumnOwner; + protected final JavaReadOnlyJoinColumn.Owner joinColumnOwner; protected JavaJoinColumn defaultJoinColumn; @@ -86,7 +87,7 @@ public abstract class GenericJavaReferenceTable<A extends ReferenceTableAnnotati return this.hasSpecifiedJoinColumns() ? this.specifiedJoinColumnsSize() : this.getDefaultJoinColumnsSize(); } - public void convertDefaultToSpecifiedJoinColumn() { + public void convertDefaultJoinColumnToSpecified() { MappingTools.convertReferenceTableDefaultToSpecifiedJoinColumn(this); } @@ -195,7 +196,7 @@ public abstract class GenericJavaReferenceTable<A extends ReferenceTableAnnotati } } - protected abstract JavaJoinColumn.Owner buildJoinColumnOwner(); + protected abstract JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner(); // ********** default join column ********** @@ -257,7 +258,7 @@ public abstract class GenericJavaReferenceTable<A extends ReferenceTableAnnotati return this.buildJoinColumn(this.joinColumnOwner, joinColumnAnnotation); } - protected JavaJoinColumn buildJoinColumn(JavaJoinColumn.Owner jcOwner, JoinColumnAnnotation joinColumnAnnotation) { + protected JavaJoinColumn buildJoinColumn(JavaReadOnlyJoinColumn.Owner jcOwner, JoinColumnAnnotation joinColumnAnnotation) { return this.getJpaFactory().buildJavaJoinColumn(this, jcOwner, joinColumnAnnotation); } @@ -280,7 +281,7 @@ public abstract class GenericJavaReferenceTable<A extends ReferenceTableAnnotati if (result != null) { return result; } - for (JavaJoinColumn column : CollectionTools.iterable(this.joinColumns())) { + for (JavaJoinColumn column : this.getJoinColumns()) { result = column.javaCompletionProposals(pos, filter, astRoot); if (result != null) { return result; @@ -305,13 +306,7 @@ public abstract class GenericJavaReferenceTable<A extends ReferenceTableAnnotati } protected void validateJoinColumns(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { - this.validateJoinColumns(this.joinColumns(), messages, reporter, astRoot); - } - - protected void validateJoinColumns(Iterator<JavaJoinColumn> joinColumns, List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { - while (joinColumns.hasNext()) { - joinColumns.next().validate(messages, reporter, astRoot); - } + this.validateNodes(this.getJoinColumns(), messages, reporter, astRoot); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaSecondaryTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaSecondaryTable.java index d65b862cc4..169e87ecf3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaSecondaryTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaSecondaryTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -21,14 +21,13 @@ import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaEntity; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSecondaryTable; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; @@ -55,7 +54,7 @@ public class GenericJavaSecondaryTable protected final Vector<JavaPrimaryKeyJoinColumn> specifiedPrimaryKeyJoinColumns = new Vector<JavaPrimaryKeyJoinColumn>(); protected final SpecifiedPrimaryKeyJoinColumnContainerAdapter specifiedPrimaryKeyJoinColumnContainerAdapter = new SpecifiedPrimaryKeyJoinColumnContainerAdapter(); - protected final JavaBaseJoinColumn.Owner primaryKeyJoinColumnOwner; + protected final JavaReadOnlyBaseJoinColumn.Owner primaryKeyJoinColumnOwner; protected JavaPrimaryKeyJoinColumn defaultPrimaryKeyJoinColumn; @@ -225,7 +224,7 @@ public class GenericJavaSecondaryTable } } - protected JavaBaseJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { + protected JavaReadOnlyBaseJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { return new PrimaryKeyJoinColumnOwner(); } @@ -352,7 +351,7 @@ public class GenericJavaSecondaryTable // ********** primary key join column owner adapter ********** protected class PrimaryKeyJoinColumnOwner - implements JavaBaseJoinColumn.Owner + implements JavaReadOnlyBaseJoinColumn.Owner { protected JavaEntity getEntity() { return GenericJavaSecondaryTable.this.getEntity(); @@ -393,8 +392,8 @@ public class GenericJavaSecondaryTable return GenericJavaSecondaryTable.this.getValidationTextRange(astRoot); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new SecondaryTablePrimaryKeyJoinColumnValidator(GenericJavaSecondaryTable.this, (BaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new SecondaryTablePrimaryKeyJoinColumnValidator(GenericJavaSecondaryTable.this, (ReadOnlyBaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAssociationOverride.java index 2333e0c4d1..d7f6b3b98d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAssociationOverride.java @@ -9,20 +9,30 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; -import org.eclipse.jpt.jpa.core.context.Relationship; +import java.util.List; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAssociationOverride; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualOverrideRelationship; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaVirtualOverride; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverrideContainer2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaVirtualAssociationOverride2_0; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Virtual Java association override */ public class GenericJavaVirtualAssociationOverride extends AbstractJavaVirtualOverride<JavaAssociationOverrideContainer> - implements JavaVirtualAssociationOverride + implements JavaVirtualAssociationOverride2_0 { protected final JavaVirtualOverrideRelationship relationship; @@ -47,6 +57,10 @@ public class GenericJavaVirtualAssociationOverride return this.getContainer().getRelationshipMapping(this.name); } + protected JavaAssociationOverrideContainer2_0 getContainer2_0() { + return (JavaAssociationOverrideContainer2_0) this.getContainer(); + } + // ********** relationship ********** @@ -62,7 +76,28 @@ public class GenericJavaVirtualAssociationOverride return this.getJpaFactory().buildJavaVirtualOverrideRelationship(this); } - public Relationship resolveOverriddenRelationship() { + public ReadOnlyRelationship resolveOverriddenRelationship() { return this.getContainer().resolveOverriddenRelationship(this.name); } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + this.relationship.validate(messages, reporter, astRoot); + } + + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableValidator(this, table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableJoinColumnValidator(this, column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableInverseJoinColumnValidator(this, column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAttributeOverride.java index 9049ad974d..90e3122a24 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,14 +9,21 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; -import org.eclipse.jpt.jpa.core.context.Column; +import java.util.List; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; -import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAttributeOverride; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualColumn; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaVirtualOverride; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Virtual Java attribute override @@ -62,13 +69,10 @@ public class GenericJavaVirtualAttributeOverride // ********** column owner implementation ********** - public TypeMapping getTypeMapping() { - return this.getContainer().getTypeMapping(); - } - + @Override public String getDefaultTableName() { String overriddenColumnTable = this.getOverriddenColumnTable(); - return (overriddenColumnTable != null) ? overriddenColumnTable : this.getContainer().getDefaultTableName(); + return (overriddenColumnTable != null) ? overriddenColumnTable : super.getDefaultTableName(); } protected String getOverriddenColumnTable() { @@ -87,7 +91,20 @@ public class GenericJavaVirtualAttributeOverride return (overriddenColumn == null) ? null : overriddenColumn.getName(); } - public Column resolveOverriddenColumn() { + public ReadOnlyColumn resolveOverriddenColumn() { return this.getContainer().resolveOverriddenColumn(this.name); } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, (ReadOnlyBaseColumn) col, this, (BaseColumnTextRangeResolver) textRangeResolver); + } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + this.column.validate(messages, reporter, astRoot); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualColumn.java index 0429f71344..342eec168b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; -import org.eclipse.jpt.jpa.core.context.Column; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualColumn; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaVirtualBaseColumn; @@ -18,7 +18,7 @@ import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaVirtualBaseCol * Java virtual column */ public class GenericJavaVirtualColumn - extends AbstractJavaVirtualBaseColumn<JavaVirtualColumn.Owner, Column> + extends AbstractJavaVirtualBaseColumn<JavaVirtualColumn.Owner, ReadOnlyColumn> implements JavaVirtualColumn { protected Integer specifiedLength; @@ -56,7 +56,7 @@ public class GenericJavaVirtualColumn // ********** column ********** @Override - public Column getOverriddenColumn() { + public ReadOnlyColumn getOverriddenColumn() { return this.owner.resolveOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualJoinColumn.java index 6848cb9c65..e80f704d0c 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,27 +9,33 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; -import org.eclipse.jpt.jpa.core.context.JoinColumn; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaVirtualBaseColumn; +import org.eclipse.jpt.jpa.core.internal.context.java.JavaJoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.db.Column; +import org.eclipse.jpt.jpa.db.Table; /** * Java virtual join column */ public class GenericJavaVirtualJoinColumn - extends AbstractJavaVirtualBaseColumn<ReadOnlyJoinColumn.Owner, JoinColumn> + extends AbstractJavaVirtualBaseColumn<JavaReadOnlyJoinColumn.Owner, ReadOnlyJoinColumn> implements JavaVirtualJoinColumn { - protected final JoinColumn overriddenColumn; + protected final ReadOnlyJoinColumn overriddenColumn; protected String specifiedReferencedColumnName; protected String defaultReferencedColumnName; - public GenericJavaVirtualJoinColumn(JavaJpaContextNode parent, ReadOnlyJoinColumn.Owner owner, JoinColumn overriddenColumn) { + public GenericJavaVirtualJoinColumn(JavaJpaContextNode parent, JavaReadOnlyJoinColumn.Owner owner, ReadOnlyJoinColumn overriddenColumn) { super(parent, owner); this.overriddenColumn = overriddenColumn; } @@ -49,7 +55,7 @@ public class GenericJavaVirtualJoinColumn // ********** column ********** @Override - public JoinColumn getOverriddenColumn() { + public ReadOnlyJoinColumn getOverriddenColumn() { return this.overriddenColumn; } @@ -93,10 +99,42 @@ public class GenericJavaVirtualJoinColumn } + // ********** database stuff ********** + + public Table getReferencedColumnDbTable() { + return this.owner.getReferencedColumnDbTable(); + } + + protected Column getReferencedDbColumn() { + Table table = this.getReferencedColumnDbTable(); + return (table == null) ? null : table.getColumnForIdentifier(this.getReferencedColumnName()); + } + + public boolean referencedColumnIsResolved() { + return this.getReferencedDbColumn() != null; + } + + // ********** misc ********** + public boolean isVirtual() { + return true; + } + @Override protected String buildDefaultName() { return MappingTools.buildJoinColumnDefaultName(this, this.owner); } + + + // ********** validation ********** + + @Override + protected NamedColumnTextRangeResolver buildTextRangeResolver(CompilationUnit astRoot) { + return new JavaJoinColumnTextRangeResolver(this, astRoot); + } + + public TextRange getReferencedColumnNameTextRange(CompilationUnit astRoot) { + return this.getValidationTextRange(astRoot); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.java index 0ee4c21397..f4b1cd9e31 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.java @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; +import java.util.Iterator; +import java.util.List; import java.util.ListIterator; import java.util.Vector; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -19,23 +21,29 @@ import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; +import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.JoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; -import org.eclipse.jpt.jpa.core.context.Relationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinColumn; -import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinColumnRelationship; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualOverrideRelationship; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy extends AbstractJavaJpaContextNode @@ -43,12 +51,12 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy { protected final Vector<JavaVirtualJoinColumn> specifiedJoinColumns = new Vector<JavaVirtualJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter; - protected final ReadOnlyJoinColumn.Owner joinColumnOwner; + protected final JavaReadOnlyJoinColumn.Owner joinColumnOwner; protected JavaVirtualJoinColumn defaultJoinColumn; - public GenericJavaVirtualOverrideJoinColumnRelationshipStrategy(JavaVirtualJoinColumnRelationship parent) { + public GenericJavaVirtualOverrideJoinColumnRelationshipStrategy(JavaVirtualOverrideRelationship parent) { super(parent); this.specifiedJoinColumnContainerAdapter = this.buildSpecifiedJoinColumnContainerAdapter(); this.joinColumnOwner = this.buildJoinColumnOwner(); @@ -106,10 +114,10 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy ContextContainerTools.update(this.specifiedJoinColumnContainerAdapter); } - protected Iterable<JoinColumn> getOverriddenSpecifiedJoinColumns() { - JoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); + protected Iterable<ReadOnlyJoinColumn> getOverriddenSpecifiedJoinColumns() { + ReadOnlyJoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); return (overriddenStrategy == null) ? - EmptyIterable.<JoinColumn>instance() : + EmptyIterable.<ReadOnlyJoinColumn>instance() : CollectionTools.iterable(overriddenStrategy.specifiedJoinColumns()); } @@ -117,7 +125,7 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy this.moveItemInList(index, joinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); } - protected JavaVirtualJoinColumn addSpecifiedJoinColumn(int index, JoinColumn joinColumn) { + protected JavaVirtualJoinColumn addSpecifiedJoinColumn(int index, ReadOnlyJoinColumn joinColumn) { JavaVirtualJoinColumn virtualJoinColumn = this.buildJoinColumn(joinColumn); this.addItemToList(index, virtualJoinColumn, this.specifiedJoinColumns, SPECIFIED_JOIN_COLUMNS_LIST); return virtualJoinColumn; @@ -135,21 +143,21 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy * specified join column container adapter */ protected class SpecifiedJoinColumnContainerAdapter - implements ContextContainerTools.Adapter<JavaVirtualJoinColumn, JoinColumn> + implements ContextContainerTools.Adapter<JavaVirtualJoinColumn, ReadOnlyJoinColumn> { public Iterable<JavaVirtualJoinColumn> getContextElements() { return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.getSpecifiedJoinColumns(); } - public Iterable<JoinColumn> getResourceElements() { + public Iterable<ReadOnlyJoinColumn> getResourceElements() { return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.getOverriddenSpecifiedJoinColumns(); } - public JoinColumn getResourceElement(JavaVirtualJoinColumn contextElement) { + public ReadOnlyJoinColumn getResourceElement(JavaVirtualJoinColumn contextElement) { return contextElement.getOverriddenColumn(); } public void moveContextElement(int index, JavaVirtualJoinColumn element) { GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.moveSpecifiedJoinColumn(index, element); } - public void addContextElement(int index, JoinColumn resourceElement) { + public void addContextElement(int index, ReadOnlyJoinColumn resourceElement) { GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.addSpecifiedJoinColumn(index, resourceElement); } public void removeContextElement(JavaVirtualJoinColumn element) { @@ -157,7 +165,7 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy } } - protected ReadOnlyJoinColumn.Owner buildJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -185,7 +193,7 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy } protected void updateDefaultJoinColumn() { - JoinColumn overriddenDefaultJoinColumn = this.getOverriddenDefaultJoinColumn(); + ReadOnlyJoinColumn overriddenDefaultJoinColumn = this.getOverriddenDefaultJoinColumn(); if (overriddenDefaultJoinColumn == null) { if (this.defaultJoinColumn != null) { this.setDefaultJoinColumn(null); @@ -199,8 +207,8 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy } } - protected JoinColumn getOverriddenDefaultJoinColumn() { - JoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); + protected ReadOnlyJoinColumn getOverriddenDefaultJoinColumn() { + ReadOnlyJoinColumnRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); return (overriddenStrategy == null) ? null : overriddenStrategy.getDefaultJoinColumn(); } @@ -208,25 +216,25 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy // ********** misc ********** @Override - public JavaVirtualJoinColumnRelationship getParent() { - return (JavaVirtualJoinColumnRelationship) super.getParent(); + public JavaVirtualOverrideRelationship getParent() { + return (JavaVirtualOverrideRelationship) super.getParent(); } - public JavaVirtualJoinColumnRelationship getRelationship() { + public JavaVirtualOverrideRelationship getRelationship() { return this.getParent(); } - protected JoinColumnRelationshipStrategy getOverriddenStrategy() { - JoinColumnRelationship relationship = this.getOverriddenJoinColumnRelationship(); + protected ReadOnlyJoinColumnRelationshipStrategy getOverriddenStrategy() { + ReadOnlyJoinColumnRelationship relationship = this.getOverriddenJoinColumnRelationship(); return (relationship == null) ? null : relationship.getJoinColumnStrategy(); } - protected JoinColumnRelationship getOverriddenJoinColumnRelationship() { - Relationship relationship = this.resolveOverriddenRelationship(); - return (relationship instanceof JoinColumnRelationship) ? (JoinColumnRelationship) relationship : null; + protected ReadOnlyJoinColumnRelationship getOverriddenJoinColumnRelationship() { + ReadOnlyRelationship relationship = this.resolveOverriddenRelationship(); + return (relationship instanceof ReadOnlyJoinColumnRelationship) ? (ReadOnlyJoinColumnRelationship) relationship : null; } - protected Relationship resolveOverriddenRelationship() { + protected ReadOnlyRelationship resolveOverriddenRelationship() { return this.getRelationship().resolveOverriddenRelationship(); } @@ -238,13 +246,15 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy public TypeMapping getRelationshipSource() { return this.isTargetForeignKey() ? + // relationship mapping is not null this.getRelationshipMapping().getResolvedTargetEntity() : - this.getAssociationOverrideContainer().getTypeMapping(); + this.getRelationship().getTypeMapping(); } public TypeMapping getRelationshipTarget() { return this.isTargetForeignKey() ? - this.getAssociationOverrideContainer().getTypeMapping() : + this.getRelationship().getTypeMapping() : + // relationship mapping may still be null this.getRelationshipMappingTargetEntity(); } @@ -259,26 +269,56 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy } protected RelationshipMapping getRelationshipMapping() { - return this.getAssociationOverride().getMapping(); + return this.getRelationship().getMapping(); } - protected JavaReadOnlyAssociationOverride getAssociationOverride() { - return ((JavaVirtualOverrideRelationship) this.getRelationship()).getAssociationOverride(); + public String getTableName() { + return this.isTargetForeignKey() ? + this.getTargetDefaultTableName() : + this.getRelationship().getDefaultTableName(); } - protected JavaAssociationOverrideContainer getAssociationOverrideContainer() { - return this.getAssociationOverride().getContainer(); + protected String getTargetDefaultTableName() { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping == null) ? null : typeMapping.getPrimaryTableName(); } - public String getTableName() { + protected Table resolveDbTable(String tableName) { return this.isTargetForeignKey() ? - this.getSourceTableName() : - this.getAssociationOverrideContainer().getDefaultTableName(); + this.resolveTargetDbTable(tableName) : + this.getRelationship().resolveDbTable(tableName); } - protected String getSourceTableName() { - TypeMapping typeMapping = this.getRelationshipSource(); - return (typeMapping == null) ? null : typeMapping.getPrimaryTableName(); + protected Table resolveTargetDbTable(String tableName) { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping == null) ? null : typeMapping.resolveDbTable(tableName); + } + + protected boolean tableNameIsInvalid(String tableName) { + return this.isTargetForeignKey() ? + this.targetTableNameIsInvalid(tableName) : + this.getRelationship().tableNameIsInvalid(tableName); + } + + protected boolean targetTableNameIsInvalid(String tableName) { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping != null) && typeMapping.tableNameIsInvalid(tableName); + } + + protected Table getReferencedColumnDbTable() { + TypeMapping relationshipTarget = this.getRelationshipTarget(); + return (relationshipTarget == null) ? null : relationshipTarget.getPrimaryDbTable(); + } + + protected Iterator<String> candidateTableNames() { + return this.isTargetForeignKey() ? + this.targetCandidateTableNames() : + this.getRelationship().candidateTableNames(); + } + + protected Iterator<String> targetCandidateTableNames() { + TypeMapping typeMapping = this.getRelationshipMapping().getResolvedTargetEntity(); + return (typeMapping != null) ? typeMapping.allAssociatedTableNames() : EmptyIterator.<String>instance(); } public TextRange getValidationTextRange(CompilationUnit astRoot) { @@ -286,18 +326,29 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy } protected String getAttributeName() { - return this.getAssociationOverride().getName(); + return this.getRelationship().getAttributeName(); } - protected JavaVirtualJoinColumn buildJoinColumn(JoinColumn overriddenJoinColumn) { + protected JavaVirtualJoinColumn buildJoinColumn(ReadOnlyJoinColumn overriddenJoinColumn) { return this.getJpaFactory().buildJavaVirtualJoinColumn(this, this.joinColumnOwner, overriddenJoinColumn); } + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + for (JavaVirtualJoinColumn joinColumn : this.getJoinColumns()) { + joinColumn.validate(messages, reporter, astRoot); + } + } + + // ********** join column owner ********** protected class JoinColumnOwner - implements ReadOnlyJoinColumn.Owner + implements JavaReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -324,6 +375,22 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.getRelationshipTargetEntity(); } + public boolean tableNameIsInvalid(String tableName) { + return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.candidateTableNames(); + } + + public Table resolveDbTable(String tableName) { + return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.resolveDbTable(tableName); + } + + public Table getReferencedColumnDbTable() { + return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.getReferencedColumnDbTable(); + } + public boolean joinColumnIsDefault(ReadOnlyBaseJoinColumn joinColumn) { return false; } @@ -331,5 +398,13 @@ public class GenericJavaVirtualOverrideJoinColumnRelationshipStrategy public int joinColumnsSize() { return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.joinColumnsSize(); } + + public TextRange getValidationTextRange(CompilationUnit astRoot) { + return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.getValidationTextRange(astRoot); + } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return GenericJavaVirtualOverrideJoinColumnRelationshipStrategy.this.getRelationship().buildColumnValidator((ReadOnlyBaseColumn) column, this, (BaseColumnTextRangeResolver) textRangeResolver); + } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideRelationship.java index 9989abfa97..d7bbcb2482 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualOverrideRelationship.java @@ -9,10 +9,17 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; +import java.util.Iterator; +import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.OverrideRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.Relationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; @@ -20,9 +27,18 @@ import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAssociationOverride; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualRelationshipStrategy; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.MappingRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverride2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaVirtualOverrideRelationship2_0; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericJavaVirtualOverrideRelationship extends AbstractJavaJpaContextNode @@ -67,13 +83,37 @@ public class GenericJavaVirtualOverrideRelationship } protected JavaVirtualRelationshipStrategy buildStrategy() { - if (this.isJpa2_0Compatible()) { - if (this.joinColumnStrategy.hasSpecifiedJoinColumns()) { - return this.joinColumnStrategy; - } - return this.joinTableStrategy; - } - return this.joinColumnStrategy; + return this.isJpa2_0Compatible() ? + this.buildStrategy2_0() : + this.joinColumnStrategy; + } + + /** + * The overridden mapping determines the override's strategy. + */ + protected JavaVirtualRelationshipStrategy buildStrategy2_0() { + MappingRelationshipStrategy2_0 mappingStrategy = this.getMappingStrategy(); + return (mappingStrategy != null) ? + (JavaVirtualRelationshipStrategy) mappingStrategy.selectOverrideStrategy(this) : + this.buildMissingMappingStrategy(); + } + + /** + * Get the strategy from the overridden mapping. + */ + protected MappingRelationshipStrategy2_0 getMappingStrategy() { + RelationshipMapping mapping = this.getMapping(); + return (mapping == null) ? null : (MappingRelationshipStrategy2_0) mapping.getRelationship().getStrategy(); + } + + /** + * Return the strategy to use when the override's name does not match the + * name of an appropriate relationship mapping. + */ + protected JavaVirtualRelationshipStrategy buildMissingMappingStrategy() { + return this.joinColumnStrategy.hasSpecifiedJoinColumns() ? + this.joinColumnStrategy : + this.joinTableStrategy; } @@ -88,6 +128,7 @@ public class GenericJavaVirtualOverrideRelationship } public boolean mayHaveDefaultJoinColumn() { + // association overrides do not have defaults return false; } @@ -107,7 +148,8 @@ public class GenericJavaVirtualOverrideRelationship } public boolean mayHaveDefaultJoinTable() { - return this.isVirtual(); + // association overrides do not have defaults + return false; } protected JavaVirtualJoinTableRelationshipStrategy buildJoinTableStrategy() { @@ -135,12 +177,40 @@ public class GenericJavaVirtualOverrideRelationship return (JavaVirtualAssociationOverride) super.getParent(); } - public JavaVirtualAssociationOverride getAssociationOverride() { + protected JavaVirtualAssociationOverride getAssociationOverride() { return this.getParent(); } + protected JavaAssociationOverride2_0 getAssociationOverride2_0() { + return (JavaAssociationOverride2_0) this.getAssociationOverride(); + } + public TypeMapping getTypeMapping() { - return this.getAssociationOverride().getContainer().getTypeMapping(); + return this.getAssociationOverride().getTypeMapping(); + } + + public String getAttributeName() { + return this.getAssociationOverride().getName(); + } + + public boolean tableNameIsInvalid(String tableName) { + return this.getAssociationOverride().tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return this.getAssociationOverride().candidateTableNames(); + } + + public Table resolveDbTable(String tableName) { + return this.getAssociationOverride().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getAssociationOverride().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride().buildColumnValidator(column, owner, textRangeResolver); } public Entity getEntity() { @@ -156,7 +226,7 @@ public class GenericJavaVirtualOverrideRelationship return this.getAssociationOverride().getMapping(); } - public Relationship resolveOverriddenRelationship() { + public ReadOnlyRelationship resolveOverriddenRelationship() { return this.getAssociationOverride().resolveOverriddenRelationship(); } @@ -166,4 +236,22 @@ public class GenericJavaVirtualOverrideRelationship public TextRange getValidationTextRange(CompilationUnit astRoot) { return this.getAssociationOverride().getValidationTextRange(astRoot); } + + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + this.strategy.validate(messages, reporter, astRoot); + } + + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableValidator(table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualUniqueConstraint.java index e0343034ad..0b5c080248 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualUniqueConstraint.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaVirtualUniqueConstraint.java @@ -11,7 +11,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.UniqueConstraint; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualUniqueConstraint; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaReadOnlyUniqueConstraint; @@ -20,10 +20,10 @@ public class GenericJavaVirtualUniqueConstraint extends AbstractJavaReadOnlyUniqueConstraint implements JavaVirtualUniqueConstraint { - protected final UniqueConstraint overriddenUniqueConstraint; + protected final ReadOnlyUniqueConstraint overriddenUniqueConstraint; - public GenericJavaVirtualUniqueConstraint(JavaJpaContextNode parent, UniqueConstraint overriddenUniqueConstraint) { + public GenericJavaVirtualUniqueConstraint(JavaJpaContextNode parent, ReadOnlyUniqueConstraint overriddenUniqueConstraint) { super(parent); this.overriddenUniqueConstraint = overriddenUniqueConstraint; } @@ -47,7 +47,7 @@ public class GenericJavaVirtualUniqueConstraint // ********** misc ********** - public UniqueConstraint getOverriddenUniqueConstraint() { + public ReadOnlyUniqueConstraint getOverriddenUniqueConstraint() { return this.overriddenUniqueConstraint; } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinColumnRelationshipStrategy.java index 9c1efb0580..9d58d77640 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinColumnRelationshipStrategy.java @@ -15,12 +15,14 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.iterators.EmptyListIterator; import org.eclipse.jpt.jpa.core.context.JoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinColumnRelationshipStrategy2_0; import org.eclipse.jpt.jpa.db.Table; /** @@ -30,7 +32,7 @@ import org.eclipse.jpt.jpa.db.Table; */ public class NullJavaJoinColumnRelationshipStrategy extends AbstractJavaJpaContextNode - implements JavaJoinColumnRelationshipStrategy + implements JavaMappingJoinColumnRelationshipStrategy2_0 { public NullJavaJoinColumnRelationshipStrategy(JavaJoinColumnRelationship parent) { super(parent); @@ -133,6 +135,10 @@ public class NullJavaJoinColumnRelationshipStrategy // NOP } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; + } + public void addStrategy() { // NOP } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinTableRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinTableRelationshipStrategy.java index d9498d50ea..547a93fa4c 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinTableRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/NullJavaJoinTableRelationshipStrategy.java @@ -11,21 +11,22 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTable; import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationship; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaMappingJoinTableRelationshipStrategy2_0; import org.eclipse.jpt.jpa.core.resource.java.JoinTableAnnotation; import org.eclipse.jpt.jpa.db.Table; public class NullJavaJoinTableRelationshipStrategy extends AbstractJavaJpaContextNode - implements JavaJoinTableRelationshipStrategy + implements JavaMappingJoinTableRelationshipStrategy2_0 { public NullJavaJoinTableRelationshipStrategy(JavaJoinTableRelationship parent) { super(parent); @@ -89,6 +90,10 @@ public class NullJavaJoinTableRelationshipStrategy return null; } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; + } + public void addStrategy() { // NOP } @@ -105,11 +110,11 @@ public class NullJavaJoinTableRelationshipStrategy return false; } - public JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { throw new UnsupportedOperationException(); } - public JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { throw new UnsupportedOperationException(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java index 84e467a5bc..efbae863fa 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverride.java @@ -9,17 +9,23 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; +import java.util.Iterator; import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; +import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; import org.eclipse.jpt.jpa.core.context.orm.OrmOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualOverride; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; import org.eclipse.jpt.jpa.core.internal.context.orm.OrmOverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.resource.orm.XmlOverride; +import org.eclipse.jpt.jpa.db.Table; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -88,7 +94,7 @@ public abstract class AbstractOrmOverride<C extends OrmOverrideContainer, X exte return (C) super.getParent(); } - public C getContainer() { + protected C getContainer() { return this.getParent(); } @@ -104,6 +110,22 @@ public abstract class AbstractOrmOverride<C extends OrmOverrideContainer, X exte this.setName(virtualOverride.getName()); } + public TypeMapping getTypeMapping() { + return this.getContainer().getTypeMapping(); + } + + public Table resolveDbTable(String tableName) { + return this.getContainer().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getContainer().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, column, owner, textRangeResolver); + } + @Override public void toString(StringBuilder sb) { sb.append(this.name); @@ -119,7 +141,7 @@ public abstract class AbstractOrmOverride<C extends OrmOverrideContainer, X exte } protected JptValidator buildValidator() { - return this.getContainer().buildValidator(this, this.buildTextRangeResolver()); + return this.getContainer().buildOverrideValidator(this, this.buildTextRangeResolver()); } protected OverrideTextRangeResolver buildTextRangeResolver() { @@ -139,4 +161,14 @@ public abstract class AbstractOrmOverride<C extends OrmOverrideContainer, X exte public TextRange getNameTextRange() { return this.getValidationTextRange(this.xmlOverride.getNameTextRange()); } + + + public boolean tableNameIsInvalid(String tableName) { + return this.getContainer().tableNameIsInvalid(tableName); + } + + + public Iterator<String> candidateTableNames() { + return this.getContainer().candidateTableNames(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java index c84801e4cb..d219d5f05a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmOverrideContainer.java @@ -21,8 +21,9 @@ import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.VirtualOverride; import org.eclipse.jpt.jpa.core.context.XmlContextNode; @@ -145,7 +146,7 @@ public abstract class AbstractOrmOverrideContainer< * remaining specified overrides. */ protected boolean overrideWillBeVirtual(String overrideName, S specifiedOverrideToBeRemoved) { - return CollectionTools.contains(this.allOverridableNames(), overrideName) && + return CollectionTools.contains(this.possibleVirtualOverrideNames(), overrideName) && (this.getSpecifiedOverrideNamed(overrideName, specifiedOverrideToBeRemoved) == null); } @@ -342,7 +343,7 @@ public abstract class AbstractOrmOverrideContainer< } protected Iterator<String> virtualOverrideNames() { - return new FilteringIterator<String>(this.allOverridableNames()) { + return new FilteringIterator<String>(this.possibleVirtualOverrideNames()) { @Override protected boolean accept(String name) { return AbstractOrmOverrideContainer.this.overrideIsVirtual(name); @@ -413,6 +414,22 @@ public abstract class AbstractOrmOverrideContainer< return this.owner.getTypeMapping(); } + /** + * Return all the possible virtual override names. If we have a + * corresponding Java entity, take the override names from it. This allows + * us to include any Java specified overrides that are invalid (and + * generate the appropriate error messages). If we don't have a + * corresponding Java entity, take the override names directly from the + * type. + */ + protected Iterator<String> possibleVirtualOverrideNames() { + if (this.owner == null) { + return EmptyIterator.instance(); + } + Iterable<String> javaNames = this.owner.getJavaOverrideNames(); + return (javaNames != null) ? javaNames.iterator() : this.owner.allOverridableNames(); + } + public Iterator<String> allOverridableNames() { return (this.owner != null) ? this.owner.allOverridableNames() : EmptyIterator.<String>instance(); } @@ -433,11 +450,11 @@ public abstract class AbstractOrmOverrideContainer< return this.owner.getDefaultTableName(); } - public JptValidator buildValidator(Override_ override, OverrideTextRangeResolver textRangeResolver) { - return this.owner.buildValidator(override, this, textRangeResolver); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideTextRangeResolver textRangeResolver) { + return this.owner.buildOverrideValidator(override, this, textRangeResolver); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { return this.owner.buildColumnValidator(override, column, columnOwner, textRangeResolver); } @@ -463,7 +480,6 @@ public abstract class AbstractOrmOverrideContainer< @Override public void validate(List<IMessage> messages, IReporter reporter) { super.validate(messages, reporter); - for (R override : this.getOverrides()) { override.validate(messages, reporter); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmVirtualOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmVirtualOverride.java index 8b0df34953..c8a4c77cbe 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmVirtualOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmVirtualOverride.java @@ -9,11 +9,23 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; +import java.util.Iterator; +import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; import org.eclipse.jpt.jpa.core.context.orm.OrmOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualOverride; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; +import org.eclipse.jpt.jpa.core.internal.context.orm.OrmOverrideTextRangeResolver; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Virtual <code>orm.xml</code> override @@ -48,16 +60,61 @@ public abstract class AbstractOrmVirtualOverride<C extends OrmOverrideContainer> return (C) super.getParent(); } - public C getContainer() { + protected C getContainer() { return this.getParent(); } - public TextRange getValidationTextRange() { - return this.getContainer().getValidationTextRange(); + public TypeMapping getTypeMapping() { + return this.getContainer().getTypeMapping(); + } + + public Table resolveDbTable(String tableName) { + return this.getContainer().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getContainer().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, column, owner, textRangeResolver); } @Override public void toString(StringBuilder sb) { sb.append(this.name); } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + this.buildValidator().validate(messages, reporter); + } + + protected JptValidator buildValidator() { + return this.getContainer().buildOverrideValidator(this, this.buildTextRangeResolver()); + } + + protected OverrideTextRangeResolver buildTextRangeResolver() { + return new OrmOverrideTextRangeResolver(this); + } + + public TextRange getValidationTextRange() { + return this.getContainer().getValidationTextRange(); + } + + public TextRange getNameTextRange() { + return this.getValidationTextRange(); + } + + public boolean tableNameIsInvalid(String tableName) { + return this.getContainer().tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return this.getContainer().candidateTableNames(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java index 25b6eb44c7..2ff662f8ff 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverride.java @@ -11,11 +11,17 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; import java.util.List; import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualAssociationOverride; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverride2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverride; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -25,7 +31,7 @@ import org.eclipse.wst.validation.internal.provisional.core.IReporter; */ public class GenericOrmAssociationOverride extends AbstractOrmOverride<OrmAssociationOverrideContainer, XmlAssociationOverride> - implements OrmAssociationOverride + implements OrmAssociationOverride2_0 { protected final OrmOverrideRelationship relationship; @@ -72,6 +78,10 @@ public class GenericOrmAssociationOverride // ********** misc ********** + protected OrmAssociationOverrideContainer2_0 getContainer2_0() { + return (OrmAssociationOverrideContainer2_0) this.getContainer(); + } + public RelationshipMapping getMapping() { return this.getContainer().getRelationshipMapping(this.name); } @@ -94,4 +104,16 @@ public class GenericOrmAssociationOverride super.validate(messages, reporter); this.relationship.validate(messages, reporter); } + + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableValidator(this, table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableJoinColumnValidator(this, column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableInverseJoinColumnValidator(this, column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverrideContainer.java index 6b34106360..f0d01182d3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAssociationOverrideContainer.java @@ -10,11 +10,11 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.jpa.core.context.AssociationOverride; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.Relationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; @@ -24,6 +24,7 @@ import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverride; @@ -38,7 +39,7 @@ public class GenericOrmAssociationOverrideContainer OrmVirtualAssociationOverride, XmlAssociationOverride > - implements OrmAssociationOverrideContainer + implements OrmAssociationOverrideContainer2_0 { public GenericOrmAssociationOverrideContainer(XmlContextNode parent, OrmAssociationOverrideContainer.Owner owner) { super(parent, owner); @@ -49,20 +50,24 @@ public class GenericOrmAssociationOverrideContainer return MappingTools.getRelationshipMapping(attributeName, this.owner.getOverridableTypeMapping()); } - public Relationship resolveOverriddenRelationship(String associationOverrideName) { + public ReadOnlyRelationship resolveOverriddenRelationship(String associationOverrideName) { return this.owner.resolveOverriddenRelationship(associationOverrideName); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner columnOwner, JoinColumnTextRangeResolver textRangeResolver) { - return this.owner.buildJoinTableJoinColumnValidator(override, column, columnOwner, textRangeResolver); + protected OrmAssociationOverrideContainer2_0.Owner getOwner2_0() { + return (OrmAssociationOverrideContainer2_0.Owner) this.owner; } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner columnOwner, JoinColumnTextRangeResolver textRangeResolver) { - return this.owner.buildJoinTableInverseJoinColumnValidator(override, column, columnOwner, textRangeResolver); + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner columnOwner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getOwner2_0().buildJoinTableJoinColumnValidator(override, column, columnOwner, textRangeResolver); } - public JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver) { - return this.owner.buildTableValidator(override, table, textRangeResolver); + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner columnOwner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getOwner2_0().buildJoinTableInverseJoinColumnValidator(override, column, columnOwner, textRangeResolver); + } + + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return this.getOwner2_0().buildJoinTableValidator(override, table, textRangeResolver); } @Override diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java index 9e6b30c0dc..d55b328692 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -9,13 +9,10 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; -import java.util.Iterator; import java.util.List; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; -import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmColumn; @@ -23,13 +20,11 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualAttributeOverride; import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; -import org.eclipse.jpt.jpa.core.internal.context.TypeMappingTools; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory; import org.eclipse.jpt.jpa.core.resource.orm.XmlAttributeOverride; import org.eclipse.jpt.jpa.core.resource.orm.XmlColumn; -import org.eclipse.jpt.jpa.db.Table; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -98,32 +93,12 @@ public class GenericOrmAttributeOverride // ********** column owner implementation ********** - public TypeMapping getTypeMapping() { - return this.getContainer().getTypeMapping(); - } - - public String getDefaultTableName() { - return this.getContainer().getDefaultTableName(); - } - - public Table resolveDbTable(String tableName) { - return this.getContainer().resolveDbTable(tableName); - } - public String getDefaultColumnName() { return this.name; } - public JptValidator buildColumnValidator(NamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { - return this.getContainer().buildColumnValidator(this, (BaseColumn) col, this, (BaseColumnTextRangeResolver) textRangeResolver); - } - - public boolean tableNameIsInvalid(String tableName) { - return this.getContainer().tableNameIsInvalid(tableName); - } - - public Iterator<String> candidateTableNames() { - return this.getContainer().candidateTableNames(); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, (ReadOnlyBaseColumn) col, this, (BaseColumnTextRangeResolver) textRangeResolver); } public XmlColumn getXmlColumn() { @@ -143,24 +118,8 @@ public class GenericOrmAttributeOverride // ********** mapped by relationship ********** - protected boolean isMappedByRelationship() { - return CollectionTools.contains(this.getMappedByRelationshipAttributeNames(), this.buildQualifier()); - } - - protected Iterable<String> getMappedByRelationshipAttributeNames() { - return TypeMappingTools.getMappedByRelationshipAttributeNames(this.getTypeMapping()); - } - - /** - * overridable names are (usually?) qualified with a container mapping, - * which may also be the one mapped by a relationship - */ - protected String buildQualifier() { - if (this.name == null) { - return null; - } - int index = this.name.indexOf('.'); - return (index == -1) ? this.name : this.name.substring(0, index); + protected boolean attributeIsDerivedId() { + return this.getTypeMapping().attributeIsDerivedId(this.name); } @@ -170,28 +129,23 @@ public class GenericOrmAttributeOverride public void validate(List<IMessage> messages, IReporter reporter) { super.validate(messages, reporter); - // [JPA 2.0] if the column is specified, or if the override is not mapped by a relationship, - // then the column is validated. - // (In JPA 1.0, the column will always be validated, since the override is never mapped by a - // relationship) - if (this.xmlColumnIsSpecified() || ! this.isMappedByRelationship()) { - this.column.validate(messages, reporter); - } - - // [JPA 2.0] if the override is mapped by a relationship, then that actually is in itself - // a validation error - // (We prevent implied overrides that are mapped by a relationship ... hopefully) - // (In JPA 1.0, this will never occur) - if (this.isMappedByRelationship()) { + if (this.attributeIsDerivedId()) { messages.add( DefaultJpaValidationMessages.buildMessage( IMessage.HIGH_SEVERITY, - JpaValidationMessages.ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED, + JpaValidationMessages.ATTRIBUTE_OVERRIDE_DERIVED_AND_SPECIFIED, EMPTY_STRING_ARRAY, this, this.getValidationTextRange() ) ); + + // validate the column if it is specified + if (this.xmlColumnIsSpecified()) { + this.column.validate(messages, reporter); + } + } else { + this.column.validate(messages, reporter); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverrideContainer.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverrideContainer.java index 7501968550..df648a19aa 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverrideContainer.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmAttributeOverrideContainer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -11,7 +11,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.jpa.core.context.Column; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; @@ -38,7 +38,7 @@ public class GenericOrmAttributeOverrideContainer } - public Column resolveOverriddenColumn(String attributeName) { + public ReadOnlyColumn resolveOverriddenColumn(String attributeName) { return (attributeName == null) ? null : this.owner.resolveOverriddenColumn(attributeName); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java index b8fad23d1c..ae4945043e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -11,8 +11,6 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; import java.util.Iterator; import java.util.List; -import java.util.Set; -import org.eclipse.jpt.common.utility.internal.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; import org.eclipse.jpt.jpa.core.MappingKeys; @@ -21,7 +19,6 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmEmbeddedIdMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; -import org.eclipse.jpt.jpa.core.internal.context.TypeMappingTools; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmBaseEmbeddedMapping; import org.eclipse.jpt.jpa.core.internal.validation.DefaultJpaValidationMessages; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -38,8 +35,8 @@ public class GenericOrmEmbeddedIdMapping extends AbstractOrmBaseEmbeddedMapping<XmlEmbeddedId> implements EmbeddedIdMapping2_0, OrmEmbeddedIdMapping { - /* JPA 2.0 feature - a relationship may map this embedded ID */ - protected boolean mappedByRelationship; + /* JPA 2.0 - the embedded id may be derived from a relationship */ + protected boolean derived; public GenericOrmEmbeddedIdMapping(OrmPersistentAttribute parent, XmlEmbeddedId xmlMapping) { @@ -52,32 +49,28 @@ public class GenericOrmEmbeddedIdMapping @Override public void update() { super.update(); - this.setMappedByRelationship(this.buildMappedByRelationship()); + this.setMappedByRelationship(this.buildDerived()); } - // ********** mapped by relationship ********** + // ********** derived ********** - public boolean isMappedByRelationship() { - return this.mappedByRelationship; + public boolean isDerived() { + return this.derived; } - protected void setMappedByRelationship(boolean value) { - boolean old = this.mappedByRelationship; - this.mappedByRelationship = value; - this.firePropertyChanged(MAPPED_BY_RELATIONSHIP_PROPERTY, old, value); + protected void setMappedByRelationship(boolean derived) { + boolean old = this.derived; + this.derived = derived; + this.firePropertyChanged(DERIVED_PROPERTY, old, derived); } - protected boolean buildMappedByRelationship() { - return this.isJpa2_0Compatible() && this.buildMappedByRelationship_(); + protected boolean buildDerived() { + return this.isJpa2_0Compatible() && this.buildDerived_(); } - protected boolean buildMappedByRelationship_() { - return CollectionTools.contains(this.getMappedByRelationshipAttributeNames(), this.name); - } - - protected Iterable<String> getMappedByRelationshipAttributeNames() { - return TypeMappingTools.getMappedByRelationshipAttributeNames(this.getTypeMapping()); + protected boolean buildDerived_() { + return this.getTypeMapping().attributeIsDerivedId(this.name); } @@ -105,7 +98,7 @@ public class GenericOrmEmbeddedIdMapping @Override protected Iterator<String> embeddableOverridableAttributeMappingNames() { - return this.mappedByRelationship ? + return this.derived ? EmptyIterator.<String>instance() : super.embeddableOverridableAttributeMappingNames(); } @@ -125,7 +118,7 @@ public class GenericOrmEmbeddedIdMapping // [JPA 2.0] if the embedded id is mapped by a relationship, then any specified // attribute overrides are in error // (in JPA 1.0, this will obviously never be reached) - if (this.mappedByRelationship + if (this.derived && (this.attributeOverrideContainer.specifiedOverridesSize() > 0)) { messages.add( DefaultJpaValidationMessages.buildMessage( @@ -147,7 +140,7 @@ public class GenericOrmEmbeddedIdMapping { @Override public Iterator<String> allOverridableNames() { - return GenericOrmEmbeddedIdMapping.this.isMappedByRelationship() ? + return GenericOrmEmbeddedIdMapping.this.isDerived() ? EmptyIterator.<String>instance() : super.allOverridableNames(); } @@ -156,25 +149,13 @@ public class GenericOrmEmbeddedIdMapping * pre-condition: type mapping is not <code>null</code> */ @Override - protected Iterator<String> allOverridableAttributeNames_(TypeMapping typeMapping) { - final Set<String> mappedByRelationshipAttributeNames = this.buildMappedByRelationshipAttributeNames(); - if (mappedByRelationshipAttributeNames.isEmpty()) { - return super.allOverridableAttributeNames_(typeMapping); - } - return new FilteringIterator<String>(super.allOverridableAttributeNames_(typeMapping)) { + protected Iterator<String> allOverridableAttributeNames_(TypeMapping overriddenTypeMapping) { + return new FilteringIterator<String>(super.allOverridableAttributeNames_(overriddenTypeMapping)) { @Override protected boolean accept(String attributeName) { - // overridable names are (usually?) qualified with a container mapping, - // which may also be the one mapped by a relationship - int dotIndex = attributeName.indexOf('.'); - String qualifier = (dotIndex > 0) ? attributeName.substring(0, dotIndex) : attributeName; - return ! mappedByRelationshipAttributeNames.contains(qualifier); + return ! AttributeOverrideContainerOwner.this.getTypeMapping().attributeIsDerivedId(attributeName); } }; } - - protected Set<String> buildMappedByRelationshipAttributeNames() { - return CollectionTools.set(GenericOrmEmbeddedIdMapping.this.getMappedByRelationshipAttributeNames()); - } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java index 32ec16c4b9..80be1c096a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedMapping.java @@ -22,18 +22,19 @@ import org.eclipse.jpt.jpa.core.MappingKeys; import org.eclipse.jpt.jpa.core.context.AssociationOverride; import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.AttributeMapping; -import org.eclipse.jpt.jpa.core.context.BaseColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; -import org.eclipse.jpt.jpa.core.context.JoinTable; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.Relationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; +import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; import org.eclipse.jpt.jpa.core.internal.context.AttributeMappingTools; @@ -51,6 +52,7 @@ import org.eclipse.jpt.jpa.core.internal.jpa1.context.AssociationOverrideValidat import org.eclipse.jpt.jpa.core.internal.jpa1.context.EmbeddableOverrideDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.EntityTableDescriptionProvider; import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableTableDescriptionProvider; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmEmbeddedMapping2_0; import org.eclipse.jpt.jpa.core.resource.orm.Attributes; import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverride; @@ -101,7 +103,7 @@ public class GenericOrmEmbeddedMapping new GenericOrmAssociationOverrideContainer(this, null); } - protected OrmAssociationOverrideContainer.Owner buildAssociationOverrideContainerOwner() { + protected OrmAssociationOverrideContainer2_0.Owner buildAssociationOverrideContainerOwner() { return new AssociationOverrideContainerOwner(); } @@ -206,6 +208,11 @@ public class GenericOrmEmbeddedMapping return (this.targetEmbeddable == null) ? null : this.targetEmbeddable.resolveOverriddenRelationship(attributeName); } + @Override + protected OrmAttributeOverrideContainer.Owner buildAttributeOverrideContainerOwner() { + return new AttributeOverrideContainerOwner(); + } + // ********** validation ********** @@ -216,10 +223,19 @@ public class GenericOrmEmbeddedMapping } + // ********** attribute override container owner ********* + + protected class AttributeOverrideContainerOwner + extends AbstractOrmBaseEmbeddedMapping<XmlEmbedded>.AttributeOverrideContainerOwner + { + // nothing yet + } + + // ********** association override container owner ********** protected class AssociationOverrideContainerOwner - implements OrmAssociationOverrideContainer.Owner + implements OrmAssociationOverrideContainer2_0.Owner { protected String getMappingName() { return GenericOrmEmbeddedMapping.this.getName(); @@ -238,6 +254,10 @@ public class GenericOrmEmbeddedMapping return (typeMapping != null) ? typeMapping.allOverridableAssociationNames() : EmptyIterator.<String>instance(); } + public Iterable<String> getJavaOverrideNames() { + return null; + } + public EList<XmlAssociationOverride> getXmlOverrides() { return GenericOrmEmbeddedMapping.this.getXmlAttributeMapping().getAssociationOverrides(); } @@ -266,24 +286,24 @@ public class GenericOrmEmbeddedMapping return GenericOrmEmbeddedMapping.this.getValidationTextRange(); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AssociationOverrideValidator(this.getPersistentAttribute(), (AssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AssociationOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (AssociationOverride) override, (JoinColumn) column, (JoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (ReadOnlyJoinColumn) column, (ReadOnlyJoinColumn.Owner) owner, (JoinColumnTextRangeResolver) textRangeResolver, new EntityTableDescriptionProvider()); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { return new AssociationOverrideInverseJoinColumnValidator(this.getPersistentAttribute(), override, column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); } - public JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinTableValidator(this.getPersistentAttribute(), override, (JoinTable) table, textRangeResolver); + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinTableValidator(this.getPersistentAttribute(), override, (ReadOnlyJoinTable) table, textRangeResolver); } protected OrmPersistentAttribute getPersistentAttribute() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java index b87a6661ed..756d1cc4ce 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinColumn.java @@ -13,6 +13,7 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmBaseColumn; @@ -25,21 +26,21 @@ import org.eclipse.jpt.jpa.db.Table; * <code>orm.xml</code> join column */ public class GenericOrmJoinColumn - extends AbstractOrmBaseColumn<XmlJoinColumn, OrmJoinColumn.Owner> + extends AbstractOrmBaseColumn<XmlJoinColumn, OrmReadOnlyJoinColumn.Owner> implements OrmJoinColumn { - /** @see org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmNamedColumn#AbstractOrmNamedColumn(XmlContextNode, org.eclipse.jpt.jpa.core.context.orm.OrmNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn) */ + /** @see org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmNamedColumn#AbstractOrmNamedColumn(XmlContextNode, org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn) */ protected /* final */ XmlJoinColumn xmlColumn; // null for default join columns protected String specifiedReferencedColumnName; protected String defaultReferencedColumnName; - public GenericOrmJoinColumn(XmlContextNode parent, OrmJoinColumn.Owner owner) { + public GenericOrmJoinColumn(XmlContextNode parent, OrmReadOnlyJoinColumn.Owner owner) { this(parent, owner, null); } - public GenericOrmJoinColumn(XmlContextNode parent, OrmJoinColumn.Owner owner, XmlJoinColumn xmlColumn) { + public GenericOrmJoinColumn(XmlContextNode parent, OrmReadOnlyJoinColumn.Owner owner, XmlJoinColumn xmlColumn) { super(parent, owner, xmlColumn); this.specifiedReferencedColumnName = this.buildSpecifiedReferencedColumnName(); } @@ -170,6 +171,9 @@ public class GenericOrmJoinColumn return MappingTools.buildJoinColumnDefaultName(this, this.owner); } + + // ********** validation ********** + public TextRange getReferencedColumnNameTextRange() { return this.getValidationTextRange(this.xmlColumn.getReferencedColumnNameTextRange()); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java index 9bd4e51936..93a466dc13 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmJoinTable.java @@ -25,16 +25,18 @@ import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterab import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTable; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmRelationship; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; @@ -54,7 +56,7 @@ public class GenericOrmJoinTable { protected final Vector<OrmJoinColumn> specifiedInverseJoinColumns = new Vector<OrmJoinColumn>(); protected final SpecifiedInverseJoinColumnContainerAdapter specifiedInverseJoinColumnContainerAdapter = new SpecifiedInverseJoinColumnContainerAdapter(); - protected final OrmJoinColumn.Owner inverseJoinColumnOwner; + protected final OrmReadOnlyJoinColumn.Owner inverseJoinColumnOwner; protected OrmJoinColumn defaultInverseJoinColumn; @@ -66,7 +68,7 @@ public class GenericOrmJoinTable } @Override - protected OrmJoinColumn.Owner buildJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -94,17 +96,17 @@ public class GenericOrmJoinTable @Override protected XmlJoinTable getXmlTable() { - return this.getJoinStrategy().getXmlJoinTable(); + return this.getRelationshipStrategy().getXmlJoinTable(); } @Override protected XmlJoinTable buildXmlTable() { - return this.getJoinStrategy().buildXmlJoinTable(); + return this.getRelationshipStrategy().buildXmlJoinTable(); } @Override protected void removeXmlTable() { - this.getJoinStrategy().removeXmlJoinTable(); + this.getRelationshipStrategy().removeXmlJoinTable(); } @@ -122,7 +124,7 @@ public class GenericOrmJoinTable return this.hasSpecifiedInverseJoinColumns() ? this.specifiedInverseJoinColumnsSize() : this.getDefaultInverseJoinColumnsSize(); } - public void convertDefaultToSpecifiedInverseJoinColumn() { + public void convertDefaultInverseJoinColumnToSpecified() { MappingTools.convertJoinTableDefaultToSpecifiedInverseJoinColumn(this); } @@ -243,7 +245,7 @@ public class GenericOrmJoinTable } } - protected OrmJoinColumn.Owner buildInverseJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildInverseJoinColumnOwner() { return new InverseJoinColumnOwner(); } @@ -294,13 +296,13 @@ public class GenericOrmJoinTable return (OrmJoinTableRelationshipStrategy) super.getParent(); } - protected OrmJoinTableRelationshipStrategy getJoinStrategy() { + protected OrmJoinTableRelationshipStrategy getRelationshipStrategy() { return this.getParent(); } @Override protected String buildDefaultName() { - return this.getJoinStrategy().getJoinTableDefaultName(); + return this.getRelationshipStrategy().getJoinTableDefaultName(); } public void initializeFrom(ReadOnlyJoinTable oldTable) { @@ -322,7 +324,7 @@ public class GenericOrmJoinTable } public RelationshipMapping getRelationshipMapping() { - return this.getJoinStrategy().getRelationship().getMapping(); + return this.getRelationshipStrategy().getRelationship().getMapping(); } public PersistentAttribute getPersistentAttribute() { @@ -335,11 +337,11 @@ public class GenericOrmJoinTable @Override protected void validateJoinColumns(List<IMessage> messages, IReporter reporter) { super.validateJoinColumns(messages, reporter); - this.validateJoinColumns(this.getInverseJoinColumns(), messages, reporter); + this.validateNodes(this.getInverseJoinColumns(), messages, reporter); } public boolean validatesAgainstDatabase() { - return this.getJoinStrategy().validatesAgainstDatabase(); + return this.getRelationshipStrategy().validatesAgainstDatabase(); } @@ -349,18 +351,14 @@ public class GenericOrmJoinTable * just a little common behavior */ protected abstract class AbstractJoinColumnOwner - implements OrmJoinColumn.Owner + implements OrmReadOnlyJoinColumn.Owner { protected AbstractJoinColumnOwner() { super(); } public TypeMapping getTypeMapping() { - return GenericOrmJoinTable.this.getJoinStrategy().getRelationship().getTypeMapping(); - } - - protected PersistentAttribute getPersistentAttribute() { - return GenericOrmJoinTable.this.getPersistentAttribute(); + return this.getRelationship().getTypeMapping(); } /** @@ -372,7 +370,7 @@ public class GenericOrmJoinTable /** * If there is a specified table name it needs to be the same - * the default table name. the table is always the join table + * the default table name. The table is always the join table. */ public boolean tableNameIsInvalid(String tableName) { return Tools.valuesAreDifferent(this.getDefaultTableName(), tableName); @@ -403,12 +401,12 @@ public class GenericOrmJoinTable return GenericOrmJoinTable.this.getValidationTextRange(); } - protected String getPersistentAttributeName() { - return this.getPersistentAttribute().getName(); + protected OrmRelationship getRelationship() { + return this.getRelationshipStrategy().getRelationship(); } - protected OrmJoinTableRelationshipStrategy getJoinStrategy() { - return GenericOrmJoinTable.this.getJoinStrategy(); + protected OrmJoinTableRelationshipStrategy getRelationshipStrategy() { + return GenericOrmJoinTable.this.getRelationshipStrategy(); } } @@ -425,7 +423,7 @@ public class GenericOrmJoinTable } public Entity getRelationshipTarget() { - return this.getJoinStrategy().getRelationship().getEntity(); + return this.getRelationship().getEntity(); } public String getAttributeName() { @@ -450,8 +448,8 @@ public class GenericOrmJoinTable return GenericOrmJoinTable.this.joinColumnsSize(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return this.getJoinStrategy().buildJoinTableJoinColumnValidator((JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return this.getRelationshipStrategy().buildJoinTableJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); } } @@ -500,8 +498,8 @@ public class GenericOrmJoinTable return GenericOrmJoinTable.this.inverseJoinColumnsSize(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return this.getJoinStrategy().buildJoinTableInverseJoinColumnValidator((JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return this.getRelationshipStrategy().buildJoinTableInverseJoinColumnValidator((ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java index 71ac3cee4e..3fb9fec821 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOrderable.java @@ -11,7 +11,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; @@ -427,7 +427,7 @@ public class GenericOrmOrderable return GenericOrmOrderable.this.getValidationTextRange(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { return new OrderColumnValidator(this.getPersistentAttribute(), (OrderColumn2_0) column, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java index f669f9864d..6540fea64d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmOverrideRelationship.java @@ -9,24 +9,28 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; +import java.util.Iterator; import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; import org.eclipse.jpt.jpa.core.context.MappedByRelationship; import org.eclipse.jpt.jpa.core.context.OverrideRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.ReadOnlyOverrideRelationship; import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.Relationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; @@ -34,8 +38,11 @@ import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; import org.eclipse.jpt.jpa.core.internal.context.orm.GenericOrmOverrideJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.context.orm.NullOrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa2.context.orm.GenericOrmOverrideJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.MappingRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverride2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmOverrideRelationship2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverride; +import org.eclipse.jpt.jpa.db.Table; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -89,13 +96,37 @@ public class GenericOrmOverrideRelationship } protected OrmRelationshipStrategy buildStrategy() { - if (this.isJpa2_0Compatible()) { - if (this.joinColumnStrategy.hasSpecifiedJoinColumns()) { - return this.joinColumnStrategy; - } - return this.joinTableStrategy; - } - return this.joinColumnStrategy; + return this.isJpa2_0Compatible() ? + this.buildStrategy2_0() : + this.joinColumnStrategy; + } + + /** + * The overridden mapping determines the override's strategy. + */ + protected OrmRelationshipStrategy buildStrategy2_0() { + MappingRelationshipStrategy2_0 mappingStrategy = this.getMappingStrategy(); + return (mappingStrategy != null) ? + (OrmRelationshipStrategy) mappingStrategy.selectOverrideStrategy(this) : + this.buildMissingMappingStrategy(); + } + + /** + * Get the strategy from the overridden mapping. + */ + protected MappingRelationshipStrategy2_0 getMappingStrategy() { + RelationshipMapping mapping = this.getMapping(); + return (mapping == null) ? null : (MappingRelationshipStrategy2_0) mapping.getRelationship().getStrategy(); + } + + /** + * Return the strategy to use when the override's name does not match the + * name of an appropriate relationship mapping. + */ + protected OrmRelationshipStrategy buildMissingMappingStrategy() { + return this.joinColumnStrategy.hasSpecifiedJoinColumns() ? + this.joinColumnStrategy : + this.joinTableStrategy; } @@ -115,6 +146,7 @@ public class GenericOrmOverrideRelationship } public boolean mayHaveDefaultJoinColumn() { + // association overrides do not have defaults return false; } @@ -139,6 +171,7 @@ public class GenericOrmOverrideRelationship } public boolean mayHaveDefaultJoinTable() { + // association overrides do not have defaults return false; } @@ -196,16 +229,44 @@ public class GenericOrmOverrideRelationship return (OrmAssociationOverride) super.getParent(); } - public OrmAssociationOverride getAssociationOverride() { + protected OrmAssociationOverride getAssociationOverride() { return this.getParent(); } + protected OrmAssociationOverride2_0 getAssociationOverride2_0() { + return (OrmAssociationOverride2_0) this.getAssociationOverride(); + } + public XmlAssociationOverride getXmlContainer() { return this.getAssociationOverride().getXmlOverride(); } public TypeMapping getTypeMapping() { - return this.getAssociationOverride().getContainer().getTypeMapping(); + return this.getAssociationOverride().getTypeMapping(); + } + + public String getAttributeName() { + return this.getAssociationOverride().getName(); + } + + public boolean tableNameIsInvalid(String tableName) { + return this.getAssociationOverride().tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return this.getAssociationOverride().candidateTableNames(); + } + + public Table resolveDbTable(String tableName) { + return this.getAssociationOverride().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getAssociationOverride().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride().buildColumnValidator(column, owner, textRangeResolver); } public Entity getEntity() { @@ -231,19 +292,18 @@ public class GenericOrmOverrideRelationship @Override public void validate(List<IMessage> messages, IReporter reporter) { super.validate(messages, reporter); - this.joinColumnStrategy.validate(messages, reporter); - this.joinTableStrategy.validate(messages, reporter); + this.strategy.validate(messages, reporter); } - public JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - return this.getAssociationOverride().getContainer().buildJoinTableJoinColumnValidator(this.getAssociationOverride(), column, owner, textRangeResolver); + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableValidator(table, textRangeResolver); } - public JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - return this.getAssociationOverride().getContainer().buildJoinTableInverseJoinColumnValidator(this.getAssociationOverride(), column, owner, textRangeResolver); + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); } - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { - return this.getAssociationOverride().getContainer().buildTableValidator(this.getAssociationOverride(), table, textRangeResolver); + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java index 642231286e..86757a9428 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmPrimaryKeyJoinColumn.java @@ -12,8 +12,8 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.ReadOnlyPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; -import org.eclipse.jpt.jpa.core.context.orm.OrmBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmNamedColumn; import org.eclipse.jpt.jpa.core.internal.context.orm.OrmPrimaryKeyJoinColumnTextRangeResolver; @@ -25,17 +25,17 @@ import org.eclipse.jpt.jpa.db.Table; * <code>orm.xml</code> primary key join column */ public class GenericOrmPrimaryKeyJoinColumn - extends AbstractOrmNamedColumn<XmlPrimaryKeyJoinColumn, OrmBaseJoinColumn.Owner> + extends AbstractOrmNamedColumn<XmlPrimaryKeyJoinColumn, OrmReadOnlyBaseJoinColumn.Owner> implements OrmPrimaryKeyJoinColumn { - /** @see org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmNamedColumn#AbstractOrmNamedColumn(XmlContextNode, org.eclipse.jpt.jpa.core.context.orm.OrmNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn) */ + /** @see org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmNamedColumn#AbstractOrmNamedColumn(XmlContextNode, org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn.Owner, org.eclipse.jpt.jpa.core.resource.orm.AbstractXmlNamedColumn) */ protected /* final */ XmlPrimaryKeyJoinColumn xmlColumn; // null for default pk join columns protected String specifiedReferencedColumnName; protected String defaultReferencedColumnName; - public GenericOrmPrimaryKeyJoinColumn(XmlContextNode parent, OrmBaseJoinColumn.Owner owner, XmlPrimaryKeyJoinColumn xmlColumn) { + public GenericOrmPrimaryKeyJoinColumn(XmlContextNode parent, OrmReadOnlyBaseJoinColumn.Owner owner, XmlPrimaryKeyJoinColumn xmlColumn) { super(parent, owner, xmlColumn); this.specifiedReferencedColumnName = this.buildSpecifiedReferencedColumnName(); } @@ -162,6 +162,9 @@ public class GenericOrmPrimaryKeyJoinColumn return this.owner.getDefaultTableName(); } + + // ********** validation ********** + @Override protected NamedColumnTextRangeResolver buildTextRangeResolver() { return new OrmPrimaryKeyJoinColumnTextRangeResolver(this); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java index f6a5bc41c6..333a1a1e3c 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmReferenceTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -24,6 +24,7 @@ import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyReferenceTable; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmReferenceTable; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; @@ -43,7 +44,7 @@ public abstract class GenericOrmReferenceTable<X extends AbstractXmlReferenceTab { protected final Vector<OrmJoinColumn> specifiedJoinColumns = new Vector<OrmJoinColumn>(); protected final SpecifiedJoinColumnContainerAdapter specifiedJoinColumnContainerAdapter = new SpecifiedJoinColumnContainerAdapter(); - protected final OrmJoinColumn.Owner joinColumnOwner; + protected final OrmReadOnlyJoinColumn.Owner joinColumnOwner; protected OrmJoinColumn defaultJoinColumn; @@ -85,7 +86,7 @@ public abstract class GenericOrmReferenceTable<X extends AbstractXmlReferenceTab return this.hasSpecifiedJoinColumns() ? this.specifiedJoinColumnsSize() : this.getDefaultJoinColumnsSize(); } - public void convertDefaultToSpecifiedJoinColumn() { + public void convertDefaultJoinColumnToSpecified() { MappingTools.convertReferenceTableDefaultToSpecifiedJoinColumn(this); } @@ -205,7 +206,7 @@ public abstract class GenericOrmReferenceTable<X extends AbstractXmlReferenceTab } } - protected abstract OrmJoinColumn.Owner buildJoinColumnOwner(); + protected abstract OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner(); // ********** default join column ********** @@ -293,12 +294,6 @@ public abstract class GenericOrmReferenceTable<X extends AbstractXmlReferenceTab } protected void validateJoinColumns(List<IMessage> messages, IReporter reporter) { - this.validateJoinColumns(this.getJoinColumns(), messages, reporter); - } - - protected void validateJoinColumns(Iterable<OrmJoinColumn> joinColumns, List<IMessage> messages, IReporter reporter) { - for (OrmJoinColumn joinColumn : joinColumns) { - joinColumn.validate(messages, reporter); - } + this.validateNodes(this.getJoinColumns(), messages, reporter); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java index e9c73a6993..044ccfd7d9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmSecondaryTable.java @@ -19,17 +19,16 @@ import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable; -import org.eclipse.jpt.jpa.core.context.BaseJoinColumn; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyPrimaryKeyJoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlySecondaryTable; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmEntity; import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmSecondaryTable; import org.eclipse.jpt.jpa.core.internal.context.BaseJoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.ContextContainerTools; @@ -56,7 +55,7 @@ public class GenericOrmSecondaryTable protected final Vector<OrmPrimaryKeyJoinColumn> specifiedPrimaryKeyJoinColumns = new Vector<OrmPrimaryKeyJoinColumn>(); protected final SpecifiedPrimaryKeyJoinColumnContainerAdapter specifiedPrimaryKeyJoinColumnContainerAdapter = new SpecifiedPrimaryKeyJoinColumnContainerAdapter(); - protected final OrmBaseJoinColumn.Owner primaryKeyJoinColumnOwner; + protected final OrmReadOnlyBaseJoinColumn.Owner primaryKeyJoinColumnOwner; protected OrmPrimaryKeyJoinColumn defaultPrimaryKeyJoinColumn; @@ -243,7 +242,7 @@ public class GenericOrmSecondaryTable } } - protected OrmBaseJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { + protected OrmReadOnlyBaseJoinColumn.Owner buildPrimaryKeyJoinColumnOwner() { return new PrimaryKeyJoinColumnOwner(); } @@ -349,9 +348,7 @@ public class GenericOrmSecondaryTable //some validation messages are not database specific. If the database validation for the //table fails we will stop there and not validate the join columns at all if (continueValidating) { - for (OrmPrimaryKeyJoinColumn pkJoinColumn : this.getPrimaryKeyJoinColumns()) { - pkJoinColumn.validate(messages, reporter); - } + this.validateNodes(this.getPrimaryKeyJoinColumns(), messages, reporter); } } @@ -359,7 +356,7 @@ public class GenericOrmSecondaryTable // ********** primary key join column owner adapter ********** protected class PrimaryKeyJoinColumnOwner - implements OrmBaseJoinColumn.Owner + implements OrmReadOnlyBaseJoinColumn.Owner { protected OrmEntity getEntity() { return GenericOrmSecondaryTable.this.getEntity(); @@ -403,12 +400,8 @@ public class GenericOrmSecondaryTable return GenericOrmSecondaryTable.this.getValidationTextRange(); } - protected String getSecondaryTableName() { - return GenericOrmSecondaryTable.this.getName(); - } - - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new SecondaryTablePrimaryKeyJoinColumnValidator(GenericOrmSecondaryTable.this, (BaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new SecondaryTablePrimaryKeyJoinColumnValidator(GenericOrmSecondaryTable.this, (ReadOnlyBaseJoinColumn) column, this, (BaseJoinColumnTextRangeResolver) textRangeResolver); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAssociationOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAssociationOverride.java index aee0a4591d..4618e9f0cc 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAssociationOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAssociationOverride.java @@ -9,19 +9,28 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; -import org.eclipse.jpt.jpa.core.context.Relationship; +import java.util.List; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; -import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualAssociationOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualOverrideRelationship; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmVirtualAssociationOverride2_0; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Virtual <code>orm.xml</code> association override */ public class GenericOrmVirtualAssociationOverride extends AbstractOrmVirtualOverride<OrmAssociationOverrideContainer> - implements OrmVirtualAssociationOverride + implements OrmVirtualAssociationOverride2_0 { protected final OrmVirtualOverrideRelationship relationship; @@ -46,6 +55,10 @@ public class GenericOrmVirtualAssociationOverride return this.getContainer().getRelationshipMapping(this.name); } + protected OrmAssociationOverrideContainer2_0 getContainer2_0() { + return (OrmAssociationOverrideContainer2_0) this.getContainer(); + } + // ********** relationship ********** @@ -61,7 +74,28 @@ public class GenericOrmVirtualAssociationOverride return this.getContextNodeFactory().buildOrmVirtualOverrideRelationship(this); } - public Relationship resolveOverriddenRelationship() { + public ReadOnlyRelationship resolveOverriddenRelationship() { return this.getContainer().resolveOverriddenRelationship(this.name); } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + this.relationship.validate(messages, reporter); + } + + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableValidator(this, table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableJoinColumnValidator(this, column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getContainer2_0().buildJoinTableInverseJoinColumnValidator(this, column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAttributeOverride.java index d1327dba88..13db6f54de 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAttributeOverride.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualAttributeOverride.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,13 +9,19 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; -import org.eclipse.jpt.jpa.core.context.Column; +import java.util.List; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; -import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeOverrideContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualAttributeOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualColumn; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; /** * Virtual <code>orm.xml</code> attribute override @@ -61,13 +67,10 @@ public class GenericOrmVirtualAttributeOverride // ********** column owner implementation ********** - public TypeMapping getTypeMapping() { - return this.getContainer().getTypeMapping(); - } - + @Override public String getDefaultTableName() { String overriddenColumnTable = this.getOverriddenColumnTable(); - return (overriddenColumnTable != null) ? overriddenColumnTable : this.getContainer().getDefaultTableName(); + return (overriddenColumnTable != null) ? overriddenColumnTable : super.getDefaultTableName(); } protected String getOverriddenColumnTable() { @@ -86,7 +89,20 @@ public class GenericOrmVirtualAttributeOverride return (overriddenColumn == null) ? null : overriddenColumn.getName(); } - public Column resolveOverriddenColumn() { + public ReadOnlyColumn resolveOverriddenColumn() { return this.getContainer().resolveOverriddenColumn(this.name); } + + public JptValidator buildColumnValidator(ReadOnlyNamedColumn col, NamedColumnTextRangeResolver textRangeResolver) { + return this.getContainer().buildColumnValidator(this, (ReadOnlyBaseColumn) col, this, (BaseColumnTextRangeResolver) textRangeResolver); + } + + + // ********** validation ********** + + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + this.column.validate(messages, reporter); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualColumn.java index 6f50c93750..8797fb7aa9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualColumn.java @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; -import org.eclipse.jpt.jpa.core.context.Column; +import org.eclipse.jpt.jpa.core.context.ReadOnlyColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualColumn; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmVirtualBaseColumn; @@ -18,7 +18,7 @@ import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmVirtualBaseColum * <code>orm.xml</code> virtual column */ public class GenericOrmVirtualColumn - extends AbstractOrmVirtualBaseColumn<OrmVirtualColumn.Owner, Column> + extends AbstractOrmVirtualBaseColumn<OrmVirtualColumn.Owner, ReadOnlyColumn> implements OrmVirtualColumn { protected Integer specifiedLength; @@ -56,7 +56,7 @@ public class GenericOrmVirtualColumn // ********** column ********** @Override - public Column getOverriddenColumn() { + public ReadOnlyColumn getOverriddenColumn() { return this.owner.resolveOverriddenColumn(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualJoinColumn.java index dcf6cf5856..3c1d4571c3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualJoinColumn.java @@ -9,27 +9,32 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; -import org.eclipse.jpt.jpa.core.context.JoinColumn; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.XmlContextNode; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmVirtualBaseColumn; +import org.eclipse.jpt.jpa.core.internal.context.orm.OrmJoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.db.Column; +import org.eclipse.jpt.jpa.db.Table; /** * <code>orm.xml</code> virtual join column */ public class GenericOrmVirtualJoinColumn - extends AbstractOrmVirtualBaseColumn<ReadOnlyJoinColumn.Owner, JoinColumn> + extends AbstractOrmVirtualBaseColumn<OrmReadOnlyJoinColumn.Owner, ReadOnlyJoinColumn> implements OrmVirtualJoinColumn { - protected final JoinColumn overriddenColumn; + protected final ReadOnlyJoinColumn overriddenColumn; protected String specifiedReferencedColumnName; protected String defaultReferencedColumnName; - public GenericOrmVirtualJoinColumn(XmlContextNode parent, ReadOnlyJoinColumn.Owner owner, JoinColumn overriddenColumn) { + public GenericOrmVirtualJoinColumn(XmlContextNode parent, OrmReadOnlyJoinColumn.Owner owner, ReadOnlyJoinColumn overriddenColumn) { super(parent, owner); this.overriddenColumn = overriddenColumn; } @@ -49,7 +54,7 @@ public class GenericOrmVirtualJoinColumn // ********** column ********** @Override - public JoinColumn getOverriddenColumn() { + public ReadOnlyJoinColumn getOverriddenColumn() { return this.overriddenColumn; } @@ -93,10 +98,38 @@ public class GenericOrmVirtualJoinColumn } + // ********** database stuff ********** + + public Table getReferencedColumnDbTable() { + return this.owner.getReferencedColumnDbTable(); + } + + protected Column getReferencedDbColumn() { + Table table = this.getReferencedColumnDbTable(); + return (table == null) ? null : table.getColumnForIdentifier(this.getReferencedColumnName()); + } + + public boolean referencedColumnIsResolved() { + return this.getReferencedDbColumn() != null; + } + + // ********** misc ********** @Override protected String buildDefaultName() { return MappingTools.buildJoinColumnDefaultName(this, this.owner); } + + + // ********** validation ********** + + public TextRange getReferencedColumnNameTextRange() { + return this.getValidationTextRange(); + } + + @Override + protected NamedColumnTextRangeResolver buildTextRangeResolver() { + return new OrmJoinColumnTextRangeResolver(this); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualOverrideRelationship.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualOverrideRelationship.java index b6d57f39c0..1cf15a2f43 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualOverrideRelationship.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualOverrideRelationship.java @@ -9,9 +9,16 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; +import java.util.Iterator; +import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.OverrideRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn.Owner; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; import org.eclipse.jpt.jpa.core.context.Relationship; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; @@ -19,10 +26,19 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualAssociationOverride; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualRelationshipStrategy; +import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; import org.eclipse.jpt.jpa.core.internal.context.orm.GenericOrmVirtualOverrideJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.jpa2.context.orm.GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.MappingRelationshipStrategy2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverride2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmVirtualOverrideRelationship2_0; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericOrmVirtualOverrideRelationship extends AbstractOrmXmlContextNode @@ -67,13 +83,37 @@ public class GenericOrmVirtualOverrideRelationship } protected OrmVirtualRelationshipStrategy buildStrategy() { - if (this.isJpa2_0Compatible()) { - if (this.joinColumnStrategy.hasSpecifiedJoinColumns()) { - return this.joinColumnStrategy; - } - return this.joinTableStrategy; - } - return this.joinColumnStrategy; + return this.isJpa2_0Compatible() ? + this.buildStrategy2_0() : + this.joinColumnStrategy; + } + + /** + * The overridden mapping determines the override's strategy. + */ + protected OrmVirtualRelationshipStrategy buildStrategy2_0() { + MappingRelationshipStrategy2_0 mappingStrategy = this.getMappingStrategy(); + return (mappingStrategy != null) ? + (OrmVirtualRelationshipStrategy) mappingStrategy.selectOverrideStrategy(this) : + this.buildMissingMappingStrategy(); + } + + /** + * Get the strategy from the overridden mapping. + */ + protected MappingRelationshipStrategy2_0 getMappingStrategy() { + RelationshipMapping mapping = this.getMapping(); + return (mapping == null) ? null : (MappingRelationshipStrategy2_0) mapping.getRelationship().getStrategy(); + } + + /** + * Return the strategy to use when the override's name does not match the + * name of an appropriate relationship mapping. + */ + protected OrmVirtualRelationshipStrategy buildMissingMappingStrategy() { + return this.joinColumnStrategy.hasSpecifiedJoinColumns() ? + this.joinColumnStrategy : + this.joinTableStrategy; } @@ -88,6 +128,7 @@ public class GenericOrmVirtualOverrideRelationship } public boolean mayHaveDefaultJoinColumn() { + // association overrides do not have defaults return false; } @@ -107,7 +148,8 @@ public class GenericOrmVirtualOverrideRelationship } public boolean mayHaveDefaultJoinTable() { - return this.isVirtual(); + // association overrides do not have defaults + return false; } protected OrmVirtualJoinTableRelationshipStrategy buildJoinTableStrategy() { @@ -135,12 +177,40 @@ public class GenericOrmVirtualOverrideRelationship return (OrmVirtualAssociationOverride) super.getParent(); } - public OrmVirtualAssociationOverride getAssociationOverride() { + protected OrmVirtualAssociationOverride getAssociationOverride() { return this.getParent(); } + protected OrmAssociationOverride2_0 getAssociationOverride2_0() { + return (OrmAssociationOverride2_0) this.getAssociationOverride(); + } + public TypeMapping getTypeMapping() { - return this.getAssociationOverride().getContainer().getTypeMapping(); + return this.getAssociationOverride().getTypeMapping(); + } + + public String getAttributeName() { + return this.getAssociationOverride().getName(); + } + + public boolean tableNameIsInvalid(String tableName) { + return this.getAssociationOverride().tableNameIsInvalid(tableName); + } + + public Iterator<String> candidateTableNames() { + return this.getAssociationOverride().candidateTableNames(); + } + + public Table resolveDbTable(String tableName) { + return this.getAssociationOverride().resolveDbTable(tableName); + } + + public String getDefaultTableName() { + return this.getAssociationOverride().getDefaultTableName(); + } + + public JptValidator buildColumnValidator(ReadOnlyBaseColumn column, Owner owner, BaseColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride().buildColumnValidator(column, owner, textRangeResolver); } public Entity getEntity() { @@ -156,7 +226,7 @@ public class GenericOrmVirtualOverrideRelationship return this.getAssociationOverride().getMapping(); } - public Relationship resolveOverriddenRelationship() { + public ReadOnlyRelationship resolveOverriddenRelationship() { return this.getAssociationOverride().resolveOverriddenRelationship(); } @@ -166,4 +236,22 @@ public class GenericOrmVirtualOverrideRelationship public TextRange getValidationTextRange() { return this.getAssociationOverride().getValidationTextRange(); } + + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + this.strategy.validate(messages, reporter); + } + + public JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableValidator(table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getAssociationOverride2_0().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualPrimaryKeyJoinColumn.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualPrimaryKeyJoinColumn.java index d85905fd19..4d7e1f9e36 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualPrimaryKeyJoinColumn.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualPrimaryKeyJoinColumn.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -9,28 +9,33 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; -import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyBaseJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualPrimaryKeyJoinColumn; +import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmVirtualNamedColumn; +import org.eclipse.jpt.jpa.core.internal.context.orm.OrmPrimaryKeyJoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.db.Column; +import org.eclipse.jpt.jpa.db.Table; /** * <code>orm.xml</code> virtual primary key join column */ public class GenericOrmVirtualPrimaryKeyJoinColumn - extends AbstractOrmVirtualNamedColumn<ReadOnlyBaseJoinColumn.Owner, JavaPrimaryKeyJoinColumn> + extends AbstractOrmVirtualNamedColumn<OrmReadOnlyBaseJoinColumn.Owner, JavaPrimaryKeyJoinColumn> implements OrmVirtualPrimaryKeyJoinColumn { - protected final JavaPrimaryKeyJoinColumn overriddenColumn; + protected final JavaPrimaryKeyJoinColumn javaColumn; protected String specifiedReferencedColumnName; protected String defaultReferencedColumnName; - public GenericOrmVirtualPrimaryKeyJoinColumn(XmlContextNode parent, ReadOnlyBaseJoinColumn.Owner owner, JavaPrimaryKeyJoinColumn overriddenColumn) { + public GenericOrmVirtualPrimaryKeyJoinColumn(XmlContextNode parent, OrmReadOnlyBaseJoinColumn.Owner owner, JavaPrimaryKeyJoinColumn javaColumn) { super(parent, owner); - this.overriddenColumn = overriddenColumn; + this.javaColumn = javaColumn; } @@ -49,7 +54,7 @@ public class GenericOrmVirtualPrimaryKeyJoinColumn @Override public JavaPrimaryKeyJoinColumn getOverriddenColumn() { - return this.overriddenColumn; + return this.javaColumn; } public boolean isDefault() { @@ -92,9 +97,37 @@ public class GenericOrmVirtualPrimaryKeyJoinColumn } + // ********** database stuff ********** + + public Table getReferencedColumnDbTable() { + return this.owner.getReferencedColumnDbTable(); + } + + protected Column getReferencedDbColumn() { + Table table = this.getReferencedColumnDbTable(); + return (table == null) ? null : table.getColumnForIdentifier(this.getReferencedColumnName()); + } + + public boolean referencedColumnIsResolved() { + return this.getReferencedDbColumn() != null; + } + + // ********** misc ********** public String getTable() { return this.owner.getDefaultTableName(); } + + + // ********** validation ********** + + @Override + protected NamedColumnTextRangeResolver buildTextRangeResolver() { + return new OrmPrimaryKeyJoinColumnTextRangeResolver(this); + } + + public TextRange getReferencedColumnNameTextRange() { + return this.getValidationTextRange(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualUniqueConstraint.java index f7ee1413b1..3b2c7d8298 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualUniqueConstraint.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmVirtualUniqueConstraint.java @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.UniqueConstraint; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualUniqueConstraint; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmReadOnlyUniqueConstraint; @@ -19,10 +19,10 @@ public class GenericOrmVirtualUniqueConstraint extends AbstractOrmReadOnlyUniqueConstraint implements OrmVirtualUniqueConstraint { - protected final UniqueConstraint overriddenUniqueConstraint; + protected final ReadOnlyUniqueConstraint overriddenUniqueConstraint; - public GenericOrmVirtualUniqueConstraint(XmlContextNode parent, UniqueConstraint overriddenUniqueConstraint) { + public GenericOrmVirtualUniqueConstraint(XmlContextNode parent, ReadOnlyUniqueConstraint overriddenUniqueConstraint) { super(parent); this.overriddenUniqueConstraint = overriddenUniqueConstraint; } @@ -51,7 +51,7 @@ public class GenericOrmVirtualUniqueConstraint return (XmlContextNode) super.getParent(); } - public UniqueConstraint getOverriddenUniqueConstraint() { + public ReadOnlyUniqueConstraint getOverriddenUniqueConstraint() { return this.overriddenUniqueConstraint; } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/NullOrmJoinColumnRelationshipStrategy.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/NullOrmJoinColumnRelationshipStrategy.java index 986418a13c..d3d37ad989 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/NullOrmJoinColumnRelationshipStrategy.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/NullOrmJoinColumnRelationshipStrategy.java @@ -14,12 +14,14 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.iterators.EmptyListIterator; import org.eclipse.jpt.jpa.core.context.JoinColumn; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumnRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.RelationshipMapping; import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationship; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationshipStrategy; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyOverrideRelationship2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmMappingJoinColumnRelationshipStrategy2_0; import org.eclipse.jpt.jpa.db.Table; /** @@ -29,7 +31,7 @@ import org.eclipse.jpt.jpa.db.Table; */ public class NullOrmJoinColumnRelationshipStrategy extends AbstractOrmXmlContextNode - implements OrmJoinColumnRelationshipStrategy + implements OrmMappingJoinColumnRelationshipStrategy2_0 { public NullOrmJoinColumnRelationshipStrategy(OrmJoinColumnRelationship parent) { super(parent); @@ -123,6 +125,10 @@ public class NullOrmJoinColumnRelationshipStrategy // NOP } + public ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship) { + return null; + } + public void addStrategy() { // NOP } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/GenericJpaFactory2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/GenericJpaFactory2_0.java index da28b49192..1d7c2ebc35 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/GenericJpaFactory2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/GenericJpaFactory2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -19,11 +19,11 @@ import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; import org.eclipse.jpt.jpa.core.context.java.JavaEmbeddable; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; -import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaNamedQuery; import org.eclipse.jpt.jpa.core.context.java.JavaOrderable; 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.java.JavaReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSequenceGenerator; import org.eclipse.jpt.jpa.core.internal.AbstractJpaFactory; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaAssociationOverrideContainer; @@ -150,7 +150,7 @@ public class GenericJpaFactory2_0 return new GenericJavaCollectionTable2_0(parent, owner); } - public JavaOrderColumn2_0 buildJavaOrderColumn(JavaOrderable2_0 parent, JavaNamedColumn.Owner owner) { + public JavaOrderColumn2_0 buildJavaOrderColumn(JavaOrderable2_0 parent, JavaReadOnlyNamedColumn.Owner owner) { return new GenericJavaOrderColumn2_0(parent, owner); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/CollectionTableValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/CollectionTableValidator.java index ee55b444df..f3e45023da 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/CollectionTableValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/CollectionTableValidator.java @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa2.context; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.jpa1.context.AbstractTableValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -18,7 +18,7 @@ import org.eclipse.jpt.jpa.core.jpa2.context.CollectionTable2_0; public class CollectionTableValidator extends AbstractTableValidator { - public CollectionTableValidator(PersistentAttribute persistentAttribute, CollectionTable2_0 table, TableTextRangeResolver textRangeResolver) { + public CollectionTableValidator(ReadOnlyPersistentAttribute persistentAttribute, CollectionTable2_0 table, TableTextRangeResolver textRangeResolver) { super(persistentAttribute, table, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/OrderColumnValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/OrderColumnValidator.java index e911b367ee..4714555ae3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/OrderColumnValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/OrderColumnValidator.java @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa2.context; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.jpa1.context.AbstractNamedColumnValidator; import org.eclipse.jpt.jpa.core.internal.validation.JpaValidationMessages; @@ -19,7 +19,7 @@ public class OrderColumnValidator extends AbstractNamedColumnValidator<OrderColumn2_0, NamedColumnTextRangeResolver> { public OrderColumnValidator( - PersistentAttribute persistentAttribute, + ReadOnlyPersistentAttribute persistentAttribute, OrderColumn2_0 column, NamedColumnTextRangeResolver textRangeResolver) { super(persistentAttribute, column, textRangeResolver); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/AbstractJavaElementCollectionMapping2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/AbstractJavaElementCollectionMapping2_0.java index c22861337c..73252c2e87 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/AbstractJavaElementCollectionMapping2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/AbstractJavaElementCollectionMapping2_0.java @@ -34,18 +34,20 @@ import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.Converter; import org.eclipse.jpt.jpa.core.context.Embeddable; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.FetchType; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; import org.eclipse.jpt.jpa.core.context.PersistentType; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.Relationship; import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.TypeMapping; @@ -85,6 +87,8 @@ import org.eclipse.jpt.jpa.core.jpa2.MappingKeys2_0; import org.eclipse.jpt.jpa.core.jpa2.context.CollectionTable2_0; import org.eclipse.jpt.jpa.core.jpa2.context.MetamodelField; import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAssociationOverrideContainer2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaAttributeOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaCollectionTable2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaElementCollectionMapping2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOrderable2_0; @@ -390,9 +394,9 @@ public abstract class AbstractJavaElementCollectionMapping2_0 } protected class CollectionTableOwner - implements Table.Owner + implements ReadOnlyTable.Owner { - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { return new CollectionTableValidator(AbstractJavaElementCollectionMapping2_0.this.getPersistentAttribute(), (CollectionTable2_0) table, textRangeResolver); } } @@ -581,7 +585,7 @@ public abstract class AbstractJavaElementCollectionMapping2_0 return this.getJpaFactory().buildJavaAssociationOverrideContainer(this, this.buildValueAssociationOverrideContainerOwner()); } - protected JavaAssociationOverrideContainer.Owner buildValueAssociationOverrideContainerOwner() { + protected JavaAssociationOverrideContainer2_0.Owner buildValueAssociationOverrideContainerOwner() { return new ValueAssociationOverrideContainerOwner(); } @@ -1381,8 +1385,8 @@ public abstract class AbstractJavaElementCollectionMapping2_0 return this.getMappingName(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new NamedColumnValidator(this.getPersistentAttribute(), (BaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } } @@ -1405,8 +1409,8 @@ public abstract class AbstractJavaElementCollectionMapping2_0 return this.getMappingName() + "_KEY"; //$NON-NLS-1$ } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new MapKeyColumnValidator(this.getPersistentAttribute(), (BaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new MapKeyColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } } @@ -1446,23 +1450,23 @@ public abstract class AbstractJavaElementCollectionMapping2_0 protected class ValueAttributeOverrideContainerOwner extends ValueOverrideContainerOwner - implements JavaAttributeOverrideContainer.Owner + implements JavaAttributeOverrideContainer2_0.Owner { public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? typeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? overriddenTypeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); } public Column resolveOverriddenColumn(String attributeName) { return MappingTools.resolveOverriddenColumn(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { - return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); } } @@ -1471,7 +1475,7 @@ public abstract class AbstractJavaElementCollectionMapping2_0 protected class ValueAssociationOverrideContainerOwner extends ValueOverrideContainerOwner - implements JavaAssociationOverrideContainer.Owner + implements JavaAssociationOverrideContainer2_0.Owner { public Iterator<String> allOverridableNames() { TypeMapping typeMapping = this.getOverridableTypeMapping(); @@ -1482,24 +1486,28 @@ public abstract class AbstractJavaElementCollectionMapping2_0 return MappingTools.resolveOverriddenRelationship(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AssociationOverrideValidator(this.getPersistentAttribute(), (AssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AssociationOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + } + + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (ReadOnlyJoinColumn) column, (ReadOnlyJoinColumn.Owner) columnOwner, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (AssociationOverride) override, (JoinColumn) column, (JoinColumn.Owner) columnOwner, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + throw this.buildJoinTableUnsupportedException(); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - throw new UnsupportedOperationException("An element collection containing a nested relationship mapping using a join table is not supported"); //$NON-NLS-1$ + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + throw this.buildJoinTableUnsupportedException(); } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - throw new UnsupportedOperationException("An element collection containing a nested relationship mapping using a join table is not supported"); //$NON-NLS-1$ + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + throw this.buildJoinTableUnsupportedException(); } - public JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver) { - throw new UnsupportedOperationException("An element collection containing a nested relationship mapping using a join table is not supported"); //$NON-NLS-1$ + protected UnsupportedOperationException buildJoinTableUnsupportedException() { + return new UnsupportedOperationException("An element collection containing a nested relationship mapping using a join table is not supported"); //$NON-NLS-1$ } } @@ -1508,7 +1516,7 @@ public abstract class AbstractJavaElementCollectionMapping2_0 protected class MapKeyAttributeOverrideContainerOwner extends AbstractOwner - implements JavaAttributeOverrideContainer.Owner + implements JavaAttributeOverrideContainer2_0.Owner { protected static final String POSSIBLE_PREFIX = "key"; //$NON-NLS-1$ protected static final String RELEVANT_PREFIX_ = "key."; //$NON-NLS-1$ @@ -1518,8 +1526,8 @@ public abstract class AbstractJavaElementCollectionMapping2_0 } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? typeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? overriddenTypeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); } public String getPossiblePrefix() { @@ -1543,12 +1551,12 @@ public abstract class AbstractJavaElementCollectionMapping2_0 return MappingTools.resolveOverriddenColumn(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaCollectionTable2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaCollectionTable2_0.java index d5957641ed..4edfdadcfb 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaCollectionTable2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaCollectionTable2_0.java @@ -16,12 +16,12 @@ import org.eclipse.jpt.common.utility.internal.StringTools; import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; @@ -45,7 +45,7 @@ public class GenericJavaCollectionTable2_0 } @Override - protected JavaJoinColumn.Owner buildJoinColumnOwner() { + protected JavaReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -98,7 +98,7 @@ public class GenericJavaCollectionTable2_0 * these point at the source/owning entity */ protected class JoinColumnOwner - implements JavaJoinColumn.Owner + implements JavaReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -171,8 +171,8 @@ public class GenericJavaCollectionTable2_0 return GenericJavaCollectionTable2_0.this.joinColumnsSize(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new JoinColumnValidator(this.getPersistentAttribute(), (JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new JoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaDerivedIdentity2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaDerivedIdentity2_0.java index 769ced834a..457757fde9 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaDerivedIdentity2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaDerivedIdentity2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -14,6 +14,7 @@ import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.Filter; +import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; import org.eclipse.jpt.jpa.core.jpa2.context.DerivedIdentityStrategy2_0; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaDerivedIdentity2_0; @@ -27,6 +28,7 @@ public class GenericJavaDerivedIdentity2_0 extends AbstractJavaJpaContextNode implements JavaDerivedIdentity2_0 { + /** this can be <code>null</code> */ protected DerivedIdentityStrategy2_0 strategy; protected final JavaIdDerivedIdentityStrategy2_0 idStrategy; @@ -59,7 +61,7 @@ public class GenericJavaDerivedIdentity2_0 } - // ********** predominant strategy ********** + // ********** strategy ********** public DerivedIdentityStrategy2_0 getPredominantDerivedIdentityStrategy() { return this.strategy; @@ -161,13 +163,11 @@ public class GenericJavaDerivedIdentity2_0 if (result != null) { return result; } - result = this.mapsIdStrategy.javaCompletionProposals(pos, filter, astRoot); - if (result != null) { - return result; - } - result = this.idStrategy.javaCompletionProposals(pos, filter, astRoot); - if (result != null) { - return result; + if (this.strategy != null) { + result = ((JavaJpaContextNode) this.strategy).javaCompletionProposals(pos, filter, astRoot); + if (result != null) { + return result; + } } return null; } @@ -178,8 +178,9 @@ public class GenericJavaDerivedIdentity2_0 @Override public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { super.validate(messages, reporter, astRoot); - this.idStrategy.validate(messages, reporter, astRoot); - this.mapsIdStrategy.validate(messages, reporter, astRoot); + if (this.strategy != null) { + ((JavaJpaContextNode) this.strategy).validate(messages, reporter, astRoot); + } } public TextRange getValidationTextRange(CompilationUnit astRoot) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaMapsIdDerivedIdentityStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaMapsIdDerivedIdentityStrategy2_0.java index 737a85bf0a..37822cefe2 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaMapsIdDerivedIdentityStrategy2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaMapsIdDerivedIdentityStrategy2_0.java @@ -47,13 +47,13 @@ public class GenericJavaMapsIdDerivedIdentityStrategy2_0 extends AbstractJavaJpaContextNode implements JavaMapsIdDerivedIdentityStrategy2_0 { - protected String specifiedValue; - protected String defaultValue; + protected String specifiedIdAttributeName; + protected String defaultIdAttributeName; public GenericJavaMapsIdDerivedIdentityStrategy2_0(JavaDerivedIdentity2_0 parent) { super(parent); - this.specifiedValue = this.buildSpecifiedValue(); + this.specifiedIdAttributeName = this.buildSpecifiedIdAttributeName(); } @@ -62,54 +62,54 @@ public class GenericJavaMapsIdDerivedIdentityStrategy2_0 @Override public void synchronizeWithResourceModel() { super.synchronizeWithResourceModel(); - this.setSpecifiedValue_(this.buildSpecifiedValue()); + this.setSpecifiedIdAttributeName_(this.buildSpecifiedIdAttributeName()); } @Override public void update() { super.update(); - this.setDefaultValue(this.buildDefaultValue()); + this.setDefaultIdAttributeName(this.buildDefaultIdAttributeName()); } - // ********** value ********** + // ********** ID attribute name ********** - public String getValue() { - return (this.specifiedValue != null) ? this.specifiedValue : this.defaultValue; + public String getIdAttributeName() { + return (this.specifiedIdAttributeName != null) ? this.specifiedIdAttributeName : this.defaultIdAttributeName; } - public String getSpecifiedValue() { - return this.specifiedValue; + public String getSpecifiedIdAttributeName() { + return this.specifiedIdAttributeName; } - public void setSpecifiedValue(String value) { - if (this.valuesAreDifferent(value, this.specifiedValue)) { - this.getAnnotation().setValue(value); - this.setSpecifiedValue_(value); + public void setSpecifiedIdAttributeName(String idAttributeName) { + if (this.valuesAreDifferent(idAttributeName, this.specifiedIdAttributeName)) { + this.getAnnotation().setValue(idAttributeName); + this.setSpecifiedIdAttributeName_(idAttributeName); } } - protected void setSpecifiedValue_(String value) { - String old = this.specifiedValue; - this.specifiedValue = value; - this.firePropertyChanged(SPECIFIED_VALUE_PROPERTY, old, value); + protected void setSpecifiedIdAttributeName_(String idAttributeName) { + String old = this.specifiedIdAttributeName; + this.specifiedIdAttributeName = idAttributeName; + this.firePropertyChanged(SPECIFIED_ID_ATTRIBUTE_NAME_PROPERTY, old, idAttributeName); } - protected String buildSpecifiedValue() { + protected String buildSpecifiedIdAttributeName() { return this.getAnnotation().getValue(); } - public String getDefaultValue() { - return this.defaultValue; + public String getDefaultIdAttributeName() { + return this.defaultIdAttributeName; } - protected void setDefaultValue(String value) { - String old = this.defaultValue; - this.defaultValue = value; - this.firePropertyChanged(SPECIFIED_VALUE_PROPERTY, old, value); + protected void setDefaultIdAttributeName(String idAttributeName) { + String old = this.defaultIdAttributeName; + this.defaultIdAttributeName = idAttributeName; + this.firePropertyChanged(DEFAULT_ID_ATTRIBUTE_NAME_PROPERTY, old, idAttributeName); } - protected String buildDefaultValue() { + protected String buildDefaultIdAttributeName() { Iterator<AttributeMapping> stream = this.getIdAttributeMappings().iterator(); if (stream.hasNext()) { AttributeMapping mapping = stream.next(); @@ -119,7 +119,7 @@ public class GenericJavaMapsIdDerivedIdentityStrategy2_0 return null; // empty } - public boolean usesDefaultValue() { + public boolean defaultIdAttributeNameIsPossible() { return true; } @@ -180,7 +180,7 @@ public class GenericJavaMapsIdDerivedIdentityStrategy2_0 return CollectionTools.collection(this.getPersistentAttribute().getOwningTypeMapping().allAttributeMappings()); } - public Iterable<String> getSortedValueChoices() { + public Iterable<String> getSortedCandidateIdAttributeNames() { return CollectionTools.sort(this.getAllAttributeMappingChoiceNames()); } @@ -233,11 +233,11 @@ public class GenericJavaMapsIdDerivedIdentityStrategy2_0 ); } - public AttributeMapping getResolvedAttributeMappingValue() { - String value = this.getValue(); - if (value != null) { + public AttributeMapping getDerivedIdAttributeMapping() { + String idAttributeName = this.getIdAttributeName(); + if (idAttributeName != null) { for (AttributeMapping mapping : this.getAllAttributeMappingChoices()) { - if (value.equals(mapping.getName())) { + if (idAttributeName.equals(mapping.getName())) { return mapping; } } @@ -277,7 +277,7 @@ public class GenericJavaMapsIdDerivedIdentityStrategy2_0 } protected Iterator<String> sortedJavaValueChoices(Filter<String> filter) { - return StringTools.convertToJavaStringLiterals(new FilteringIterator<String>(this.getSortedValueChoices(), filter)); + return StringTools.convertToJavaStringLiterals(new FilteringIterator<String>(this.getSortedCandidateIdAttributeNames(), filter)); } @@ -323,19 +323,19 @@ public class GenericJavaMapsIdDerivedIdentityStrategy2_0 } protected void validateMapsId_(List<IMessage> messages, CompilationUnit astRoot) { - // test whether value can be resolved - AttributeMapping attributeMapping = this.getResolvedAttributeMappingValue(); + // test whether id attribute name can be resolved + AttributeMapping attributeMapping = this.getDerivedIdAttributeMapping(); if (attributeMapping == null) { - // if value is not specified, use that message - if (this.specifiedValue == null) { + // if id attribute name is not specified, use that message + if (this.specifiedIdAttributeName == null) { messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_NOT_SPECIFIED, EMPTY_STRING_ARRAY, astRoot)); } else { - messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_NOT_RESOLVED, new String[] {this.getValue()}, astRoot)); + messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_NOT_RESOLVED, new String[] {this.getIdAttributeName()}, astRoot)); } } else { // test whether attribute mapping is allowable if ( ! CollectionTools.contains(this.getValidAttributeMappingChoices(), attributeMapping)) { - messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_INVALID, new String[] {this.getValue()}, astRoot)); + messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_INVALID, new String[] {this.getIdAttributeName()}, astRoot)); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOrderColumn2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOrderColumn2_0.java index 3d727384a0..b767f7f081 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOrderColumn2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOrderColumn2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -9,7 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa2.context.java; -import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaNamedColumn; import org.eclipse.jpt.jpa.core.internal.jpa2.resource.java.OrderColumn2_0AnnotationDefinition; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOrderColumn2_0; @@ -21,7 +21,7 @@ import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePersistentAttribute; * Java order column */ public class GenericJavaOrderColumn2_0 - extends AbstractJavaNamedColumn<OrderColumn2_0Annotation, JavaNamedColumn.Owner> + extends AbstractJavaNamedColumn<OrderColumn2_0Annotation, JavaReadOnlyNamedColumn.Owner> implements JavaOrderColumn2_0 { protected Boolean specifiedNullable; @@ -37,7 +37,7 @@ public class GenericJavaOrderColumn2_0 protected OrderColumn2_0Annotation nullColumnAnnotation; - public GenericJavaOrderColumn2_0(JavaOrderable2_0 parent, JavaNamedColumn.Owner owner) { + public GenericJavaOrderColumn2_0(JavaOrderable2_0 parent, JavaReadOnlyNamedColumn.Owner owner) { super(parent, owner); this.specifiedNullable = this.buildSpecifiedNullable(); this.specifiedInsertable = this.buildSpecifiedInsertable(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOverrideJoinTableRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOverrideJoinTableRelationshipStrategy2_0.java index 73f8a1c43a..c4a7ab7f72 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOverrideJoinTableRelationshipStrategy2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaOverrideJoinTableRelationshipStrategy2_0.java @@ -11,18 +11,13 @@ package org.eclipse.jpt.jpa.core.internal.jpa2.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.Table; -import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJoinTableRelationshipStrategy; -import org.eclipse.jpt.jpa.core.internal.jpa1.context.AssociationOverrideInverseJoinColumnValidator; -import org.eclipse.jpt.jpa.core.internal.jpa1.context.AssociationOverrideJoinColumnValidator; -import org.eclipse.jpt.jpa.core.internal.jpa1.context.AssociationOverrideJoinTableValidator; -import org.eclipse.jpt.jpa.core.internal.jpa1.context.JoinTableTableDescriptionProvider; import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaOverrideRelationship2_0; import org.eclipse.jpt.jpa.core.jpa2.resource.java.AssociationOverride2_0Annotation; import org.eclipse.jpt.jpa.core.resource.java.JoinTableAnnotation; @@ -53,7 +48,7 @@ public class GenericJavaOverrideJoinTableRelationshipStrategy2_0 protected AssociationOverride2_0Annotation getOverrideAnnotation() { // only JPA 2.0 association overrides can have a join table (join strategy) - return (AssociationOverride2_0Annotation) this.getAssociationOverride().getOverrideAnnotation(); + return (AssociationOverride2_0Annotation) this.getRelationship().getOverrideAnnotation(); } @@ -69,10 +64,6 @@ public class GenericJavaOverrideJoinTableRelationshipStrategy2_0 return this.getParent(); } - protected JavaAssociationOverride getAssociationOverride() { - return this.getRelationship().getAssociationOverride(); - } - public boolean isOverridable() { return false; } @@ -88,15 +79,15 @@ public class GenericJavaOverrideJoinTableRelationshipStrategy2_0 return this.getRelationship().getValidationTextRange(astRoot); } - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinTableValidator(this.getAssociationOverride(), (JoinTable) table, textRangeResolver); + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableValidator((ReadOnlyJoinTable) table, textRangeResolver); } - public JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinColumnValidator(this.getAssociationOverride(), column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); } - public JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideInverseJoinColumnValidator(this.getAssociationOverride(), column, owner, textRangeResolver, new JoinTableTableDescriptionProvider()); + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0.java index 32b5cab20c..4bdd41b7a4 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/java/GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0.java @@ -9,26 +9,34 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa2.context.java; +import java.util.List; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.JoinTableRelationship; -import org.eclipse.jpt.jpa.core.context.JoinTableRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.Relationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinTable; -import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.java.JavaVirtualJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode; +import org.eclipse.jpt.jpa.core.jpa2.context.java.JavaVirtualOverrideRelationship2_0; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0 extends AbstractJavaJpaContextNode - implements JavaVirtualJoinTableRelationshipStrategy + implements JavaVirtualJoinTableRelationshipStrategy, ReadOnlyTable.Owner { protected JavaVirtualJoinTable joinTable; - public GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0(JavaVirtualJoinTableRelationship parent) { + public GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0(JavaVirtualOverrideRelationship2_0 parent) { super(parent); } @@ -55,7 +63,7 @@ public class GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0 } protected void updateJoinTable() { - JoinTable overriddenJoinTable = this.getOverriddenJoinTable(); + ReadOnlyJoinTable overriddenJoinTable = this.getOverriddenJoinTable(); if (overriddenJoinTable == null) { if (this.joinTable != null) { this.setJoinTable(null); @@ -69,38 +77,38 @@ public class GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0 } } - protected JoinTable getOverriddenJoinTable() { - JoinTableRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); + protected ReadOnlyJoinTable getOverriddenJoinTable() { + ReadOnlyJoinTableRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); return (overriddenStrategy == null) ? null : overriddenStrategy.getJoinTable(); } - protected JavaVirtualJoinTable buildJoinTable(JoinTable overriddenJoinTable) { - return this.getJpaFactory().buildJavaVirtualJoinTable(this, overriddenJoinTable); + protected JavaVirtualJoinTable buildJoinTable(ReadOnlyJoinTable overriddenJoinTable) { + return this.getJpaFactory().buildJavaVirtualJoinTable(this, this, overriddenJoinTable); } // ********** misc ********** @Override - public JavaVirtualJoinTableRelationship getParent() { - return (JavaVirtualJoinTableRelationship) super.getParent(); + public JavaVirtualOverrideRelationship2_0 getParent() { + return (JavaVirtualOverrideRelationship2_0) super.getParent(); } - public JavaVirtualJoinTableRelationship getRelationship() { + public JavaVirtualOverrideRelationship2_0 getRelationship() { return this.getParent(); } - protected JoinTableRelationshipStrategy getOverriddenStrategy() { - JoinTableRelationship relationship = this.getOverriddenJoinTableRelationship(); + protected ReadOnlyJoinTableRelationshipStrategy getOverriddenStrategy() { + ReadOnlyJoinTableRelationship relationship = this.getOverriddenJoinTableRelationship(); return (relationship == null) ? null : relationship.getJoinTableStrategy(); } - protected JoinTableRelationship getOverriddenJoinTableRelationship() { - Relationship relationship = this.resolveOverriddenRelationship(); - return (relationship instanceof JoinTableRelationship) ? (JoinTableRelationship) relationship : null; + protected ReadOnlyJoinTableRelationship getOverriddenJoinTableRelationship() { + ReadOnlyRelationship relationship = this.resolveOverriddenRelationship(); + return (relationship instanceof ReadOnlyJoinTableRelationship) ? (ReadOnlyJoinTableRelationship) relationship : null; } - protected Relationship resolveOverriddenRelationship() { + protected ReadOnlyRelationship resolveOverriddenRelationship() { return this.getRelationship().resolveOverriddenRelationship(); } @@ -115,7 +123,31 @@ public class GenericJavaVirtualOverrideJoinTableRelationshipStrategy2_0 // ********** validation ********** + @Override + public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { + super.validate(messages, reporter, astRoot); + if (this.joinTable != null) { + this.joinTable.validate(messages, reporter, astRoot); + } + } + + public boolean validatesAgainstDatabase() { + return this.getRelationship().getTypeMapping().validatesAgainstDatabase(); + } + public TextRange getValidationTextRange(CompilationUnit astRoot) { return this.getRelationship().getValidationTextRange(astRoot); } + + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableValidator((ReadOnlyJoinTable) table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java index 35d1b72d0c..eeaa64aed1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/AbstractOrmElementCollectionMapping2_0.java @@ -34,18 +34,20 @@ import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.AttributeOverride; import org.eclipse.jpt.jpa.core.context.AttributeOverrideContainer; -import org.eclipse.jpt.jpa.core.context.BaseColumn; import org.eclipse.jpt.jpa.core.context.Column; import org.eclipse.jpt.jpa.core.context.Converter; import org.eclipse.jpt.jpa.core.context.Embeddable; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.FetchType; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.OverrideContainer; -import org.eclipse.jpt.jpa.core.context.Override_; import org.eclipse.jpt.jpa.core.context.PersistentType; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAttributeOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.Relationship; import org.eclipse.jpt.jpa.core.context.Table; import org.eclipse.jpt.jpa.core.context.TypeMapping; @@ -89,6 +91,7 @@ import org.eclipse.jpt.jpa.core.jpa2.MappingKeys2_0; import org.eclipse.jpt.jpa.core.jpa2.context.CollectionTable2_0; import org.eclipse.jpt.jpa.core.jpa2.context.MetamodelField; import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCollectionTable2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmElementCollectionMapping2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmOrderable2_0; @@ -375,9 +378,9 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen } protected class CollectionTableOwner - implements Table.Owner + implements ReadOnlyTable.Owner { - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { return new CollectionTableValidator(AbstractOrmElementCollectionMapping2_0.this.getPersistentAttribute(), (CollectionTable2_0) table, textRangeResolver); } } @@ -1329,6 +1332,10 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen return AbstractOrmElementCollectionMapping2_0.this.getValidationTextRange(); } + public Iterable<String> getJavaOverrideNames() { + return null; + } + protected String getMappingName() { return AbstractOrmElementCollectionMapping2_0.this.getName(); } @@ -1371,8 +1378,8 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen return this.getMappingName(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new NamedColumnValidator(this.getPersistentAttribute(), (BaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new NamedColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } } @@ -1401,8 +1408,8 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen return this.getMappingName() + "_KEY"; //$NON-NLS-1$ } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new MapKeyColumnValidator(this.getPersistentAttribute(), (BaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new MapKeyColumnValidator(this.getPersistentAttribute(), (ReadOnlyBaseColumn) column, (BaseColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } } @@ -1411,7 +1418,7 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen protected class ValueAssociationOverrideContainerOwner extends AbstractOwner - implements OrmAssociationOverrideContainer.Owner + implements OrmAssociationOverrideContainer2_0.Owner { public TypeMapping getOverridableTypeMapping() { return AbstractOrmElementCollectionMapping2_0.this.getResolvedTargetEmbeddable(); @@ -1430,24 +1437,28 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen return MappingTools.resolveOverriddenRelationship(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { - return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (AssociationOverride) override, (JoinColumn) column, (JoinColumn.Owner) columnOwner, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + return new AssociationOverrideJoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (ReadOnlyJoinColumn) column, (ReadOnlyJoinColumn.Owner) columnOwner, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } - public JptValidator buildJoinTableJoinColumnValidator(AssociationOverride override, JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - throw new UnsupportedOperationException("An element collection containing a nested relationship mapping using a JoinTable is not supported"); //$NON-NLS-1$ + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AssociationOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AssociationOverrideValidator(this.getPersistentAttribute(), (AssociationOverride) override, (AssociationOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + throw this.buildJoinTableUnsupportedException(); } - public JptValidator buildJoinTableInverseJoinColumnValidator(AssociationOverride override, JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - throw new UnsupportedOperationException("An element collection containing a nested relationship mapping using a JoinTable is not supported"); //$NON-NLS-1$ + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + throw this.buildJoinTableUnsupportedException(); } - public JptValidator buildTableValidator(AssociationOverride override, Table table, TableTextRangeResolver textRangeResolver) { - throw new UnsupportedOperationException("An element collection containing a nested relationship mapping using a JoinTable is not supported"); //$NON-NLS-1$ + public JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + throw this.buildJoinTableUnsupportedException(); + } + + protected UnsupportedOperationException buildJoinTableUnsupportedException() { + return new UnsupportedOperationException("An element collection containing a nested relationship mapping using a join table is not supported"); //$NON-NLS-1$ } } @@ -1463,8 +1474,8 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? typeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? overriddenTypeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); } public EList<XmlAttributeOverride> getXmlOverrides() { @@ -1475,12 +1486,12 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen return MappingTools.resolveOverriddenColumn(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new AttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new AttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { - return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + return new AttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); } } @@ -1496,8 +1507,8 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen } public Iterator<String> allOverridableNames() { - TypeMapping typeMapping = this.getOverridableTypeMapping(); - return (typeMapping != null) ? typeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); + TypeMapping overriddenTypeMapping = this.getOverridableTypeMapping(); + return (overriddenTypeMapping != null) ? overriddenTypeMapping.allOverridableAttributeNames() : EmptyIterator.<String>instance(); } public EList<XmlAttributeOverride> getXmlOverrides() { @@ -1508,12 +1519,12 @@ public abstract class AbstractOrmElementCollectionMapping2_0<X extends XmlElemen return MappingTools.resolveOverriddenColumn(this.getOverridableTypeMapping(), attributeName); } - public JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (AttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); + public JptValidator buildOverrideValidator(ReadOnlyOverride override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, (AttributeOverrideContainer) container, textRangeResolver, new EmbeddableOverrideDescriptionProvider()); } - public JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { - return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (AttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyOverride override, ReadOnlyBaseColumn column, ReadOnlyBaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver) { + return new MapKeyAttributeOverrideColumnValidator(this.getPersistentAttribute(), (ReadOnlyAttributeOverride) override, column, textRangeResolver, new CollectionTableTableDescriptionProvider()); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmCollectionTable2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmCollectionTable2_0.java index 9e8b3ffbdc..62b9f779e2 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmCollectionTable2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmCollectionTable2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -14,12 +14,12 @@ import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.common.utility.internal.iterators.EmptyIterator; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.NamedColumn; import org.eclipse.jpt.jpa.core.context.PersistentAttribute; import org.eclipse.jpt.jpa.core.context.ReadOnlyBaseJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.TypeMapping; -import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyJoinColumn; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; @@ -46,7 +46,7 @@ public class GenericOrmCollectionTable2_0 } @Override - protected OrmJoinColumn.Owner buildJoinColumnOwner() { + protected OrmReadOnlyJoinColumn.Owner buildJoinColumnOwner() { return new JoinColumnOwner(); } @@ -114,7 +114,7 @@ public class GenericOrmCollectionTable2_0 * these point at the source/owning entity */ protected class JoinColumnOwner - implements OrmJoinColumn.Owner + implements OrmReadOnlyJoinColumn.Owner { protected JoinColumnOwner() { super(); @@ -199,8 +199,8 @@ public class GenericOrmCollectionTable2_0 return GenericOrmCollectionTable2_0.this.getElementCollectionMapping(); } - public JptValidator buildColumnValidator(NamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { - return new JoinColumnValidator(this.getPersistentAttribute(), (JoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); + public JptValidator buildColumnValidator(ReadOnlyNamedColumn column, NamedColumnTextRangeResolver textRangeResolver) { + return new JoinColumnValidator(this.getPersistentAttribute(), (ReadOnlyJoinColumn) column, this, (JoinColumnTextRangeResolver) textRangeResolver, new CollectionTableTableDescriptionProvider()); } } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java index 1312c10b27..11238fe493 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmDerivedIdentity2_0.java @@ -11,6 +11,7 @@ package org.eclipse.jpt.jpa.core.internal.jpa2.context.orm; import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.jpa.core.context.XmlContextNode; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; import org.eclipse.jpt.jpa.core.jpa2.context.DerivedIdentityStrategy2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmDerivedIdentity2_0; @@ -161,8 +162,9 @@ public class GenericOrmDerivedIdentity2_0 @Override public void validate(List<IMessage> messages, IReporter reporter) { super.validate(messages, reporter); - this.idStrategy.validate(messages, reporter); - this.mapsIdStrategy.validate(messages, reporter); + if (this.strategy != null) { + ((XmlContextNode) this.strategy).validate(messages, reporter); + } } public TextRange getValidationTextRange() { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmMapsIdDerivedIdentityStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmMapsIdDerivedIdentityStrategy2_0.java index 3578c83fe1..3b41082bab 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmMapsIdDerivedIdentityStrategy2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmMapsIdDerivedIdentityStrategy2_0.java @@ -13,6 +13,7 @@ import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.common.utility.internal.ArrayTools; import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.NotNullFilter; import org.eclipse.jpt.common.utility.internal.Tools; import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; @@ -40,13 +41,13 @@ public class GenericOrmMapsIdDerivedIdentityStrategy2_0 extends AbstractOrmXmlContextNode implements OrmMapsIdDerivedIdentityStrategy2_0 { - protected String specifiedValue; - // no default value + protected String specifiedIdAttributeName; + // no default public GenericOrmMapsIdDerivedIdentityStrategy2_0(OrmDerivedIdentity2_0 parent) { super(parent); - this.specifiedValue = this.getXmlMapping().getMapsId(); + this.specifiedIdAttributeName = this.getXmlMapping().getMapsId(); } @@ -55,38 +56,38 @@ public class GenericOrmMapsIdDerivedIdentityStrategy2_0 @Override public void synchronizeWithResourceModel() { super.synchronizeWithResourceModel(); - this.setSpecifiedValue_(this.getXmlMapping().getMapsId()); + this.setSpecifiedIdAttributeName_(this.getXmlMapping().getMapsId()); } - // ********** value ********** + // ********** ID attribute name ********** - public String getValue() { - // there is no default value - return this.specifiedValue; + public String getIdAttributeName() { + // there is no default + return this.specifiedIdAttributeName; } - public String getSpecifiedValue() { - return this.specifiedValue; + public String getSpecifiedIdAttributeName() { + return this.specifiedIdAttributeName; } - public void setSpecifiedValue(String value) { - this.setSpecifiedValue_(value); - this.getXmlMapping().setMapsId(value); + public void setSpecifiedIdAttributeName(String idAttributeName) { + this.setSpecifiedIdAttributeName_(idAttributeName); + this.getXmlMapping().setMapsId(idAttributeName); } - protected void setSpecifiedValue_(String value) { - String old = this.specifiedValue; - this.specifiedValue = value; - this.firePropertyChanged(SPECIFIED_VALUE_PROPERTY, old, value); + protected void setSpecifiedIdAttributeName_(String idAttributeName) { + String old = this.specifiedIdAttributeName; + this.specifiedIdAttributeName = idAttributeName; + this.firePropertyChanged(SPECIFIED_ID_ATTRIBUTE_NAME_PROPERTY, old, idAttributeName); } - public String getDefaultValue() { - // there is no way to have default values in xml + public String getDefaultIdAttributeName() { + // there is no way to have a default in xml return null; } - public boolean usesDefaultValue() { + public boolean defaultIdAttributeNameIsPossible() { return false; } @@ -118,69 +119,67 @@ public class GenericOrmMapsIdDerivedIdentityStrategy2_0 return CollectionTools.collection(this.getPersistentAttribute().getOwningTypeMapping().allAttributeMappings()); } - public Iterable<String> getSortedValueChoices() { - return CollectionTools.sort(this.getAllAttributeMappingChoiceNames()); + public Iterable<String> getSortedCandidateIdAttributeNames() { + return CollectionTools.sort(this.getNonNullCandidateIdAttributeNames()); } - protected Iterable<String> getAllAttributeMappingChoiceNames() { - return new FilteringIterable<String>( - new TransformationIterable<AttributeMapping, String>(this.getAllAttributeMappingChoices()) { - @Override - protected String transform(AttributeMapping mapping) { - return mapping.getName(); - } - }) { + protected Iterable<String> getNonNullCandidateIdAttributeNames() { + return new FilteringIterable<String>(this.getCandidateIdAttributeNames(), NotNullFilter.<String>instance()); + } + + protected Iterable<String> getCandidateIdAttributeNames() { + return new TransformationIterable<AttributeMapping, String>(this.getCandidateIdAttributeMappings()) { @Override - protected boolean accept(String o) { - return o != null; + protected String transform(AttributeMapping mapping) { + return mapping.getName(); } }; } - protected Iterable<AttributeMapping> getAllAttributeMappingChoices() { - return this.buildAttributeMappingChoices(this.getAllAttributeMappings()); + protected Iterable<AttributeMapping> getCandidateIdAttributeMappings() { + return this.buildCandidateIdAttributeMappings(this.getAllAttributeMappings()); } - protected Iterable<AttributeMapping> buildAttributeMappingChoices(Iterable<AttributeMapping> attributeMappings) { - return new CompositeIterable<AttributeMapping>(this.getAttributeMappingChoiceIterables(attributeMappings)); + protected Iterable<AttributeMapping> buildCandidateIdAttributeMappings(Iterable<AttributeMapping> attributeMappings) { + return new CompositeIterable<AttributeMapping>(this.getCandidateIdAttributeMappingLists(attributeMappings)); } - /** - * @see #getEmbeddedIdMappingChoiceIterable(EmbeddedIdMapping) - */ - protected Iterable<Iterable<AttributeMapping>> getAttributeMappingChoiceIterables(Iterable<AttributeMapping> availableMappings) { - return new TransformationIterable<AttributeMapping, Iterable<AttributeMapping>>(availableMappings) { + protected Iterable<Iterable<AttributeMapping>> getCandidateIdAttributeMappingLists(Iterable<AttributeMapping> attributeMappings) { + return new TransformationIterable<AttributeMapping, Iterable<AttributeMapping>>(attributeMappings) { @Override - protected Iterable<AttributeMapping> transform(AttributeMapping o) { - return Tools.valuesAreEqual(o.getKey(), MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY) ? - GenericOrmMapsIdDerivedIdentityStrategy2_0.this.getEmbeddedIdMappingChoiceIterable((EmbeddedIdMapping) o) : - new SingleElementIterable<AttributeMapping>(o); + protected Iterable<AttributeMapping> transform(AttributeMapping attributeMapping) { + return Tools.valuesAreEqual(attributeMapping.getKey(), MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY) ? + this.getEmbeddedIdMappingChoiceIterable((EmbeddedIdMapping) attributeMapping) : + new SingleElementIterable<AttributeMapping>(attributeMapping); + } + + /** + * Convert the specified mapping into a collection of its "mappings". + * Typically, this collection will include just the mapping itself; + * but, if the mapping is an embedded ID, this collection will include + * the mapping itself plus all the mappings of its target embeddable. + * + * NB: Recursion is unnecessary. + */ + protected Iterable<AttributeMapping> getEmbeddedIdMappingChoiceIterable(EmbeddedIdMapping mapping) { + Embeddable embeddable = mapping.getTargetEmbeddable(); + if (embeddable == null) { + return new SingleElementIterable<AttributeMapping>(mapping); + } + return new CompositeIterable<AttributeMapping>( + mapping, + CollectionTools.collection(embeddable.allAttributeMappings()) + ); } }; } - /** - * Convert the specified mapping into a collection of its "mappings". - * Typically, this collection will include just the mapping itself; - * but, if the mapping is an embedded ID, this collection will include - * the mapping itself plus all the mappings of its target embeddable. - */ - protected Iterable<AttributeMapping> getEmbeddedIdMappingChoiceIterable(EmbeddedIdMapping mapping) { - Embeddable embeddable = mapping.getTargetEmbeddable(); - if (embeddable == null) { - return new SingleElementIterable<AttributeMapping>(mapping); - } - return new CompositeIterable<AttributeMapping>( - mapping, - CollectionTools.collection(embeddable.allAttributeMappings()) - ); - } - public AttributeMapping getResolvedAttributeMappingValue() { - String value = this.getValue(); - if (value != null) { - for (AttributeMapping mapping : this.getAllAttributeMappingChoices()) { - if (value.equals(mapping.getName())) { + public AttributeMapping getDerivedIdAttributeMapping() { + String idAttributeName = this.getIdAttributeName(); + if (idAttributeName != null) { + for (AttributeMapping mapping : this.getCandidateIdAttributeMappings()) { + if (idAttributeName.equals(mapping.getName())) { return mapping; } } @@ -201,7 +200,7 @@ public class GenericOrmMapsIdDerivedIdentityStrategy2_0 } public void initializeFrom(OrmMapsIdDerivedIdentityStrategy2_0 oldStrategy) { - this.setSpecifiedValue(oldStrategy.getSpecifiedValue()); + this.setSpecifiedIdAttributeName(oldStrategy.getSpecifiedIdAttributeName()); } @@ -247,21 +246,21 @@ public class GenericOrmMapsIdDerivedIdentityStrategy2_0 } protected void validateMapsId_(List<IMessage> messages) { - // test whether value can be resolved - AttributeMapping attributeMapping = this.getResolvedAttributeMappingValue(); + // test whether id attribute name can be resolved + AttributeMapping attributeMapping = this.getDerivedIdAttributeMapping(); if (attributeMapping == null) { - // there is no defaulting, so only use the 'resolved' error, even if the value is empty string - messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_NOT_RESOLVED, new String[] {this.getValue()})); + // there is no defaulting, so only use the 'resolved' error, even if the name is an empty string + messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_NOT_RESOLVED, new String[] {this.getIdAttributeName()})); } else { // test whether attribute mapping is allowable if ( ! CollectionTools.contains(this.getValidAttributeMappingChoices(), attributeMapping)) { - messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_INVALID, new String[] {this.getValue()})); + messages.add(this.buildMessage(JpaValidationMessages.MAPS_ID_VALUE_INVALID, new String[] {this.getIdAttributeName()})); } } } protected Iterable<AttributeMapping> getValidAttributeMappingChoices() { - return this.buildAttributeMappingChoices(this.getIdAttributeMappings()); + return this.buildCandidateIdAttributeMappings(this.getIdAttributeMappings()); } protected IMessage buildMessage(String msgID, String[] parms) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmOverrideJoinTableRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmOverrideJoinTableRelationshipStrategy2_0.java index 12ca663dbf..ce3c95d40b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmOverrideJoinTableRelationshipStrategy2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmOverrideJoinTableRelationshipStrategy2_0.java @@ -10,8 +10,9 @@ package org.eclipse.jpt.jpa.core.internal.jpa2.context.orm; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.Table; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; @@ -43,19 +44,18 @@ public class GenericOrmOverrideJoinTableRelationshipStrategy2_0 } public TextRange getValidationTextRange() { - TextRange textRange = this.getRelationship().getAssociationOverride().getXmlOverride().getValidationTextRange(); - return (textRange != null) ? textRange : this.getRelationship().getValidationTextRange(); + return this.getRelationship().getValidationTextRange(); } - public JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - return this.getRelationship().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableValidator((ReadOnlyJoinTable) table, textRangeResolver); } - public JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { - return this.getRelationship().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); } - public JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver) { - return this.getRelationship().buildTableValidator(table, textRangeResolver); + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0.java index 7d10e7a916..79133360e8 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0.java @@ -9,25 +9,33 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.internal.jpa2.context.orm; +import java.util.List; import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.jpa.core.context.JoinTable; -import org.eclipse.jpt.jpa.core.context.JoinTableRelationship; -import org.eclipse.jpt.jpa.core.context.JoinTableRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.Relationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinTable; -import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualJoinTableRelationshipStrategy; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.MappingTools; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmVirtualOverrideRelationship2_0; +import org.eclipse.wst.validation.internal.provisional.core.IMessage; +import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0 extends AbstractOrmXmlContextNode - implements OrmVirtualJoinTableRelationshipStrategy + implements OrmVirtualJoinTableRelationshipStrategy, ReadOnlyTable.Owner { protected OrmVirtualJoinTable joinTable; - public GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0(OrmVirtualJoinTableRelationship parent) { + public GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0(OrmVirtualOverrideRelationship2_0 parent) { super(parent); } @@ -54,7 +62,7 @@ public class GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0 } protected void updateJoinTable() { - JoinTable overriddenJoinTable = this.getOverriddenJoinTable(); + ReadOnlyJoinTable overriddenJoinTable = this.getOverriddenJoinTable(); if (overriddenJoinTable == null) { if (this.joinTable != null) { this.setJoinTable(null); @@ -68,38 +76,38 @@ public class GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0 } } - protected JoinTable getOverriddenJoinTable() { - JoinTableRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); + protected ReadOnlyJoinTable getOverriddenJoinTable() { + ReadOnlyJoinTableRelationshipStrategy overriddenStrategy = this.getOverriddenStrategy(); return (overriddenStrategy == null) ? null : overriddenStrategy.getJoinTable(); } - protected OrmVirtualJoinTable buildJoinTable(JoinTable overriddenJoinTable) { - return this.getContextNodeFactory().buildOrmVirtualJoinTable(this, overriddenJoinTable); + protected OrmVirtualJoinTable buildJoinTable(ReadOnlyJoinTable overriddenJoinTable) { + return this.getContextNodeFactory().buildOrmVirtualJoinTable(this, this, overriddenJoinTable); } // ********** misc ********** @Override - public OrmVirtualJoinTableRelationship getParent() { - return (OrmVirtualJoinTableRelationship) super.getParent(); + public OrmVirtualOverrideRelationship2_0 getParent() { + return (OrmVirtualOverrideRelationship2_0) super.getParent(); } - public OrmVirtualJoinTableRelationship getRelationship() { + public OrmVirtualOverrideRelationship2_0 getRelationship() { return this.getParent(); } - protected JoinTableRelationshipStrategy getOverriddenStrategy() { - JoinTableRelationship relationship = this.getOverriddenJoinTableRelationship(); + protected ReadOnlyJoinTableRelationshipStrategy getOverriddenStrategy() { + ReadOnlyJoinTableRelationship relationship = this.getOverriddenJoinTableRelationship(); return (relationship == null) ? null : relationship.getJoinTableStrategy(); } - protected JoinTableRelationship getOverriddenJoinTableRelationship() { - Relationship relationship = this.resolveOverriddenRelationship(); - return (relationship instanceof JoinTableRelationship) ? (JoinTableRelationship) relationship : null; + protected ReadOnlyJoinTableRelationship getOverriddenJoinTableRelationship() { + ReadOnlyRelationship relationship = this.resolveOverriddenRelationship(); + return (relationship instanceof ReadOnlyJoinTableRelationship) ? (ReadOnlyJoinTableRelationship) relationship : null; } - protected Relationship resolveOverriddenRelationship() { + protected ReadOnlyRelationship resolveOverriddenRelationship() { return this.getRelationship().resolveOverriddenRelationship(); } @@ -114,7 +122,31 @@ public class GenericOrmVirtualOverrideJoinTableRelationshipStrategy2_0 // ********** validation ********** + @Override + public void validate(List<IMessage> messages, IReporter reporter) { + super.validate(messages, reporter); + if (this.joinTable != null) { + this.joinTable.validate(messages, reporter); + } + } + + public boolean validatesAgainstDatabase() { + return this.getRelationship().getTypeMapping().validatesAgainstDatabase(); + } + public TextRange getValidationTextRange() { return this.getRelationship().getValidationTextRange(); } + + public JptValidator buildTableValidator(ReadOnlyTable table, TableTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableValidator((ReadOnlyJoinTable) table, textRangeResolver); + } + + public JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableJoinColumnValidator(column, owner, textRangeResolver); + } + + public JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver) { + return this.getRelationship().buildJoinTableInverseJoinColumnValidator(column, owner, textRangeResolver); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java index 6da85e8058..423fe0c947 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -19,11 +19,11 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmOrderable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentType; import org.eclipse.jpt.jpa.core.context.orm.OrmSequenceGenerator; -import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer.Owner; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNodeFactory; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.GenericOrmAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.GenericOrmOrderable; import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCacheable2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCacheableHolder2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCollectionTable2_0; @@ -66,7 +66,7 @@ public class GenericOrmXml2_0ContextNodeFactory return new GenericOrmSequenceGenerator2_0(parent, resourceSequenceGenerator); } - public OrmAssociationOverrideContainer buildOrmAssociationOverrideContainer(OrmEmbeddedMapping2_0 parent, Owner owner) { + public OrmAssociationOverrideContainer buildOrmAssociationOverrideContainer(OrmEmbeddedMapping2_0 parent, OrmAssociationOverrideContainer2_0.Owner owner) { return new GenericOrmAssociationOverrideContainer(parent, owner); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java index c4a24d6350..e71255c5ca 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java @@ -10,6 +10,7 @@ package org.eclipse.jpt.jpa.core.internal.validation; @SuppressWarnings("nls") +// TODO bjv rename to JptJpaValidationMessages public interface JpaValidationMessages { public static final String BUNDLE_NAME = "jpa_validation"; @@ -157,7 +158,8 @@ public interface JpaValidationMessages { public static final String PRIMARY_KEY_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS = "PRIMARY_KEY_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS"; public static final String PRIMARY_KEY_JOIN_COLUMN_UNRESOLVED_NAME = "PRIMARY_KEY_JOIN_COLUMN_UNRESOLVED_NAME"; public static final String PRIMARY_KEY_JOIN_COLUMN_UNRESOLVED_REFERENCED_COLUMN_NAME = "PRIMARY_KEY_JOIN_COLUMN_UNRESOLVED_REFERENCED_COLUMN_NAME"; - //***Implied Attribute*** + + // virtual attribute public static final String VIRTUAL_ATTRIBUTE_COLUMN_UNRESOLVED_NAME = "VIRTUAL_ATTRIBUTE_COLUMN_UNRESOLVED_NAME"; public static final String VIRTUAL_ATTRIBUTE_COLUMN_TABLE_NOT_VALID="VIRTUAL_ATTRIBUTE_COLUMN_TABLE_NOT_VALID"; public static final String VIRTUAL_ATTRIBUTE_INVERSE_JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS = "VIRTUAL_ATTRIBUTE_INVERSE_JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS"; @@ -191,7 +193,7 @@ public interface JpaValidationMessages { public static final String ASSOCIATION_OVERRIDE_INVALID_NAME = "ASSOCIATION_OVERRIDE_INVALID_NAME"; public static final String ATTRIBUTE_OVERRIDE_INVALID_NAME = "ATTRIBUTE_OVERRIDE_INVALID_NAME"; public static final String ATTRIBUTE_OVERRIDE_INVALID_TYPE = "ATTRIBUTE_OVERRIDE_INVALID_TYPE"; - public static final String ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED = "ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED"; + public static final String ATTRIBUTE_OVERRIDE_DERIVED_AND_SPECIFIED = "ATTRIBUTE_OVERRIDE_DERIVED_AND_SPECIFIED"; public static final String VIRTUAL_ASSOCIATION_OVERRIDE_INVALID_NAME = "VIRTUAL_ASSOCIATION_OVERRIDE_INVALID_NAME"; public static final String VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS = "VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS"; public static final String VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS = "VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS"; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/JpaFactory2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/JpaFactory2_0.java index ebf2260b44..b14f32b336 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/JpaFactory2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/JpaFactory2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -16,9 +16,9 @@ import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; -import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaOrderable; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; +import org.eclipse.jpt.jpa.core.context.java.JavaReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.jpa2.context.MetamodelSourceType; import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0; import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0.Owner; @@ -78,7 +78,7 @@ public interface JpaFactory2_0 JavaOrphanRemovable2_0 buildJavaOrphanRemoval(JavaOrphanRemovalHolder2_0 parent); - JavaOrderColumn2_0 buildJavaOrderColumn(JavaOrderable2_0 parent, JavaNamedColumn.Owner owner); + JavaOrderColumn2_0 buildJavaOrderColumn(JavaOrderable2_0 parent, JavaReadOnlyNamedColumn.Owner owner); JavaCollectionTable2_0 buildJavaCollectionTable(JavaElementCollectionMapping2_0 parent, Table.Owner owner); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/AssociationOverrideContainer2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/AssociationOverrideContainer2_0.java new file mode 100644 index 0000000000..b7050489d9 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/AssociationOverrideContainer2_0.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context; + +import org.eclipse.jpt.jpa.core.context.AssociationOverrideContainer; +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTable; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; + +/** + * JPA 2.0 + * Association override container. + * Used by entities, embedded mappings, and element collection mappings. + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface AssociationOverrideContainer2_0 + extends AssociationOverrideContainer +{ + JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + + // ********** owner ********** + + interface Owner + extends AssociationOverrideContainer.Owner + { + JptValidator buildJoinTableValidator(ReadOnlyAssociationOverride override, ReadOnlyTable table, TableTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyAssociationOverride override, ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MappedByRelationshipMapping2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/DerivableIdMapping2_0.java index 650dd4c9f1..071e4a85d3 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MappedByRelationshipMapping2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/DerivableIdMapping2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -18,21 +18,21 @@ package org.eclipse.jpt.jpa.core.jpa2.context; * pioneering adopters on the understanding that any code that uses this API * will almost certainly be broken (repeatedly) as the API evolves. */ -public interface MappedByRelationshipMapping2_0 +public interface DerivableIdMapping2_0 extends AttributeMapping2_0 { /** - * Return whether the ID (or embedded ID) mapping is mapped by a + * Return whether the ID (or embedded ID) mapping is derived from a * relationship; i.e. a relationship maps the ID using the * <code>@MapsId</code> annotation. * <p> - * <strong>NB:</strong> There can be several relationships + * <strong>NB:</strong> There can be several relationships that map the ID * (erroneously, of course). */ - boolean isMappedByRelationship(); + boolean isDerived(); /** - * Property string associated with changes to the mapped by relationship + * Property string associated with changes to the derivable flag. */ - final String MAPPED_BY_RELATIONSHIP_PROPERTY = "mappedByRelationship"; //$NON-NLS-1$ + final String DERIVED_PROPERTY = "derived"; //$NON-NLS-1$ } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/EmbeddedIdMapping2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/EmbeddedIdMapping2_0.java index 1612665a3a..353893ab8a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/EmbeddedIdMapping2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/EmbeddedIdMapping2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -24,7 +24,7 @@ import org.eclipse.jpt.jpa.core.context.EmbeddedIdMapping; * @since 2.3 */ public interface EmbeddedIdMapping2_0 - extends EmbeddedIdMapping, MappedByRelationshipMapping2_0 + extends EmbeddedIdMapping, DerivableIdMapping2_0 { // combine various interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/IdMapping2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/IdMapping2_0.java index f72838c729..57ff8da524 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/IdMapping2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/IdMapping2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. + * Copyright (c) 2010, 2011 Oracle. 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. @@ -24,7 +24,7 @@ import org.eclipse.jpt.jpa.core.context.IdMapping; * @since 2.3 */ public interface IdMapping2_0 - extends IdMapping, MappedByRelationshipMapping2_0 + extends IdMapping, DerivableIdMapping2_0 { // combine various interfaces } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MappingRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MappingRelationshipStrategy2_0.java new file mode 100644 index 0000000000..a3e534401f --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MappingRelationshipStrategy2_0.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context; + +import org.eclipse.jpt.jpa.core.context.AssociationOverride; +import org.eclipse.jpt.jpa.core.context.MappingRelationship; +import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationshipStrategy; +import org.eclipse.jpt.jpa.core.context.RelationshipMapping; +import org.eclipse.jpt.jpa.core.context.RelationshipStrategy; + +/** + * Strategy describing how two entities are joined via a + * {@link RelationshipMapping}:<ul> + * <li>join column + * <li>join table + * <li>"mapped by" + * <li>primary key join column + * </ul> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + * + * @see RelationshipMapping + * @see AssociationOverride + * @see MappingRelationship + */ +public interface MappingRelationshipStrategy2_0 + extends RelationshipStrategy +{ + /** + * Select from the specified override relationship which of its strategies + * is the override strategy (<em>join column</em> or <em>join table</em>). + * An association override can only override the same strategy as the + * strategy used by its overridden mapping (i.e. if the overridden mapping + * uses the <em>join column</em> strategy, the association override must + * also use the <em>join column</em> strategy; it cannot change the strategy + * to <em>join table</em>). + * + * Return <code>null</code> if the override relationship cannot be + * determined (typically because the association override's name does not + * match the name of an appropriate attribute mapping in the overridden + * mapped superclass or embeddable type). + */ + ReadOnlyRelationshipStrategy selectOverrideStrategy(ReadOnlyOverrideRelationship2_0 overrideRelationship); +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MapsIdDerivedIdentityStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MapsIdDerivedIdentityStrategy2_0.java index d5309c83e6..57d37ba4cc 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MapsIdDerivedIdentityStrategy2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/MapsIdDerivedIdentityStrategy2_0.java @@ -26,57 +26,56 @@ import org.eclipse.jpt.jpa.core.context.AttributeMapping; public interface MapsIdDerivedIdentityStrategy2_0 extends DerivedIdentityStrategy2_0 { -// TODO bjv rename value to attributeName /** - * Return the specified attribute name, or in its absence, the default - * attribute name. This the name of the ID attribute the relationship + * Return the specified ID attribute name or, in its absence, the default + * ID attribute name. This the name of the ID attribute the relationship * mapping also maps (e.g. a Child's parent mapping also maps part of * the Child's primary key, the parent ID). */ - String getValue(); + String getIdAttributeName(); /** - * String associated with changes to the specified value property of this object + * String associated with changes to the specified ID attribute name property. */ - String SPECIFIED_VALUE_PROPERTY = "specifiedValue"; //$NON-NLS-1$ + String SPECIFIED_ID_ATTRIBUTE_NAME_PROPERTY = "specifiedIdAttributeName"; //$NON-NLS-1$ /** - * Return the specified attribute name. + * Return the specified ID attribute name. * Return <code>null</code> if no name is specified. */ - String getSpecifiedValue(); + String getSpecifiedIdAttributeName(); /** * Set the specified attribute name. */ - void setSpecifiedValue(String value); + void setSpecifiedIdAttributeName(String idAttributeName); /** * Return whether a default value is ever used. * (In some cases, there can be no default.) */ - boolean usesDefaultValue(); + boolean defaultIdAttributeNameIsPossible(); /** - * String associated with changes to the default value property of this object + * String associated with changes to the default ID attribute name property. */ - String DEFAULT_VALUE_PROPERTY = "defaultValue"; //$NON-NLS-1$ + String DEFAULT_ID_ATTRIBUTE_NAME_PROPERTY = "defaultIdAttributeName"; //$NON-NLS-1$ /** - * Return the default attribute name. + * Return the default ID attribute name. */ - String getDefaultValue(); + String getDefaultIdAttributeName(); /** - * Return a sorted list of possible attribute names. + * Return a sorted list of candidate ID attribute names. */ - Iterable<String> getSortedValueChoices(); + Iterable<String> getSortedCandidateIdAttributeNames(); /** - * Return attribute mapping referenced by the attribute name, + * Return attribute mapping referenced by the ID attribute name, * which may be a mapping on the entity * or a mapping within the embeddable mapping referenced by the entity's * embedded ID mapping. */ - AttributeMapping getResolvedAttributeMappingValue(); + AttributeMapping getDerivedIdAttributeMapping(); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/ReadOnlyAssociationOverride2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/ReadOnlyAssociationOverride2_0.java new file mode 100644 index 0000000000..ca67250ac0 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/ReadOnlyAssociationOverride2_0.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context; + +import org.eclipse.jpt.jpa.core.context.ReadOnlyAssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; + +/** + * JPA 2.0 + * Read-only association override + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface ReadOnlyAssociationOverride2_0 + extends ReadOnlyAssociationOverride +{ + JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver); +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/ReadOnlyOverrideRelationship2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/ReadOnlyOverrideRelationship2_0.java index 14d0aceef3..da67243391 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/ReadOnlyOverrideRelationship2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/ReadOnlyOverrideRelationship2_0.java @@ -10,11 +10,16 @@ package org.eclipse.jpt.jpa.core.jpa2.context; import org.eclipse.jpt.jpa.core.context.AssociationOverride; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTable; import org.eclipse.jpt.jpa.core.context.ReadOnlyJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.ReadOnlyOverrideRelationship; +import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; +import org.eclipse.jpt.jpa.core.internal.context.JptValidator; +import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; /** - * Association override relationship + * JPA 2.0 association override relationship * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching @@ -28,5 +33,9 @@ public interface ReadOnlyOverrideRelationship2_0 extends ReadOnlyOverrideRelationship, ReadOnlyJoinTableRelationship { - // add join table support to JPA 1.0 association override + JptValidator buildJoinTableJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableInverseJoinColumnValidator(ReadOnlyJoinColumn column, ReadOnlyJoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); + + JptValidator buildJoinTableValidator(ReadOnlyJoinTable table, TableTextRangeResolver textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/SingleRelationshipMapping2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/SingleRelationshipMapping2_0.java index 6fb656dae7..a601c7215a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/SingleRelationshipMapping2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/SingleRelationshipMapping2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -12,7 +12,7 @@ package org.eclipse.jpt.jpa.core.jpa2.context; import org.eclipse.jpt.jpa.core.context.SingleRelationshipMapping; /** - * JPA 2.0 single (m:1, 1:2) mapping + * JPA 2.0 single relationship (m:1, 1:1) mapping * <p> * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/VirtualOverrideRelationship2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/VirtualOverrideRelationship2_0.java index 5f2cb9985b..a490a8d03f 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/VirtualOverrideRelationship2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/VirtualOverrideRelationship2_0.java @@ -26,5 +26,5 @@ public interface VirtualOverrideRelationship2_0 VirtualJoinTableRelationship, ReadOnlyOverrideRelationship2_0 { - // combine interfaces + // add join table support to JPA 1.0 association override } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAssociationOverride2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAssociationOverride2_0.java new file mode 100644 index 0000000000..6516652a4e --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAssociationOverride2_0.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverride; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyAssociationOverride2_0; + +/** + * JPA 2.0 + * Java <em>specified</em> association override + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaAssociationOverride2_0 + extends JavaAssociationOverride, ReadOnlyAssociationOverride2_0 +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAssociationOverrideContainer2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAssociationOverrideContainer2_0.java new file mode 100644 index 0000000000..945a0d9896 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAssociationOverrideContainer2_0.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; +import org.eclipse.jpt.jpa.core.jpa2.context.AssociationOverrideContainer2_0; + +/** + * JPA 2.0 + * Java association override container + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaAssociationOverrideContainer2_0 + extends JavaAssociationOverrideContainer, JavaOverrideContainer2_0, AssociationOverrideContainer2_0 +{ + // combine interfaces + + + // ********** owner ********** + + interface Owner + extends JavaAssociationOverrideContainer.Owner, JavaOverrideContainer2_0.Owner, AssociationOverrideContainer2_0.Owner + { + // combine interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAttributeOverrideContainer2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAttributeOverrideContainer2_0.java new file mode 100644 index 0000000000..9103d549a4 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaAttributeOverrideContainer2_0.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeOverrideContainer; + +/** + * JPA 2.0 + * Java attribute override container + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaAttributeOverrideContainer2_0 + extends JavaAttributeOverrideContainer, JavaOverrideContainer2_0 +{ + // combine interfaces + + + // ********** owner ********** + + interface Owner + extends JavaAttributeOverrideContainer.Owner, JavaOverrideContainer2_0.Owner + { + // combine interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingJoinColumnRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingJoinColumnRelationshipStrategy2_0.java new file mode 100644 index 0000000000..b65c8d46dd --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingJoinColumnRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaJoinColumnRelationshipStrategy; + +/** + * Java mapping join column relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaMappingJoinColumnRelationshipStrategy2_0 + extends JavaMappingRelationshipStrategy2_0, JavaJoinColumnRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingJoinTableRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingJoinTableRelationshipStrategy2_0.java new file mode 100644 index 0000000000..5d8c7c7d28 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingJoinTableRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaJoinTableRelationshipStrategy; + +/** + * Java mapping join table relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaMappingJoinTableRelationshipStrategy2_0 + extends JavaMappingRelationshipStrategy2_0, JavaJoinTableRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingMappedByRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingMappedByRelationshipStrategy2_0.java new file mode 100644 index 0000000000..48afe663f4 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingMappedByRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaMappedByRelationshipStrategy; + +/** + * Java mapping "mapped by" relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaMappingMappedByRelationshipStrategy2_0 + extends JavaMappingRelationshipStrategy2_0, JavaMappedByRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0.java new file mode 100644 index 0000000000..78f96e9e62 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaPrimaryKeyJoinColumnRelationshipStrategy; + +/** + * Java mapping primary key join column relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 + extends JavaMappingRelationshipStrategy2_0, JavaPrimaryKeyJoinColumnRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingRelationshipStrategy2_0.java new file mode 100644 index 0000000000..b9963e3400 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaMappingRelationshipStrategy2_0.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.MappingRelationshipStrategy2_0; + +/** + * Java mapping relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaMappingRelationshipStrategy2_0 + extends MappingRelationshipStrategy2_0, JavaRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaOverrideContainer2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaOverrideContainer2_0.java new file mode 100644 index 0000000000..b38d902a8f --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaOverrideContainer2_0.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaOverrideContainer; + +/** + * JPA 2.0 + * Java attribute or association override container + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaOverrideContainer2_0 + extends JavaOverrideContainer +{ + /** + * Return a prefix (<em>without</em> the following <code>'.'</code>) + * that may be prepended to the override name. + * Return <code>null</code> if no prefix is supported. + * <p> + * JPA 2.0 supports the pre-defined prefixes + * <code>"value"</code> and <code>"key"</code>. + */ + // TODO better name? + String getPossiblePrefix(); + + /** + * Return the prefix (<em>without</em> the following <code>'.'</code>) + * to be prepended to the override name. + */ + // TODO better name? + String getWritePrefix(); + + + // ********** owner ********** + + interface Owner + extends JavaOverrideContainer.Owner + { + /** + * @see JavaOverrideContainer2_0#getPossiblePrefix() + */ + String getPossiblePrefix(); + + /** + * @see JavaOverrideContainer2_0#getWritePrefix() + */ + String getWritePrefix(); + + /** + * This is necessary for JPA 2.0 because an override annotation for an + * element collection can have a name with a prefix that indicates + * whether the override applies to element collection's embedded key or + * value. Return whether the specified override name, which may have a + * prefix, is relevant to the override container. + */ + // TODO better name? + boolean isRelevant(String overrideName); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaVirtualAssociationOverride2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaVirtualAssociationOverride2_0.java new file mode 100644 index 0000000000..4941d63159 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/java/JavaVirtualAssociationOverride2_0.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.java; + +import org.eclipse.jpt.jpa.core.context.java.JavaVirtualAssociationOverride; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyAssociationOverride2_0; + +/** + * JPA 2.0 + * Java <em>virtual</em> association override + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface JavaVirtualAssociationOverride2_0 + extends JavaVirtualAssociationOverride, ReadOnlyAssociationOverride2_0 +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmAssociationOverride2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmAssociationOverride2_0.java new file mode 100644 index 0000000000..52f063f07f --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmAssociationOverride2_0.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverride; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyAssociationOverride2_0; + +/** + * JPA 2.0 + * <code>orm.xml</code> <em>specified</em> association override + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmAssociationOverride2_0 + extends OrmAssociationOverride, ReadOnlyAssociationOverride2_0 +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmAssociationOverrideContainer2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmAssociationOverrideContainer2_0.java new file mode 100644 index 0000000000..8fe53d9179 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmAssociationOverrideContainer2_0.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer; +import org.eclipse.jpt.jpa.core.jpa2.context.AssociationOverrideContainer2_0; + +/** + * JPA 2.0 + * <code>orm.xml</code> association override container + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmAssociationOverrideContainer2_0 + extends OrmAssociationOverrideContainer, AssociationOverrideContainer2_0 +{ + // combine interfaces + + + // ********** owner ********** + + interface Owner + extends OrmAssociationOverrideContainer.Owner, AssociationOverrideContainer2_0.Owner + { + // combine interfaces + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingJoinColumnRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingJoinColumnRelationshipStrategy2_0.java new file mode 100644 index 0000000000..b65a3e0bef --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingJoinColumnRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmJoinColumnRelationshipStrategy; + +/** + * <code>orm.xml</code> mapping join column relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmMappingJoinColumnRelationshipStrategy2_0 + extends OrmMappingRelationshipStrategy2_0, OrmJoinColumnRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingJoinTableRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingJoinTableRelationshipStrategy2_0.java new file mode 100644 index 0000000000..94ae8fae9c --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingJoinTableRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; + +/** + * <code>orm.xml</code> mapping join table relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmMappingJoinTableRelationshipStrategy2_0 + extends OrmMappingRelationshipStrategy2_0, OrmJoinTableRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingMappedByRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingMappedByRelationshipStrategy2_0.java new file mode 100644 index 0000000000..02d3e5ac1b --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingMappedByRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmMappedByRelationshipStrategy; + +/** + * <code>orm.xml</code> mapping "mapped by" relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmMappingMappedByRelationshipStrategy2_0 + extends OrmMappingRelationshipStrategy2_0, OrmMappedByRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0.java new file mode 100644 index 0000000000..41f61c1970 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmPrimaryKeyJoinColumnRelationshipStrategy; + +/** + * <code>orm.xml</code> mapping primary key join column relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmMappingPrimaryKeyJoinColumnRelationshipStrategy2_0 + extends OrmMappingRelationshipStrategy2_0, OrmPrimaryKeyJoinColumnRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingRelationshipStrategy2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingRelationshipStrategy2_0.java new file mode 100644 index 0000000000..e6f0486254 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmMappingRelationshipStrategy2_0.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmRelationshipStrategy; +import org.eclipse.jpt.jpa.core.jpa2.context.MappingRelationshipStrategy2_0; + +/** + * <code>orm.xml</code> mapping relationship strategy + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmMappingRelationshipStrategy2_0 + extends MappingRelationshipStrategy2_0, OrmRelationshipStrategy +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOrderColumn2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOrderColumn2_0.java index b27ad72124..234210e4a1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOrderColumn2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOrderColumn2_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -10,6 +10,7 @@ package org.eclipse.jpt.jpa.core.jpa2.context.orm; import org.eclipse.jpt.jpa.core.context.orm.OrmNamedColumn; +import org.eclipse.jpt.jpa.core.context.orm.OrmReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.jpa2.context.OrderColumn2_0; import org.eclipse.jpt.jpa.core.resource.orm.XmlOrderColumn; @@ -37,12 +38,10 @@ public interface OrmOrderColumn2_0 * interface allowing order columns to be used in multiple places */ interface Owner - extends OrmNamedColumn.Owner + extends OrmReadOnlyNamedColumn.Owner { XmlOrderColumn getXmlColumn(); - XmlOrderColumn buildXmlColumn(); - void removeXmlColumn(); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOverrideRelationship2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOverrideRelationship2_0.java index 6482ea2742..a3b2a6da83 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOverrideRelationship2_0.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmOverrideRelationship2_0.java @@ -9,15 +9,9 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.core.jpa2.context.orm; -import org.eclipse.jpt.jpa.core.context.JoinColumn; -import org.eclipse.jpt.jpa.core.context.Table; -import org.eclipse.jpt.jpa.core.context.JoinColumn.Owner; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationship; import org.eclipse.jpt.jpa.core.context.orm.OrmJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.orm.OrmOverrideRelationship; -import org.eclipse.jpt.jpa.core.internal.context.JoinColumnTextRangeResolver; -import org.eclipse.jpt.jpa.core.internal.context.JptValidator; -import org.eclipse.jpt.jpa.core.internal.context.TableTextRangeResolver; import org.eclipse.jpt.jpa.core.jpa2.context.OverrideRelationship2_0; /** @@ -38,10 +32,4 @@ public interface OrmOverrideRelationship2_0 OrmJoinTableRelationship { OrmJoinTableRelationshipStrategy getJoinTableStrategy(); - - JptValidator buildJoinTableJoinColumnValidator(JoinColumn column, JoinColumn.Owner owner, JoinColumnTextRangeResolver textRangeResolver); - - JptValidator buildJoinTableInverseJoinColumnValidator(JoinColumn column, Owner owner, JoinColumnTextRangeResolver textRangeResolver); - - JptValidator buildTableValidator(Table table, TableTextRangeResolver textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmVirtualAssociationOverride2_0.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmVirtualAssociationOverride2_0.java new file mode 100644 index 0000000000..53ae5e6f27 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmVirtualAssociationOverride2_0.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.core.jpa2.context.orm; + +import org.eclipse.jpt.jpa.core.context.orm.OrmVirtualAssociationOverride; +import org.eclipse.jpt.jpa.core.jpa2.context.ReadOnlyAssociationOverride2_0; + +/** + * JPA 2.0 + * <code>orm.xml</code> <em>virtual</em> association override + * <p> + * Provisional API: This interface is part of an interim API that is still + * under development and expected to change significantly before reaching + * stability. It is available at this early stage to solicit feedback from + * pioneering adopters on the understanding that any code that uses this API + * will almost certainly be broken (repeatedly) as the API evolves. + */ +public interface OrmVirtualAssociationOverride2_0 + extends OrmVirtualAssociationOverride, ReadOnlyAssociationOverride2_0 +{ + // combine interfaces +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java index b5095b430d..6c9da52217 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -32,9 +32,7 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlElementCollection; public interface OrmXml2_0ContextNodeFactory extends OrmXmlContextNodeFactory { - // ********** ORM Context Model ********** - - OrmAssociationOverrideContainer buildOrmAssociationOverrideContainer(OrmEmbeddedMapping2_0 parent, OrmAssociationOverrideContainer.Owner owner); + OrmAssociationOverrideContainer buildOrmAssociationOverrideContainer(OrmEmbeddedMapping2_0 parent, OrmAssociationOverrideContainer2_0.Owner owner); OrmDerivedIdentity2_0 buildOrmDerivedIdentity(OrmSingleRelationshipMapping2_0 parent); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java index 88742e4f99..ec3f88c476 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. + * Copyright (c) 2008, 2011 Oracle. 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. @@ -10,13 +10,11 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; import java.util.List; - import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.common.utility.internal.iterables.SingleElementIterable; -import org.eclipse.jpt.jpa.core.context.orm.EntityMappings; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentType; import org.eclipse.jpt.jpa.core.internal.context.JptValidator; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmEntity; @@ -216,7 +214,7 @@ public class OrmEclipseLinkEntityImpl return null; } - return this.getEntityMappings().resolveJavaResourcePersistentType(className); + return this.getMappingFileRoot().resolveJavaResourcePersistentType(className); } protected boolean classExtractorIsFor(String typeName) { @@ -229,10 +227,6 @@ public class OrmEclipseLinkEntityImpl return (classExtractorType != null) && classExtractorType.isIn(packageFragment); } - protected EntityMappings getEntityMappings() { - return (EntityMappings) getMappingFileRoot(); - } - // ********** refactoring ********** diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v1_1/context/EclipseLinkPersistentAttributeValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v1_1/context/EclipseLinkPersistentAttributeValidator.java index 4cedb13238..c4692513e6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v1_1/context/EclipseLinkPersistentAttributeValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v1_1/context/EclipseLinkPersistentAttributeValidator.java @@ -10,7 +10,7 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.v1_1.context; import java.util.List; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; +import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; import org.eclipse.jpt.jpa.core.internal.context.PersistentAttributeTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.jpa1.context.AbstractPersistentAttributeValidator; @@ -20,7 +20,7 @@ public class EclipseLinkPersistentAttributeValidator extends AbstractPersistentAttributeValidator { public EclipseLinkPersistentAttributeValidator( - PersistentAttribute persistentAttribute, JavaPersistentAttribute javaPersistentAttribute, PersistentAttributeTextRangeResolver textRangeResolver) + ReadOnlyPersistentAttribute persistentAttribute, JavaPersistentAttribute javaPersistentAttribute, PersistentAttributeTextRangeResolver textRangeResolver) { super(persistentAttribute, javaPersistentAttribute, textRangeResolver); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java index 3b38a8ab75..74646243c0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java @@ -17,11 +17,11 @@ import org.eclipse.jpt.jpa.core.context.java.JavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaColumn; import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; -import org.eclipse.jpt.jpa.core.context.java.JavaNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaNamedQuery; import org.eclipse.jpt.jpa.core.context.java.JavaOrderable; 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.java.JavaReadOnlyNamedColumn; import org.eclipse.jpt.jpa.core.context.java.JavaSequenceGenerator; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.internal.jpa1.context.java.GenericJavaColumn; @@ -134,7 +134,7 @@ public class EclipseLink2_0JpaFactory return new GenericJavaCollectionTable2_0(parent, owner); } - public JavaOrderColumn2_0 buildJavaOrderColumn(JavaOrderable2_0 parent, JavaNamedColumn.Owner owner) { + public JavaOrderColumn2_0 buildJavaOrderColumn(JavaOrderable2_0 parent, JavaReadOnlyNamedColumn.Owner owner) { return new GenericJavaOrderColumn2_0(parent, owner); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java index 4b48c65b03..f2576576d7 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -18,7 +18,6 @@ import org.eclipse.jpt.jpa.core.context.orm.OrmOrderable; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentType; import org.eclipse.jpt.jpa.core.context.orm.OrmSequenceGenerator; -import org.eclipse.jpt.jpa.core.context.orm.OrmAssociationOverrideContainer.Owner; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.GenericOrmAssociationOverrideContainer; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.GenericOrmOrderable; import org.eclipse.jpt.jpa.core.internal.jpa2.context.orm.GenericOrmCacheable2_0; @@ -30,6 +29,7 @@ import org.eclipse.jpt.jpa.core.internal.jpa2.context.orm.GenericOrmOrderColumn2 import org.eclipse.jpt.jpa.core.internal.jpa2.context.orm.GenericOrmOrphanRemoval2_0; import org.eclipse.jpt.jpa.core.internal.jpa2.context.orm.GenericOrmSequenceGenerator2_0; import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmAssociationOverrideContainer2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCacheable2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCacheableHolder2_0; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmCollectionTable2_0; @@ -58,7 +58,7 @@ public class EclipseLinkOrmXml2_0ContextNodeFactory return new OrmEclipseLinkPersistentAttribute1_1(parent, (XmlAttributeMapping) resourceMapping); } - public OrmAssociationOverrideContainer buildOrmAssociationOverrideContainer(OrmEmbeddedMapping2_0 parent, Owner owner) { + public OrmAssociationOverrideContainer buildOrmAssociationOverrideContainer(OrmEmbeddedMapping2_0 parent, OrmAssociationOverrideContainer2_0.Owner owner) { return new GenericOrmAssociationOverrideContainer(parent, owner); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/property_files/jpt_ui_validation_preferences.properties b/jpa/plugins/org.eclipse.jpt.jpa.ui/property_files/jpt_ui_validation_preferences.properties index 755aaeef5d..8e32ffa27b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/property_files/jpt_ui_validation_preferences.properties +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/property_files/jpt_ui_validation_preferences.properties @@ -1,5 +1,5 @@ ################################################################################ -# Copyright (c) 2009, 2010 Oracle. All rights reserved. +# Copyright (c) 2009, 2011 Oracle. 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. @@ -210,7 +210,6 @@ VIRTUAL_ASSOCIATION_OVERRIDE_JOIN_TABLE_UNRESOLVED_SCHEMA=Implied association ov VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID=Implied attribute override table for column not valid: VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_UNRESOLVED_NAME=Implied attribute override column cannot be resolved: VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_NAME=Implied attribute override name cannot be resolved to an attribute: -VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_TYPE=Implied attribute override type cannot be resolved: VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID=Implied map key attribute override table for column is not valid: VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_INVALID_NAME=Implied map key attribute override name cannot be resolved to an attribute diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java index 8906affedf..60e0d85f92 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -223,7 +223,6 @@ public class JptUiValidationPreferenceMessages { public static String VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID; public static String VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_UNRESOLVED_NAME; public static String VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_NAME; - public static String VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_TYPE; public static String VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID; public static String VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_INVALID_NAME; // ---------- Implied Attributes ------------ diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/AttributeOverrideComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/AttributeOverrideComposite.java index fb29087959..e7a24c5c58 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/AttributeOverrideComposite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/AttributeOverrideComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -55,8 +55,7 @@ public class AttributeOverrideComposite extends Pane<ReadOnlyAttributeOverride> new ColumnComposite( this, buildColumnHolder(), - container, - false + container ); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ColumnComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ColumnComposite.java index ddeb54c501..3003fb8e4e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ColumnComposite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ColumnComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -42,25 +42,6 @@ public class ColumnComposite super(parentPane, subjectHolder, parent, false); } - public ColumnComposite( - Pane<?> parentPane, - PropertyValueModel<? extends ReadOnlyColumn> subjectHolder, - Composite parent, - boolean automaticallyAlignWidgets) { - - super(parentPane, subjectHolder, parent, automaticallyAlignWidgets); - } - - public ColumnComposite( - Pane<?> parentPane, - PropertyValueModel<? extends ReadOnlyColumn> subjectHolder, - Composite parent, - boolean automaticallyAlignWidgets, - boolean parentManagePane) { - - super(parentPane, subjectHolder, parent, automaticallyAlignWidgets, parentManagePane); - } - private ColumnCombo<ReadOnlyColumn> addColumnCombo(Composite container) { @@ -96,15 +77,10 @@ public class ColumnComposite @Override protected Table getDbTable_() { - Column column = this.getColumn(); + ReadOnlyColumn column = this.getSubject(); return (column == null) ? null : column.getDbTable(); } - protected Column getColumn() { - ReadOnlyColumn column = this.getSubject(); - return (column instanceof Column) ? (Column) column : null; - } - @Override protected String getValue() { return getSubject().getSpecifiedName(); @@ -256,15 +232,11 @@ public class ColumnComposite return this.getSubject().getSpecifiedTable(); } + // TODO we need to listen for this list to change... @Override protected Iterable<String> getValues_() { - Column column = this.getColumn(); - return (column != null) ? CollectionTools.iterable(column.candidateTableNames()) : EmptyIterable.<String> instance(); - } - - protected Column getColumn() { ReadOnlyColumn column = this.getSubject(); - return (column instanceof Column) ? (Column) column : null; + return (column != null) ? CollectionTools.iterable(column.candidateTableNames()) : EmptyIterable.<String> instance(); } @Override diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/DiscriminatorColumnComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/DiscriminatorColumnComposite.java index e71826c251..70c586a80b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/DiscriminatorColumnComposite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/DiscriminatorColumnComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 Oracle. 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. @@ -10,7 +10,6 @@ package org.eclipse.jpt.jpa.ui.internal.details; import java.util.Collection; - import org.eclipse.jpt.common.ui.internal.JptCommonUiMessages; import org.eclipse.jpt.common.ui.internal.util.PaneEnabler; import org.eclipse.jpt.common.ui.internal.widgets.EnumFormComboViewer; @@ -24,6 +23,7 @@ import org.eclipse.jpt.jpa.core.context.DiscriminatorColumn; import org.eclipse.jpt.jpa.core.context.DiscriminatorType; import org.eclipse.jpt.jpa.core.context.Entity; import org.eclipse.jpt.jpa.core.context.NamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; import org.eclipse.jpt.jpa.db.Table; import org.eclipse.jpt.jpa.ui.internal.JpaHelpContextIds; import org.eclipse.jpt.jpa.ui.internal.details.db.ColumnCombo; @@ -126,8 +126,8 @@ public class DiscriminatorColumnComposite<T extends Entity> extends Pane<T> { @Override protected void addPropertyNames(Collection<String> propertyNames) { super.addPropertyNames(propertyNames); - propertyNames.add(NamedColumn.SPECIFIED_NAME_PROPERTY); - propertyNames.add(NamedColumn.DEFAULT_NAME_PROPERTY); + propertyNames.add(ReadOnlyNamedColumn.SPECIFIED_NAME_PROPERTY); + propertyNames.add(ReadOnlyNamedColumn.DEFAULT_NAME_PROPERTY); } @Override diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/JoinTableComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/JoinTableComposite.java index 6ee91890a4..9a03f13c24 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/JoinTableComposite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/JoinTableComposite.java @@ -291,7 +291,7 @@ public class JoinTableComposite try { if (selected) { - joinTable.convertDefaultToSpecifiedInverseJoinColumn(); + joinTable.convertDefaultInverseJoinColumnToSpecified(); setSelectedInverseJoinColumn(joinTable.specifiedInverseJoinColumns().next()); } else { joinTable.clearSpecifiedInverseJoinColumns(); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ReferenceTableComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ReferenceTableComposite.java index 371764dbd8..0a29891768 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ReferenceTableComposite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/ReferenceTableComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -304,7 +304,7 @@ public abstract class ReferenceTableComposite<T extends ReadOnlyReferenceTable> try { if (selected) { - referenceTable.convertDefaultToSpecifiedJoinColumn(); + referenceTable.convertDefaultJoinColumnToSpecified(); setSelectedJoinColumn(referenceTable.specifiedJoinColumns().next()); } else { for (int index = referenceTable.specifiedJoinColumnsSize(); --index >= 0; ) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/DerivedIdentity2_0Pane.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/DerivedIdentity2_0Pane.java index 071d0aef2c..d09688c331 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/DerivedIdentity2_0Pane.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/DerivedIdentity2_0Pane.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -163,33 +163,33 @@ public class DerivedIdentity2_0Pane @Override protected void addPropertyNames(Collection<String> propertyNames) { super.addPropertyNames(propertyNames); - propertyNames.add(MapsIdDerivedIdentityStrategy2_0.DEFAULT_VALUE_PROPERTY); - propertyNames.add(MapsIdDerivedIdentityStrategy2_0.SPECIFIED_VALUE_PROPERTY); + propertyNames.add(MapsIdDerivedIdentityStrategy2_0.DEFAULT_ID_ATTRIBUTE_NAME_PROPERTY); + propertyNames.add(MapsIdDerivedIdentityStrategy2_0.SPECIFIED_ID_ATTRIBUTE_NAME_PROPERTY); } @Override protected String getValue() { - return (getSubject() == null) ? null : getSubject().getSpecifiedValue(); + return (getSubject() == null) ? null : getSubject().getSpecifiedIdAttributeName(); } @Override protected void setValue(String value) { - if (getSubject() != null) getSubject().setSpecifiedValue(value); + if (getSubject() != null) getSubject().setSpecifiedIdAttributeName(value); } @Override protected boolean usesDefaultValue() { - return (getSubject() == null) ? true : getSubject().usesDefaultValue(); + return (getSubject() != null) && getSubject().defaultIdAttributeNameIsPossible(); } @Override protected String getDefaultValue() { - return (getSubject() == null) ? null : getSubject().getDefaultValue(); + return (getSubject() == null) ? null : getSubject().getDefaultIdAttributeName(); } @Override protected Iterable<String> getValues() { - return (getSubject() == null) ? EmptyIterable.<String>instance() : getSubject().getSortedValueChoices(); + return (getSubject() == null) ? EmptyIterable.<String>instance() : getSubject().getSortedCandidateIdAttributeNames(); } @Override diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/EmbeddedIdMapping2_0MappedByRelationshipPane.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/EmbeddedIdMapping2_0MappedByRelationshipPane.java index 1a1151e508..1687ff9d61 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/EmbeddedIdMapping2_0MappedByRelationshipPane.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/EmbeddedIdMapping2_0MappedByRelationshipPane.java @@ -1,13 +1,12 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.ui.internal.jpa2.details; import org.eclipse.jpt.common.ui.internal.util.ControlSwitcher; @@ -17,7 +16,7 @@ import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; import org.eclipse.jpt.jpa.core.jpa2.context.EmbeddedIdMapping2_0; -import org.eclipse.jpt.jpa.core.jpa2.context.MappedByRelationshipMapping2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.DerivableIdMapping2_0; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; @@ -45,14 +44,14 @@ public class EmbeddedIdMapping2_0MappedByRelationshipPane<T extends EmbeddedIdMa this.mappedByRelationshipLabel = addLabel(pageBook, JptUiDetailsMessages2_0.EmbeddedIdMapping2_0MappedByRelationshipPane_label); - new ControlSwitcher(buildIsMappedByRelationshipHolder(), buildPaneTransformer(), pageBook); + new ControlSwitcher(buildDerivedModel(), buildPaneTransformer(), pageBook); } - protected WritablePropertyValueModel<Boolean> buildIsMappedByRelationshipHolder() { - return new PropertyAspectAdapter<T, Boolean>(getSubjectHolder(), MappedByRelationshipMapping2_0.MAPPED_BY_RELATIONSHIP_PROPERTY) { + protected WritablePropertyValueModel<Boolean> buildDerivedModel() { + return new PropertyAspectAdapter<T, Boolean>(getSubjectHolder(), DerivableIdMapping2_0.DERIVED_PROPERTY) { @Override protected Boolean buildValue_() { - return Boolean.valueOf(this.subject.isMappedByRelationship()); + return Boolean.valueOf(this.subject.isDerived()); } }; } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/IdMapping2_0MappedByRelationshipPane.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/IdMapping2_0MappedByRelationshipPane.java index 1381b5bbff..cb9ecced70 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/IdMapping2_0MappedByRelationshipPane.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/IdMapping2_0MappedByRelationshipPane.java @@ -1,13 +1,12 @@ /******************************************************************************* - * Copyright (c) 2010 Oracle. - * 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: - * Oracle - initial API and implementation - *******************************************************************************/ + * Copyright (c) 2010, 2011 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ package org.eclipse.jpt.jpa.ui.internal.jpa2.details; import org.eclipse.jpt.common.ui.internal.util.ControlSwitcher; @@ -17,7 +16,7 @@ import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; import org.eclipse.jpt.jpa.core.jpa2.context.IdMapping2_0; -import org.eclipse.jpt.jpa.core.jpa2.context.MappedByRelationshipMapping2_0; +import org.eclipse.jpt.jpa.core.jpa2.context.DerivableIdMapping2_0; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; @@ -47,14 +46,14 @@ public class IdMapping2_0MappedByRelationshipPane<T extends IdMapping2_0> this.mappedByRelationshipLabel = addLabel(pageBook, JptUiDetailsMessages2_0.IdMapping2_0MappedByRelationshipPane_label); - new ControlSwitcher(buildIsMappedByRelationshipHolder(), buildPaneTransformer(), pageBook); + new ControlSwitcher(buildDerivedModel(), buildPaneTransformer(), pageBook); } - protected WritablePropertyValueModel<Boolean> buildIsMappedByRelationshipHolder() { - return new PropertyAspectAdapter<T, Boolean>(getSubjectHolder(), MappedByRelationshipMapping2_0.MAPPED_BY_RELATIONSHIP_PROPERTY) { + protected WritablePropertyValueModel<Boolean> buildDerivedModel() { + return new PropertyAspectAdapter<T, Boolean>(getSubjectHolder(), DerivableIdMapping2_0.DERIVED_PROPERTY) { @Override protected Boolean buildValue_() { - return Boolean.valueOf(this.subject.isMappedByRelationship()); + return Boolean.valueOf(this.subject.isDerived()); } }; } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/OrderColumnComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/OrderColumnComposite.java index f5601a87d1..96509d449a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/OrderColumnComposite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/OrderColumnComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Oracle. All rights reserved. + * Copyright (c) 2007, 2011 Oracle. 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. @@ -70,42 +70,6 @@ public class OrderColumnComposite extends Pane<OrderColumn2_0> { super(parentPane, subjectHolder, parent, false); } - /** - * Creates a new <code>ColumnComposite</code>. - * - * @param parentPane The parent container of this one - * @param subjectHolder The holder of the subject <code>IColumn</code> - * @param parent The parent container - * @param automaticallyAlignWidgets <code>true</code> to make the widgets - * this pane aligned with the widgets of the given parent controller; - * <code>false</code> to not align them - */ - public OrderColumnComposite(Pane<?> parentPane, - PropertyValueModel<? extends OrderColumn2_0> subjectHolder, - Composite parent, - boolean automaticallyAlignWidgets) { - - super(parentPane, subjectHolder, parent, automaticallyAlignWidgets); - } - - /** - * Creates a new <code>ColumnComposite</code>. - * - * @param parentPane The parent container of this one - * @param subjectHolder The holder of the subject <code>IColumn</code> - * @param parent The parent container - * @param automaticallyAlignWidgets <code>true</code> to make the widgets - * this pane aligned with the widgets of the given parent controller; - * <code>false</code> to not align them - */ - public OrderColumnComposite(Pane<?> parentPane, - PropertyValueModel<? extends OrderColumn2_0> subjectHolder, - Composite parent, - boolean automaticallyAlignWidgets, - boolean parentManagePane) { - - super(parentPane, subjectHolder, parent, automaticallyAlignWidgets, parentManagePane); - } private ColumnCombo<OrderColumn2_0> addColumnCombo(Composite container) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/Ordering2_0Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/Ordering2_0Composite.java index 4722746511..1e5b2c70fe 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/Ordering2_0Composite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/jpa2/details/Ordering2_0Composite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -9,7 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.ui.internal.jpa2.details; -import org.eclipse.jpt.common.ui.WidgetFactory; import org.eclipse.jpt.common.ui.internal.util.PaneEnabler; import org.eclipse.jpt.common.ui.internal.widgets.Pane; import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; @@ -22,6 +21,8 @@ import org.eclipse.jpt.jpa.core.jpa2.context.Orderable2_0; import org.eclipse.jpt.jpa.ui.internal.JpaHelpContextIds; import org.eclipse.jpt.jpa.ui.internal.details.AbstractOrderingComposite; import org.eclipse.jpt.jpa.ui.internal.details.JptUiDetailsMessages; +import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmManyToManyMappingComposite; +import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmOneToManyMappingComposite; import org.eclipse.swt.widgets.Composite; /** @@ -62,19 +63,6 @@ public class Ordering2_0Composite extends AbstractOrderingComposite super(parentPane, parent); } - /** - * Creates a new <code>OrderingComposite</code>. - * - * @param subjectHolder The holder of the subject <code>IMultiRelationshipMapping</code> - * @param parent The parent container - * @param widgetFactory The factory used to create various common widgets - */ - public Ordering2_0Composite(PropertyValueModel<? extends CollectionMapping> subjectHolder, - Composite parent, - WidgetFactory widgetFactory) { - - super(subjectHolder, parent, widgetFactory); - } @Override protected void initializeLayout(Composite container) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java index 11b1c38e36..dcd5e5def5 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -69,7 +69,7 @@ public class JpaProblemSeveritiesPage extends PropertyAndPreferencePage { * <br> key is the preferenceKey which is also the validation message key @see JpaValidationMessages. * <br> value is a severity level - @see JpaValidationPreferences#ERROR WARNING INFO IGNORE */ - private Map<String, String> severityLevels; + Map<String, String> severityLevels; /** * Default severity levels are stored here, ERROR is the default default so only need @@ -172,30 +172,30 @@ public class JpaProblemSeveritiesPage extends PropertyAndPreferencePage { this.expandablePanes = new ArrayList<ExpandableComposite>(); this.severityDisplayStrings = buildSeverityDisplayStrings(); this.severityLevels = new HashMap<String, String>(); - this.defaultSeverities = buildDefaultSeverties(); + this.defaultSeverities = buildDefaultSeverities(); } //since most of our problems have a default severity of ERROR, we are just defining the WARNING, INFO, IGNORE cases - protected Map<String, String> buildDefaultSeverties() { - Map<String, String> defaultSeverities = new HashMap<String, String>(); - - defaultSeverities.put(JpaValidationMessages.PERSISTENCE_MULTIPLE_PERSISTENCE_UNITS, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.PROJECT_NO_CONNECTION, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.PROJECT_INVALID_CONNECTION, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.PROJECT_INACTIVE_CONNECTION, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.MAPPING_FILE_EXTRANEOUS_PERSISTENCE_UNIT_METADATA, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.PERSISTENT_TYPE_DUPLICATE_CLASS, JpaValidationPreferences.WARNING); //3.0 M7 - defaultSeverities.put(JpaValidationMessages.PERSISTENCE_UNIT_JAR_FILE_DEPLOYMENT_PATH_WARNING, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.PERSISTENT_ATTRIBUTE_INHERITED_ATTRIBUTES_NOT_SUPPORTED, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.PERSISTENT_TYPE_ANNOTATED_BUT_NOT_INCLUDED_IN_PERSISTENCE_UNIT, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.ENTITY_ABSTRACT_DISCRIMINATOR_VALUE_DEFINED, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.PERSISTENT_ATTRIBUTE_INVALID_VERSION_MAPPING_TYPE, JpaValidationPreferences.WARNING); //3.0 M7 - defaultSeverities.put(JpaValidationMessages.ENTITY_TABLE_PER_CLASS_DISCRIMINATOR_VALUE_DEFINED, JpaValidationPreferences.WARNING); - defaultSeverities.put(JpaValidationMessages.ENTITY_TABLE_PER_CLASS_NOT_PORTABLE_ON_PLATFORM, JpaValidationPreferences.WARNING); - - defaultSeverities.put(JpaValidationMessages.XML_VERSION_NOT_LATEST, JpaValidationPreferences.INFO); - defaultSeverities.put(JpaValidationMessages.PERSISTENCE_UNIT_REDUNDANT_CLASS, JpaValidationPreferences.INFO); - return defaultSeverities; + protected Map<String, String> buildDefaultSeverities() { + Map<String, String> result = new HashMap<String, String>(); + + result.put(JpaValidationMessages.PERSISTENCE_MULTIPLE_PERSISTENCE_UNITS, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.PROJECT_NO_CONNECTION, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.PROJECT_INVALID_CONNECTION, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.PROJECT_INACTIVE_CONNECTION, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.MAPPING_FILE_EXTRANEOUS_PERSISTENCE_UNIT_METADATA, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.PERSISTENT_TYPE_DUPLICATE_CLASS, JpaValidationPreferences.WARNING); //3.0 M7 + result.put(JpaValidationMessages.PERSISTENCE_UNIT_JAR_FILE_DEPLOYMENT_PATH_WARNING, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.PERSISTENT_ATTRIBUTE_INHERITED_ATTRIBUTES_NOT_SUPPORTED, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.PERSISTENT_TYPE_ANNOTATED_BUT_NOT_INCLUDED_IN_PERSISTENCE_UNIT, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.ENTITY_ABSTRACT_DISCRIMINATOR_VALUE_DEFINED, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.PERSISTENT_ATTRIBUTE_INVALID_VERSION_MAPPING_TYPE, JpaValidationPreferences.WARNING); //3.0 M7 + result.put(JpaValidationMessages.ENTITY_TABLE_PER_CLASS_DISCRIMINATOR_VALUE_DEFINED, JpaValidationPreferences.WARNING); + result.put(JpaValidationMessages.ENTITY_TABLE_PER_CLASS_NOT_PORTABLE_ON_PLATFORM, JpaValidationPreferences.WARNING); + + result.put(JpaValidationMessages.XML_VERSION_NOT_LATEST, JpaValidationPreferences.INFO); + result.put(JpaValidationMessages.PERSISTENCE_UNIT_REDUNDANT_CLASS, JpaValidationPreferences.INFO); + return result; } @Override @@ -477,7 +477,7 @@ public class JpaProblemSeveritiesPage extends PropertyAndPreferencePage { addLabeledCombo(parent, JptUiValidationPreferenceMessages.ASSOCIATION_OVERRIDE_INVALID_NAME, JpaValidationMessages.ASSOCIATION_OVERRIDE_INVALID_NAME); addLabeledCombo(parent, JptUiValidationPreferenceMessages.ATTRIBUTE_OVERRIDE_INVALID_NAME, JpaValidationMessages.ATTRIBUTE_OVERRIDE_INVALID_NAME); addLabeledCombo(parent, JptUiValidationPreferenceMessages.ATTRIBUTE_OVERRIDE_INVALID_TYPE, JpaValidationMessages.ATTRIBUTE_OVERRIDE_INVALID_TYPE); - addLabeledCombo(parent, JptUiValidationPreferenceMessages.ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED, JpaValidationMessages.ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED); //3.0 M7 + addLabeledCombo(parent, JptUiValidationPreferenceMessages.ATTRIBUTE_OVERRIDE_MAPPED_BY_RELATIONSHIP_AND_SPECIFIED, JpaValidationMessages.ATTRIBUTE_OVERRIDE_DERIVED_AND_SPECIFIED); //3.0 M7 addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_ASSOCIATION_OVERRIDE_INVALID_NAME, JpaValidationMessages.VIRTUAL_ASSOCIATION_OVERRIDE_INVALID_NAME); addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS, JpaValidationMessages.VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS); addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS,JpaValidationMessages.VIRTUAL_ASSOCIATION_OVERRIDE_INVERSE_JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_INVERSE_JOIN_COLUMNS); @@ -495,7 +495,6 @@ public class JpaProblemSeveritiesPage extends PropertyAndPreferencePage { addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID, JpaValidationMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID); addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_UNRESOLVED_NAME, JpaValidationMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_COLUMN_UNRESOLVED_NAME); addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_NAME, JpaValidationMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_NAME); - addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_TYPE, JpaValidationMessages.VIRTUAL_ATTRIBUTE_OVERRIDE_INVALID_TYPE); addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID, JpaValidationMessages.VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_COLUMN_TABLE_NOT_VALID); addLabeledCombo(parent, JptUiValidationPreferenceMessages.VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_INVALID_NAME, JpaValidationMessages.VIRTUAL_MAP_KEY_ATTRIBUTE_OVERRIDE_INVALID_NAME); diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/orm/OrmEntityTests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/orm/OrmEntityTests.java index 267390e1e6..6f9b9607eb 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/orm/OrmEntityTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/context/orm/OrmEntityTests.java @@ -1773,19 +1773,6 @@ public class OrmEntityTests extends ContextModelTestCase assertEquals(4, overrideContainer.virtualOverridesSize()); virtualAttributeOverrides = overrideContainer.virtualOverrides(); virtualOverride = virtualAttributeOverrides.next(); - assertEquals("basic", virtualOverride.getName()); - assertEquals("MY_NAME", virtualOverride.getColumn().getSpecifiedName()); - assertEquals("BAR", virtualOverride.getColumn().getTable()); - assertEquals("COLUMN_DEF", virtualOverride.getColumn().getColumnDefinition()); - assertEquals(false, virtualOverride.getColumn().isInsertable()); - assertEquals(false, virtualOverride.getColumn().isUpdatable()); - assertEquals(true, virtualOverride.getColumn().isUnique()); - assertEquals(false, virtualOverride.getColumn().isNullable()); - assertEquals(5, virtualOverride.getColumn().getLength()); - assertEquals(6, virtualOverride.getColumn().getPrecision()); - assertEquals(7, virtualOverride.getColumn().getScale()); - - virtualOverride = virtualAttributeOverrides.next(); assertEquals("foo", virtualOverride.getName()); assertEquals("FOO", virtualOverride.getColumn().getSpecifiedName());//TODO specified or default? assertEquals("BAR", virtualOverride.getColumn().getSpecifiedTable()); @@ -1797,6 +1784,19 @@ public class OrmEntityTests extends ContextModelTestCase assertEquals(Integer.valueOf(7), virtualOverride.getColumn().getSpecifiedLength()); assertEquals(Integer.valueOf(8), virtualOverride.getColumn().getSpecifiedPrecision()); assertEquals(Integer.valueOf(9), virtualOverride.getColumn().getSpecifiedScale()); + + virtualOverride = virtualAttributeOverrides.next(); + assertEquals("basic", virtualOverride.getName()); + assertEquals("MY_NAME", virtualOverride.getColumn().getSpecifiedName()); + assertEquals("BAR", virtualOverride.getColumn().getTable()); + assertEquals("COLUMN_DEF", virtualOverride.getColumn().getColumnDefinition()); + assertEquals(false, virtualOverride.getColumn().isInsertable()); + assertEquals(false, virtualOverride.getColumn().isUpdatable()); + assertEquals(true, virtualOverride.getColumn().isUnique()); + assertEquals(false, virtualOverride.getColumn().isNullable()); + assertEquals(5, virtualOverride.getColumn().getLength()); + assertEquals(6, virtualOverride.getColumn().getPrecision()); + assertEquals(7, virtualOverride.getColumn().getScale()); virtualOverride = virtualAttributeOverrides.next(); assertEquals("id", virtualOverride.getName()); } @@ -2176,12 +2176,12 @@ public class OrmEntityTests extends ContextModelTestCase virtualOverrides = overrideContainer.virtualOverrides(); virtualOverride = virtualOverrides.next(); joiningStrategy = virtualOverride.getRelationship().getJoinColumnStrategy(); - assertEquals("manyToOne", virtualOverride.getName()); + assertEquals("oneToOne", virtualOverride.getName()); ormJoinColumn = joiningStrategy.joinColumns().next(); - assertEquals("MY_NAME", ormJoinColumn.getSpecifiedName()); - assertEquals("MY_REFERNCE_NAME", ormJoinColumn.getSpecifiedReferencedColumnName()); - assertEquals("BAR2", ormJoinColumn.getSpecifiedTable()); - assertEquals("COLUMN_DEF2", ormJoinColumn.getColumnDefinition()); + assertEquals("FOO", ormJoinColumn.getSpecifiedName()); + assertEquals("REFERENCE", ormJoinColumn.getSpecifiedReferencedColumnName()); + assertEquals("BAR", ormJoinColumn.getSpecifiedTable()); + assertEquals("COLUMN_DEF", ormJoinColumn.getColumnDefinition()); assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedInsertable()); assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedUpdatable()); assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedUnique()); @@ -2189,12 +2189,12 @@ public class OrmEntityTests extends ContextModelTestCase virtualOverride = virtualOverrides.next(); joiningStrategy = virtualOverride.getRelationship().getJoinColumnStrategy(); - assertEquals("oneToOne", virtualOverride.getName()); + assertEquals("manyToOne", virtualOverride.getName()); ormJoinColumn = joiningStrategy.joinColumns().next(); - assertEquals("FOO", ormJoinColumn.getSpecifiedName()); - assertEquals("REFERENCE", ormJoinColumn.getSpecifiedReferencedColumnName()); - assertEquals("BAR", ormJoinColumn.getSpecifiedTable()); - assertEquals("COLUMN_DEF", ormJoinColumn.getColumnDefinition()); + assertEquals("MY_NAME", ormJoinColumn.getSpecifiedName()); + assertEquals("MY_REFERNCE_NAME", ormJoinColumn.getSpecifiedReferencedColumnName()); + assertEquals("BAR2", ormJoinColumn.getSpecifiedTable()); + assertEquals("COLUMN_DEF2", ormJoinColumn.getColumnDefinition()); assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedInsertable()); assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedUpdatable()); assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedUnique()); diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaAssociationOverride2_0Tests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaAssociationOverride2_0Tests.java index a59e36bf22..30b42bf061 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaAssociationOverride2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaAssociationOverride2_0Tests.java @@ -465,7 +465,7 @@ public class GenericJavaAssociationOverride2_0Tests extends Generic2_0ContextMod public void testSetJoinTableName() throws Exception { - createTestMappedSuperclass(); + createTestMappedSuperclassManyToMany(); createTestSubType(); addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); @@ -473,7 +473,6 @@ public class GenericJavaAssociationOverride2_0Tests extends Generic2_0ContextMod JavaAssociationOverrideContainer overrideContainer = getJavaEntity().getAssociationOverrideContainer(); ReadOnlyAssociationOverride javaAssociationOverride = overrideContainer.virtualOverrides().next(); javaAssociationOverride = ((VirtualAssociationOverride) javaAssociationOverride).convertToSpecified(); - ((OverrideRelationship2_0) javaAssociationOverride.getRelationship()).setStrategyToJoinTable(); JoinTableRelationshipStrategy joiningStrategy = ((OverrideRelationship2_0) javaAssociationOverride.getRelationship()).getJoinTableStrategy(); JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(PACKAGE_NAME + ".AnnotationTestTypeChild"); @@ -487,7 +486,7 @@ public class GenericJavaAssociationOverride2_0Tests extends Generic2_0ContextMod } public void testUpdateJoinTable() throws Exception { - createTestMappedSuperclass(); + createTestMappedSuperclassManyToMany(); createTestSubType(); addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild"); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); @@ -495,7 +494,6 @@ public class GenericJavaAssociationOverride2_0Tests extends Generic2_0ContextMod JavaAssociationOverrideContainer overrideContainer = getJavaEntity().getAssociationOverrideContainer(); ReadOnlyAssociationOverride javaAssociationOverride = overrideContainer.virtualOverrides().next(); javaAssociationOverride = ((VirtualAssociationOverride) javaAssociationOverride).convertToSpecified(); - ((OverrideRelationship2_0) javaAssociationOverride.getRelationship()).setStrategyToJoinTable(); JoinTableRelationshipStrategy joiningStrategy = ((OverrideRelationship2_0) javaAssociationOverride.getRelationship()).getJoinTableStrategy(); JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(PACKAGE_NAME + ".AnnotationTestTypeChild"); @@ -505,6 +503,7 @@ public class GenericJavaAssociationOverride2_0Tests extends Generic2_0ContextMod getJpaProject().synchronizeContextModel(); assertEquals("MY_JOIN_TABLE", joiningStrategy.getJoinTable().getSpecifiedName()); + associationOverrideResource.getJoinTable().removeJoinColumn(0); // remove default associationOverrideResource.getJoinTable().addJoinColumn(0); associationOverrideResource.getJoinTable().addJoinColumn(1); associationOverrideResource.getJoinTable().addJoinColumn(2); diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaManyToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaManyToOneMapping2_0Tests.java index 84d453af25..5d2e2199f1 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaManyToOneMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaManyToOneMapping2_0Tests.java @@ -163,24 +163,24 @@ public class GenericJavaManyToOneMapping2_0Tests JavaManyToOneMapping2_0 contextMapping = (JavaManyToOneMapping2_0) contextAttribute.getMapping(); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); MapsId2_0Annotation annotation = (MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID); annotation.setValue("foo"); getJpaProject().synchronizeContextModel(); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); annotation.setValue("bar"); getJpaProject().synchronizeContextModel(); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceAttribute.removeAnnotation(JPA2_0.MAPS_ID); getJpaProject().synchronizeContextModel(); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -194,22 +194,22 @@ public class GenericJavaManyToOneMapping2_0Tests JavaManyToOneMapping2_0 contextMapping = (JavaManyToOneMapping2_0) contextAttribute.getMapping(); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); MapsId2_0Annotation annotation = (MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID); assertNotNull(annotation); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testUpdatePredominantDerivedIdentityStrategy() throws Exception { @@ -307,7 +307,7 @@ public class GenericJavaManyToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertNull(((JavaManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertNotNull(resourceAttribute.getAnnotation(JPA.ID)); @@ -315,7 +315,7 @@ public class GenericJavaManyToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertNull(((JavaOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertNotNull(resourceAttribute.getAnnotation(JPA.ID)); @@ -323,7 +323,7 @@ public class GenericJavaManyToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertNull(((JavaManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ID_ATTRIBUTE_MAPPING_KEY); assertNotNull(resourceAttribute.getAnnotation(JPA.ID)); diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java index e9eecf4dc0..a3d11e5196 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java @@ -322,24 +322,24 @@ public class GenericJavaOneToOneMapping2_0Tests JavaOneToOneMapping2_0 contextMapping = (JavaOneToOneMapping2_0) contextAttribute.getMapping(); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); MapsId2_0Annotation annotation = (MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID); annotation.setValue("foo"); getJpaProject().synchronizeContextModel(); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); annotation.setValue("bar"); getJpaProject().synchronizeContextModel(); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceAttribute.removeAnnotation(JPA2_0.MAPS_ID); getJpaProject().synchronizeContextModel(); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -353,22 +353,22 @@ public class GenericJavaOneToOneMapping2_0Tests JavaOneToOneMapping2_0 contextMapping = (JavaOneToOneMapping2_0) contextAttribute.getMapping(); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); MapsId2_0Annotation annotation = (MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID); assertNotNull(annotation); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testUpdatePredominantDerivedIdentityStrategy() throws Exception { @@ -470,7 +470,7 @@ public class GenericJavaOneToOneMapping2_0Tests assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertEquals("foo", ((MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)).getValue()); assertEquals("foo", ((JavaOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertFalse(((JavaManyToOneMapping2_0) contextAttribute.getMapping()). @@ -478,7 +478,7 @@ public class GenericJavaOneToOneMapping2_0Tests assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertEquals("foo", ((MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)).getValue()); assertEquals("foo", ((JavaManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertFalse(((JavaOneToOneMapping2_0) contextAttribute.getMapping()). @@ -486,7 +486,7 @@ public class GenericJavaOneToOneMapping2_0Tests assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertEquals("foo", ((MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)).getValue()); assertEquals("foo", ((JavaOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testCandidateMappedByAttributeNames() throws Exception { diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java index e316c9c7de..26d026ccb0 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmManyToOneMapping2_0Tests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -261,23 +261,23 @@ public class GenericOrmManyToOneMapping2_0Tests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getManyToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId(""); assertEquals("", resourceMapping.getMapsId()); - assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -289,23 +289,23 @@ public class GenericOrmManyToOneMapping2_0Tests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getManyToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(""); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(""); assertEquals("", resourceMapping.getMapsId()); - assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testUpdatePredominantDerivedIdentityStrategy() throws Exception { @@ -402,7 +402,7 @@ public class GenericOrmManyToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertEquals("foo", resourceManyToOne.getMapsId()); assertEquals("foo", ((OrmManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); XmlOneToOne resourceOneToOne = resourceEntity.getAttributes().getOneToOnes().get(0); @@ -411,7 +411,7 @@ public class GenericOrmManyToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertEquals("foo", resourceOneToOne.getMapsId()); assertEquals("foo", ((OrmOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); resourceManyToOne = resourceEntity.getAttributes().getManyToOnes().get(0); @@ -420,7 +420,7 @@ public class GenericOrmManyToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertEquals("foo", resourceManyToOne.getMapsId()); assertEquals("foo", ((OrmManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testVirtualJoinTable() throws Exception { diff --git a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java index bf86d1be66..124609f7a8 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.core.tests/src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 Oracle. 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. @@ -324,23 +324,23 @@ public class GenericOrmOneToOneMapping2_0Tests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getOneToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId(""); assertEquals("", resourceMapping.getMapsId()); - assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -352,23 +352,23 @@ public class GenericOrmOneToOneMapping2_0Tests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getOneToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(""); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(""); assertEquals("", resourceMapping.getMapsId()); - assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testUpdatePredominantDerivedIdentityStrategy() throws Exception { @@ -465,7 +465,7 @@ public class GenericOrmOneToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceOneToOne.getMapsId()); assertNull(((OrmOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); XmlManyToOne resourceManyToOne = resourceEntity.getAttributes().getManyToOnes().get(0); @@ -474,7 +474,7 @@ public class GenericOrmOneToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceManyToOne.getMapsId()); assertNull(((OrmManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); resourceOneToOne = resourceEntity.getAttributes().getOneToOnes().get(0); @@ -483,7 +483,7 @@ public class GenericOrmOneToOneMapping2_0Tests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceOneToOne.getMapsId()); assertNull(((OrmOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaManyToOneMappingTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaManyToOneMappingTests.java index 5a0a6e10ca..569c8d004f 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaManyToOneMappingTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaManyToOneMappingTests.java @@ -173,17 +173,17 @@ public class EclipseLink2_0JavaManyToOneMappingTests annotation.setValue("foo"); getJpaProject().synchronizeContextModel(); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); annotation.setValue("bar"); getJpaProject().synchronizeContextModel(); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceAttribute.removeAnnotation(JPA2_0.MAPS_ID); getJpaProject().synchronizeContextModel(); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -197,22 +197,22 @@ public class EclipseLink2_0JavaManyToOneMappingTests JavaManyToOneMapping2_0 contextMapping = (JavaManyToOneMapping2_0) contextAttribute.getMapping(); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); MapsId2_0Annotation annotation = (MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID); assertNotNull(annotation); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testMorphMapping() throws Exception { @@ -233,7 +233,7 @@ public class EclipseLink2_0JavaManyToOneMappingTests assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertEquals("foo", ((MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)).getValue()); assertEquals("foo", ((JavaManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertFalse(((JavaOneToOneMapping2_0) contextAttribute.getMapping()). @@ -241,7 +241,7 @@ public class EclipseLink2_0JavaManyToOneMappingTests assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertEquals("foo", ((MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)).getValue()); assertEquals("foo", ((JavaOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertFalse(((JavaManyToOneMapping2_0) contextAttribute.getMapping()). @@ -249,7 +249,7 @@ public class EclipseLink2_0JavaManyToOneMappingTests assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertEquals("foo", ((MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)).getValue()); assertEquals("foo", ((JavaManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testModifyPredominantJoiningStrategy() throws Exception { diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaOneToOneMappingTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaOneToOneMappingTests.java index 8d0d5add4c..1b7e6649a8 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaOneToOneMappingTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/java/EclipseLink2_0JavaOneToOneMappingTests.java @@ -323,24 +323,24 @@ public class EclipseLink2_0JavaOneToOneMappingTests JavaOneToOneMapping2_0 contextMapping = (JavaOneToOneMapping2_0) contextAttribute.getMapping(); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); MapsId2_0Annotation annotation = (MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID); annotation.setValue("foo"); getJpaProject().synchronizeContextModel(); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); annotation.setValue("bar"); getJpaProject().synchronizeContextModel(); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceAttribute.removeAnnotation(JPA2_0.MAPS_ID); getJpaProject().synchronizeContextModel(); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -354,22 +354,22 @@ public class EclipseLink2_0JavaOneToOneMappingTests JavaOneToOneMapping2_0 contextMapping = (JavaOneToOneMapping2_0) contextAttribute.getMapping(); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); MapsId2_0Annotation annotation = (MapsId2_0Annotation) resourceAttribute.getAnnotation(JPA2_0.MAPS_ID); assertNotNull(annotation); assertEquals("foo", annotation.getValue()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", annotation.getValue()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNotNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testMorphMapping() throws Exception { @@ -386,7 +386,7 @@ public class EclipseLink2_0JavaOneToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertNull(((JavaOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertNotNull(resourceAttribute.getAnnotation(JPA.ID)); @@ -394,7 +394,7 @@ public class EclipseLink2_0JavaOneToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertNull(((JavaOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); assertNotNull(resourceAttribute.getAnnotation(JPA.ID)); @@ -402,7 +402,7 @@ public class EclipseLink2_0JavaOneToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceAttribute.getAnnotation(JPA2_0.MAPS_ID)); assertNull(((JavaManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); // this is no longer supported (it was a bit of a testing hack anyway...) // contextAttribute.setMappingKey(MappingKeys.ID_ATTRIBUTE_MAPPING_KEY); diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java index a21b53daef..5051ba899f 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java @@ -330,19 +330,19 @@ public class EclipseLink2_0OrmOneToOneMappingTests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getOneToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -354,19 +354,19 @@ public class EclipseLink2_0OrmOneToOneMappingTests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getOneToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testMorphMapping() throws Exception { @@ -382,7 +382,7 @@ public class EclipseLink2_0OrmOneToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertEquals("foo", resourceOneToOne.getMapsId()); assertEquals("foo", ((OrmOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); XmlManyToOne resourceManyToOne = resourceEntity.getAttributes().getManyToOnes().get(0); @@ -391,7 +391,7 @@ public class EclipseLink2_0OrmOneToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertEquals("foo", resourceManyToOne.getMapsId()); assertEquals("foo", ((OrmManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); resourceOneToOne = resourceEntity.getAttributes().getOneToOnes().get(0); @@ -400,7 +400,7 @@ public class EclipseLink2_0OrmOneToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertEquals("foo", resourceOneToOne.getMapsId()); assertEquals("foo", ((OrmOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testCandidateMappedByAttributeNames() throws Exception { diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/Eclipselink2_0OrmManyToOneMappingTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/Eclipselink2_0OrmManyToOneMappingTests.java index 3200bdf147..b8999b3cfd 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/Eclipselink2_0OrmManyToOneMappingTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/v2_0/context/orm/Eclipselink2_0OrmManyToOneMappingTests.java @@ -261,19 +261,19 @@ public class Eclipselink2_0OrmManyToOneMappingTests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getManyToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); resourceMapping.setMapsId(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testSetMapsId() throws Exception { @@ -285,19 +285,19 @@ public class Eclipselink2_0OrmManyToOneMappingTests XmlMapsId_2_0 resourceMapping = resourceEntity.getAttributes().getManyToOnes().get(0); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("foo"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("foo"); assertEquals("foo", resourceMapping.getMapsId()); - assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("foo", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue("bar"); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName("bar"); assertEquals("bar", resourceMapping.getMapsId()); - assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertEquals("bar", contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); - contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedValue(null); + contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().setSpecifiedIdAttributeName(null); assertNull(resourceMapping.getMapsId()); - assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + assertNull(contextMapping.getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testMorphMapping() throws Exception { @@ -313,7 +313,7 @@ public class Eclipselink2_0OrmManyToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceManyToOne.getMapsId()); assertNull(((OrmManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); XmlOneToOne resourceOneToOne = resourceEntity.getAttributes().getOneToOnes().get(0); @@ -322,7 +322,7 @@ public class Eclipselink2_0OrmManyToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceOneToOne.getMapsId()); assertNull(((OrmOneToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); contextAttribute.setMappingKey(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY); resourceManyToOne.setId(Boolean.TRUE); @@ -331,7 +331,7 @@ public class Eclipselink2_0OrmManyToOneMappingTests getDerivedIdentity().getIdDerivedIdentityStrategy().getValue()); assertNull(resourceManyToOne.getMapsId()); assertNull(((OrmManyToOneMapping2_0) contextAttribute.getMapping()). - getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedValue()); + getDerivedIdentity().getMapsIdDerivedIdentityStrategy().getSpecifiedIdAttributeName()); } public void testVirtualJoinTable() throws Exception { |