Index: src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaPlatformProvider.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaPlatformProvider.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaPlatformProvider.java (working copy) @@ -28,10 +28,10 @@ import org.eclipse.jpt.jpa.core.internal.JavaResourceModelProvider; import org.eclipse.jpt.jpa.core.internal.OrmResourceModelProvider; import org.eclipse.jpt.jpa.core.internal.PersistenceResourceModelProvider; -import org.eclipse.jpt.jpa.core.internal.context.java.JavaBasicMappingDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaEmbeddableDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaEmbeddedIdMappingDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaEmbeddedMappingDefinition; +import org.eclipse.jpt.jpa.core.internal.context.java.JavaManyToManyMappingDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaMappedSuperclassDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaOneToManyMappingDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaTransientMappingDefinition; @@ -39,7 +39,6 @@ import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaBasicMappingDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaEntityDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaIdMappingDefinition; -import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaManyToManyMappingDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaManyToOneMappingDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaOneToOneMappingDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.orm.HibernateOrmXmlDefinition; @@ -133,7 +132,7 @@ // order matches that used by the Reference Implementation (EclipseLink) protected static final DefaultJavaAttributeMappingDefinition[] DEFAULT_JAVA_ATTRIBUTE_MAPPING_DEFINITIONS = new DefaultJavaAttributeMappingDefinition[] { JavaEmbeddedMappingDefinition.instance(), - JavaBasicMappingDefinition.instance() + HibernateJavaBasicMappingDefinition.instance() }; @Override @@ -149,7 +148,7 @@ HibernateJavaBasicMappingDefinition.instance(), JavaEmbeddedMappingDefinition.instance(), JavaEmbeddedIdMappingDefinition.instance(), - HibernateJavaManyToManyMappingDefinition.instance(), + JavaManyToManyMappingDefinition.instance(), HibernateJavaManyToOneMappingDefinition.instance(), JavaOneToManyMappingDefinition.instance(), HibernateJavaOneToOneMappingDefinition.instance(), Index: src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaBasicMappingDefinition.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaBasicMappingDefinition.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaBasicMappingDefinition.java (working copy) @@ -12,14 +12,23 @@ import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaBasicMappingDefinition; +import org.eclipse.jpt.jpa.core.JpaFactory; +import org.eclipse.jpt.jpa.core.MappingKeys; +import org.eclipse.jpt.jpa.core.context.java.DefaultJavaAttributeMappingDefinition; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; +import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; +import org.eclipse.jpt.jpa.core.resource.java.BasicAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.ColumnAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.EnumeratedAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.LobAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.TemporalAnnotation; import org.jboss.tools.hibernate.jpt.core.internal.context.basic.Hibernate; /** * @author Dmitry Geraskov (geraskov@gmail.com) * */ -public class HibernateJavaBasicMappingDefinition extends AbstractJavaBasicMappingDefinition +public class HibernateJavaBasicMappingDefinition implements DefaultJavaAttributeMappingDefinition { // singleton private static final HibernateJavaBasicMappingDefinition INSTANCE = new HibernateJavaBasicMappingDefinition(); @@ -38,15 +47,49 @@ private HibernateJavaBasicMappingDefinition() { super(); } + + public String getKey() { + return MappingKeys.BASIC_ATTRIBUTE_MAPPING_KEY; + } + + public String getAnnotationName() { + return BasicAnnotation.ANNOTATION_NAME; + } + + public boolean isSpecified(JavaPersistentAttribute persistentAttribute) { + return persistentAttribute.getResourcePersistentAttribute().getAnnotation(this.getAnnotationName()) != null; + } protected static final String[] HIBERNATE_ANNOTATION_NAMES_ARRAY = new String[] { Hibernate.GENERATED, Hibernate.INDEX, Hibernate.TYPE }; + + private static final String[] SUPPORTING_ANNOTATION_NAMES_ARRAY = new String[] { + ColumnAnnotation.ANNOTATION_NAME, + LobAnnotation.ANNOTATION_NAME, + TemporalAnnotation.ANNOTATION_NAME, + EnumeratedAnnotation.ANNOTATION_NAME + }; + private static final Iterable SUPPORTING_ANNOTATION_NAMES = new ArrayIterable(SUPPORTING_ANNOTATION_NAMES_ARRAY); + @Override public Iterable getSupportingAnnotationNames() { - return new CompositeIterable(super.getSupportingAnnotationNames(), new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); + return new CompositeIterable(SUPPORTING_ANNOTATION_NAMES, new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); + } + + public JavaAttributeMapping buildMapping(JavaPersistentAttribute persistentAttribute, JpaFactory factory) { + return factory.buildJavaBasicMapping(persistentAttribute); + } + + public boolean isDefault(JavaPersistentAttribute persistentAttribute) { + return persistentAttribute.typeIsBasic(); + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); } } \ No newline at end of file Index: src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaIdMappingDefinition.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaIdMappingDefinition.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaIdMappingDefinition.java (working copy) @@ -12,14 +12,24 @@ import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaIdMappingDefinition; +import org.eclipse.jpt.jpa.core.JpaFactory; +import org.eclipse.jpt.jpa.core.MappingKeys; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMappingDefinition; +import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; +import org.eclipse.jpt.jpa.core.resource.java.ColumnAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.GeneratedValueAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.IdAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.SequenceGeneratorAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.TableGeneratorAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.TemporalAnnotation; import org.jboss.tools.hibernate.jpt.core.internal.context.basic.Hibernate; /** * @author Dmitry Geraskov (geraskov@gmail.com) * */ -public class HibernateJavaIdMappingDefinition extends AbstractJavaIdMappingDefinition +public class HibernateJavaIdMappingDefinition implements JavaAttributeMappingDefinition { // singleton private static final HibernateJavaIdMappingDefinition INSTANCE = new HibernateJavaIdMappingDefinition(); @@ -38,14 +48,46 @@ private HibernateJavaIdMappingDefinition() { super(); } + + public String getKey() { + return MappingKeys.ID_ATTRIBUTE_MAPPING_KEY; + } + + public String getAnnotationName() { + return IdAnnotation.ANNOTATION_NAME; + } + + public boolean isSpecified(JavaPersistentAttribute persistentAttribute) { + return persistentAttribute.getResourcePersistentAttribute().getAnnotation(this.getAnnotationName()) != null; + } protected static final String[] HIBERNATE_ANNOTATION_NAMES_ARRAY = new String[] { Hibernate.INDEX, Hibernate.TYPE }; + + private static final String[] SUPPORTING_ANNOTATION_NAMES_ARRAY = new String[] { + ColumnAnnotation.ANNOTATION_NAME, + GeneratedValueAnnotation.ANNOTATION_NAME, + TemporalAnnotation.ANNOTATION_NAME, + TableGeneratorAnnotation.ANNOTATION_NAME, + SequenceGeneratorAnnotation.ANNOTATION_NAME + }; + private static final Iterable SUPPORTING_ANNOTATION_NAMES = new ArrayIterable(SUPPORTING_ANNOTATION_NAMES_ARRAY); @Override public Iterable getSupportingAnnotationNames() { - return new CompositeIterable(super.getSupportingAnnotationNames(), new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); + return new CompositeIterable(SUPPORTING_ANNOTATION_NAMES, new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); } + + @Override + public JavaAttributeMapping buildMapping(JavaPersistentAttribute persistentAttribute, JpaFactory factory) { + return factory.buildJavaIdMapping(persistentAttribute); + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + } Index: src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaManyToManyMappingDefinition.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaManyToManyMappingDefinition.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaManyToManyMappingDefinition.java (working copy) @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 Red Hat, Inc. - * Distributed under license by Red Hat, Inc. All rights reserved. - * This program is 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 - * - * Contributor: - * Red Hat, Inc. - initial API and implementation - ******************************************************************************/ -package org.jboss.tools.hibernate.jpt.core.internal.context.definition; - -import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaManyToManyMappingDefinition; - - -/** - * @author Dmitry Geraskov (geraskov@gmail.com) - * - */ -public class HibernateJavaManyToManyMappingDefinition extends AbstractJavaManyToManyMappingDefinition { - - // singleton - private static final HibernateJavaManyToManyMappingDefinition INSTANCE = new HibernateJavaManyToManyMappingDefinition(); - - /** - * Return the singleton. - */ - public static HibernateJavaManyToManyMappingDefinition instance() { - return INSTANCE; - } - - - /** - * Enforce singleton usage - */ - private HibernateJavaManyToManyMappingDefinition() { - super(); - } - -} Index: src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaManyToOneMappingDefinition.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaManyToOneMappingDefinition.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaManyToOneMappingDefinition.java (working copy) @@ -12,15 +12,22 @@ import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; +import org.eclipse.jpt.jpa.core.JpaFactory; +import org.eclipse.jpt.jpa.core.MappingKeys; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMappingDefinition; -import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaManyToOneMappingDefinition; +import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; +import org.eclipse.jpt.jpa.core.resource.java.JoinColumnAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.JoinColumnsAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.JoinTableAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.ManyToOneAnnotation; import org.jboss.tools.hibernate.jpt.core.internal.context.basic.Hibernate; /** * @author Dmitry Geraskov (geraskov@gmail.com) * */ -public class HibernateJavaManyToOneMappingDefinition extends AbstractJavaManyToOneMappingDefinition +public class HibernateJavaManyToOneMappingDefinition implements JavaAttributeMappingDefinition { // singleton private static final HibernateJavaManyToOneMappingDefinition INSTANCE = new HibernateJavaManyToOneMappingDefinition(); @@ -39,13 +46,41 @@ private HibernateJavaManyToOneMappingDefinition() { super(); } + + public String getKey() { + return MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY; + } + + public String getAnnotationName() { + return ManyToOneAnnotation.ANNOTATION_NAME; + } + + public boolean isSpecified(JavaPersistentAttribute persistentAttribute) { + return persistentAttribute.getResourcePersistentAttribute().getAnnotation(this.getAnnotationName()) != null; + } protected static final String[] HIBERNATE_ANNOTATION_NAMES_ARRAY = new String[] { Hibernate.FOREIGN_KEY, }; + + private static final String[] SUPPORTING_ANNOTATION_NAMES_ARRAY = new String[] { + JoinTableAnnotation.ANNOTATION_NAME, + JoinColumnAnnotation.ANNOTATION_NAME, + JoinColumnsAnnotation.ANNOTATION_NAME + }; + private static final Iterable SUPPORTING_ANNOTATION_NAMES = new ArrayIterable(SUPPORTING_ANNOTATION_NAMES_ARRAY); @Override public Iterable getSupportingAnnotationNames() { - return new CompositeIterable(super.getSupportingAnnotationNames(), new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); + return new CompositeIterable(SUPPORTING_ANNOTATION_NAMES, new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); + } + + public JavaAttributeMapping buildMapping(JavaPersistentAttribute persistentAttribute, JpaFactory factory) { + return factory.buildJavaManyToOneMapping(persistentAttribute); + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); } } \ No newline at end of file Index: src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaOneToOneMappingDefinition.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaOneToOneMappingDefinition.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/context/definition/HibernateJavaOneToOneMappingDefinition.java (working copy) @@ -12,14 +12,24 @@ import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaOneToOneMappingDefinition; +import org.eclipse.jpt.jpa.core.JpaFactory; +import org.eclipse.jpt.jpa.core.MappingKeys; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMappingDefinition; +import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; +import org.eclipse.jpt.jpa.core.resource.java.JoinColumnAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.JoinColumnsAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.JoinTableAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.OneToOneAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.PrimaryKeyJoinColumnAnnotation; +import org.eclipse.jpt.jpa.core.resource.java.PrimaryKeyJoinColumnsAnnotation; import org.jboss.tools.hibernate.jpt.core.internal.context.basic.Hibernate; /** * @author Dmitry Geraskov (geraskov@gmail.com) * */ -public class HibernateJavaOneToOneMappingDefinition extends AbstractJavaOneToOneMappingDefinition +public class HibernateJavaOneToOneMappingDefinition implements JavaAttributeMappingDefinition { // singleton private static final HibernateJavaOneToOneMappingDefinition INSTANCE = new HibernateJavaOneToOneMappingDefinition(); @@ -39,12 +49,44 @@ super(); } + public String getKey() { + return MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY; + } + + public String getAnnotationName() { + return OneToOneAnnotation.ANNOTATION_NAME; + } + + public boolean isSpecified(JavaPersistentAttribute persistentAttribute) { + return persistentAttribute.getResourcePersistentAttribute().getAnnotation(this.getAnnotationName()) != null; + } + protected static final String[] HIBERNATE_ANNOTATION_NAMES_ARRAY = new String[] { Hibernate.FOREIGN_KEY, }; + private static final String[] SUPPORTING_ANNOTATION_NAMES_ARRAY = new String[] { + JoinTableAnnotation.ANNOTATION_NAME, + JoinColumnAnnotation.ANNOTATION_NAME, + JoinColumnsAnnotation.ANNOTATION_NAME, + PrimaryKeyJoinColumnAnnotation.ANNOTATION_NAME, + PrimaryKeyJoinColumnsAnnotation.ANNOTATION_NAME + }; + private static final Iterable SUPPORTING_ANNOTATION_NAMES = new ArrayIterable(SUPPORTING_ANNOTATION_NAMES_ARRAY); + @Override public Iterable getSupportingAnnotationNames() { - return new CompositeIterable(super.getSupportingAnnotationNames(), new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); + return new CompositeIterable(SUPPORTING_ANNOTATION_NAMES, new ArrayIterable(HIBERNATE_ANNOTATION_NAMES_ARRAY)); + } + + public JavaAttributeMapping buildMapping(JavaPersistentAttribute persistentAttribute, JpaFactory factory) { + return factory.buildJavaOneToOneMapping(persistentAttribute); + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); } + + } \ No newline at end of file Index: src/org/jboss/tools/hibernate/jpt/core/internal/context/java/HibernateJavaQueryContainerImpl.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/context/java/HibernateJavaQueryContainerImpl.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/context/java/HibernateJavaQueryContainerImpl.java (working copy) @@ -305,71 +305,10 @@ } } - - // ********** validation ********** - - @Override - public void validate(List messages, IReporter reporter, CompilationUnit astRoot) { - super.validate(messages, reporter, astRoot); - this.validateQueries(messages, astRoot); - } - - @Override - protected void validateQueries(List messages, CompilationUnit astRoot) { - for (Iterator localQueries = this.queries(); localQueries.hasNext(); ) { - JavaQuery localQuery = localQueries.next(); - String name = localQuery.getName(); - if (StringTools.stringIsEmpty(name)){ - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.QUERY_NAME_UNDEFINED, - new String[] {}, - localQuery, - localQuery.getNameTextRange(astRoot) - ) - ); - } else { - List reportedNames = new ArrayList(); - for (Iterator globalQueries = this.getPersistenceUnit().queries(); globalQueries.hasNext(); ) { - if (localQuery.duplicates(globalQueries.next()) && !reportedNames.contains(name)) { - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.QUERY_DUPLICATE_NAME, - new String[] {name}, - localQuery, - localQuery.getNameTextRange(astRoot) - ) - ); - reportedNames.add(name); - } - } - } - String query = localQuery.getQuery(); - if (StringTools.stringIsEmpty(query)){ - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.QUERY_STATEMENT_UNDEFINED, - new String[] {name}, - localQuery, - localQuery.getNameTextRange(astRoot) - ) - ); - } - } - } - - @Override @SuppressWarnings("unchecked") public Iterator queries() { - return new CompositeIterator(this.hibernateNamedNativeQueries(), this.hibernateNamedQueries()); + return new CompositeIterator(queries(), this.hibernateNamedNativeQueries(), this.hibernateNamedQueries()); } - @Override - public TextRange getValidationTextRange(CompilationUnit astRoot) { - return this.owner.getResourceAnnotatedElement().getTextRange(astRoot); - } } Index: src/org/jboss/tools/hibernate/jpt/core/internal/context/java/JavaGenericGeneratorImpl.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/context/java/JavaGenericGeneratorImpl.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/context/java/JavaGenericGeneratorImpl.java (working copy) @@ -101,11 +101,6 @@ } @Override - public TextRange getSelectionTextRange(CompilationUnit astRoot) { - return this.generatorAnnotation.getTextRange(astRoot); - } - - @Override public TextRange getNameTextRange(CompilationUnit astRoot) { return this.generatorAnnotation.getNameTextRange(astRoot); } Index: src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/HibernateJpa2_0PlatformProvider.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/HibernateJpa2_0PlatformProvider.java (revision 31235) +++ src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/HibernateJpa2_0PlatformProvider.java (working copy) @@ -28,24 +28,24 @@ import org.eclipse.jpt.jpa.core.internal.JavaResourceModelProvider; import org.eclipse.jpt.jpa.core.internal.OrmResourceModelProvider; import org.eclipse.jpt.jpa.core.internal.PersistenceResourceModelProvider; -import org.eclipse.jpt.jpa.core.internal.context.java.JavaBasicMappingDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaEmbeddableDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaEmbeddedIdMappingDefinition; -import org.eclipse.jpt.jpa.core.internal.context.java.JavaEntityDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaMappedSuperclassDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaTransientMappingDefinition; import org.eclipse.jpt.jpa.core.internal.context.java.JavaVersionMappingDefinition; import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.JavaElementCollectionMappingDefinition2_0; import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.JavaEmbeddedMappingDefinition2_0; -import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.JavaIdMappingDefinition2_0; import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.JavaManyToManyMappingDefinition2_0; -import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.JavaManyToOneMappingDefinition2_0; import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.JavaOneToManyMappingDefinition2_0; -import org.eclipse.jpt.jpa.core.internal.jpa2.context.java.JavaOneToOneMappingDefinition2_0; +import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaBasicMappingDefinition; +import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaEntityDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.orm.HibernateOrmXmlDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.orm.jpa2.HibernateOrmXml2_0Definition; import org.jboss.tools.hibernate.jpt.core.internal.context.persistence.HibernatePersistenceXmlDefinition; import org.jboss.tools.hibernate.jpt.core.internal.context.persistence.jpa2.Hibernate2_0PersistenceXmlDefinition; +import org.jboss.tools.hibernate.jpt.core.internal.jpa2.context.definition.HibernateJavaIdMappingDefinition2_0; +import org.jboss.tools.hibernate.jpt.core.internal.jpa2.context.definition.HibernateJavaManyToOneMappingDefinition2_0; +import org.jboss.tools.hibernate.jpt.core.internal.jpa2.context.definition.HibernateJavaOneToOneMappingDefinition2_0; /** * @author Dmitry Geraskov @@ -67,7 +67,6 @@ return INSTANCE; } - /** * Enforce singleton usage */ @@ -119,7 +118,7 @@ // order matches that used by the Reference Implementation (EclipseLink) protected static final JavaTypeMappingDefinition[] JAVA_TYPE_MAPPING_DEFINITIONS = new JavaTypeMappingDefinition[] { - JavaEntityDefinition.instance(), + HibernateJavaEntityDefinition.instance(), JavaEmbeddableDefinition.instance(), JavaMappedSuperclassDefinition.instance() }; @@ -135,7 +134,7 @@ // order matches that used by the Reference Implementation (EclipseLink) protected static final DefaultJavaAttributeMappingDefinition[] DEFAULT_JAVA_ATTRIBUTE_MAPPING_DEFINITIONS = new DefaultJavaAttributeMappingDefinition[] { JavaEmbeddedMappingDefinition2_0.instance(), - JavaBasicMappingDefinition.instance() + HibernateJavaBasicMappingDefinition.instance() }; @Override @@ -147,15 +146,15 @@ protected static final JavaAttributeMappingDefinition[] SPECIFIED_JAVA_ATTRIBUTE_MAPPING_DEFINITIONS = new JavaAttributeMappingDefinition[] { JavaTransientMappingDefinition.instance(), JavaElementCollectionMappingDefinition2_0.instance(), - JavaIdMappingDefinition2_0.instance(), + HibernateJavaIdMappingDefinition2_0.instance(), JavaVersionMappingDefinition.instance(), - JavaBasicMappingDefinition.instance(), + HibernateJavaBasicMappingDefinition.instance(), JavaEmbeddedMappingDefinition2_0.instance(), JavaEmbeddedIdMappingDefinition.instance(), JavaManyToManyMappingDefinition2_0.instance(), - JavaManyToOneMappingDefinition2_0.instance(), + HibernateJavaManyToOneMappingDefinition2_0.instance(), JavaOneToManyMappingDefinition2_0.instance(), - JavaOneToOneMappingDefinition2_0.instance() + HibernateJavaOneToOneMappingDefinition2_0.instance() }; Index: src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaIdMappingDefinition2_0.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaIdMappingDefinition2_0.java (revision 0) +++ src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaIdMappingDefinition2_0.java (revision 0) @@ -0,0 +1,68 @@ +package org.jboss.tools.hibernate.jpt.core.internal.jpa2.context.definition; + +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMappingDefinition; +import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; +import org.eclipse.jpt.jpa.core.internal.context.java.JavaAttributeMappingDefinitionWrapper; +import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaIdMappingDefinition; + +public class HibernateJavaIdMappingDefinition2_0 extends JavaAttributeMappingDefinitionWrapper { + + private static final HibernateJavaIdMappingDefinition DELEGATE = HibernateJavaIdMappingDefinition.instance(); + + // singleton + private static final HibernateJavaIdMappingDefinition2_0 INSTANCE = new HibernateJavaIdMappingDefinition2_0(); + + /** + * Return the singleton. + */ + public static HibernateJavaIdMappingDefinition2_0 instance() { + return INSTANCE; + } + + /** + * Enforce singleton usage + */ + private HibernateJavaIdMappingDefinition2_0() { + super(); + } + + + @Override + protected JavaAttributeMappingDefinition getDelegate() { + return DELEGATE; + } + + /** + * The annotation is "specified" only if it is not "derived" (i.e. + * accompanied by a M-1 or 1-1 annotation). + */ + @Override + public boolean isSpecified(JavaPersistentAttribute persistentAttribute) { + boolean idSpecified = super.isSpecified(persistentAttribute); + return idSpecified && ! this.isDerivedId(persistentAttribute); + } + + /** + * Return whether the specified attribute's Id annotation is + * a supporting annotation for M-1 or 1-1 mapping, as opposed to a primary + * mapping annotation. + *

+ * This might produce confusing behavior if the annotations look something + * like:

+	 *     @Id @Basic @ManyToOne private int foo;
+	 * 
+ */ + private boolean isDerivedId(JavaPersistentAttribute persistentAttribute) { + return this.attributeHasManyToOneMapping(persistentAttribute) || + this.attributeHasOneToOneMapping(persistentAttribute); + } + + private boolean attributeHasManyToOneMapping(JavaPersistentAttribute persistentAttribute) { + return HibernateJavaManyToOneMappingDefinition2_0.instance().isSpecified(persistentAttribute); + } + + private boolean attributeHasOneToOneMapping(JavaPersistentAttribute persistentAttribute) { + return HibernateJavaOneToOneMappingDefinition2_0.instance().isSpecified(persistentAttribute); + } + +} Index: src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaManyToOneMappingDefinition2_0.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaManyToOneMappingDefinition2_0.java (revision 0) +++ src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaManyToOneMappingDefinition2_0.java (revision 0) @@ -0,0 +1,55 @@ +package org.jboss.tools.hibernate.jpt.core.internal.jpa2.context.definition; + +import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMappingDefinition; +import org.eclipse.jpt.jpa.core.internal.context.java.JavaAttributeMappingDefinitionWrapper; +import org.eclipse.jpt.jpa.core.jpa2.resource.java.MapsId2_0Annotation; +import org.eclipse.jpt.jpa.core.resource.java.IdAnnotation; +import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaManyToOneMappingDefinition; + +public class HibernateJavaManyToOneMappingDefinition2_0 extends JavaAttributeMappingDefinitionWrapper +{ + private static final JavaAttributeMappingDefinition DELEGATE = HibernateJavaManyToOneMappingDefinition.instance(); + + // singleton + private static final JavaAttributeMappingDefinition INSTANCE = new HibernateJavaManyToOneMappingDefinition2_0(); + + /** + * Return the singleton. + */ + public static JavaAttributeMappingDefinition instance() { + return INSTANCE; + } + + + /** + * Enforce singleton usage + */ + private HibernateJavaManyToOneMappingDefinition2_0() { + super(); + } + + @Override + protected JavaAttributeMappingDefinition getDelegate() { + return DELEGATE; + } + + @Override + public Iterable getSupportingAnnotationNames() { + return COMBINED_SUPPORTING_ANNOTATION_NAMES; + } + + public static final String[] SUPPORTING_ANNOTATION_NAMES_ARRAY_2_0 = new String[] { + IdAnnotation.ANNOTATION_NAME, + MapsId2_0Annotation.ANNOTATION_NAME + }; + private static final Iterable SUPPORTING_ANNOTATION_NAMES_2_0 = new ArrayIterable(SUPPORTING_ANNOTATION_NAMES_ARRAY_2_0); + + @SuppressWarnings("unchecked") + private static final Iterable COMBINED_SUPPORTING_ANNOTATION_NAMES = new CompositeIterable( + DELEGATE.getSupportingAnnotationNames(), + SUPPORTING_ANNOTATION_NAMES_2_0 + ); + +} Index: src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaOneToOneMappingDefinition2_0.java =================================================================== --- src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaOneToOneMappingDefinition2_0.java (revision 0) +++ src/org/jboss/tools/hibernate/jpt/core/internal/jpa2/context/definition/HibernateJavaOneToOneMappingDefinition2_0.java (revision 0) @@ -0,0 +1,55 @@ +package org.jboss.tools.hibernate.jpt.core.internal.jpa2.context.definition; + +import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; +import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMappingDefinition; +import org.eclipse.jpt.jpa.core.internal.context.java.JavaAttributeMappingDefinitionWrapper; +import org.eclipse.jpt.jpa.core.jpa2.resource.java.MapsId2_0Annotation; +import org.eclipse.jpt.jpa.core.resource.java.IdAnnotation; +import org.jboss.tools.hibernate.jpt.core.internal.context.definition.HibernateJavaOneToOneMappingDefinition; + +public class HibernateJavaOneToOneMappingDefinition2_0 extends JavaAttributeMappingDefinitionWrapper +{ + private static final JavaAttributeMappingDefinition DELEGATE = HibernateJavaOneToOneMappingDefinition.instance(); + + // singleton + private static final JavaAttributeMappingDefinition INSTANCE = new HibernateJavaOneToOneMappingDefinition2_0(); + + /** + * Return the singleton. + */ + public static JavaAttributeMappingDefinition instance() { + return INSTANCE; + } + + + /** + * Enforce singleton usage + */ + private HibernateJavaOneToOneMappingDefinition2_0() { + super(); + } + + @Override + protected JavaAttributeMappingDefinition getDelegate() { + return DELEGATE; + } + + @Override + public Iterable getSupportingAnnotationNames() { + return COMBINED_SUPPORTING_ANNOTATION_NAMES; + } + + public static final String[] SUPPORTING_ANNOTATION_NAMES_ARRAY_2_0 = new String[] { + IdAnnotation.ANNOTATION_NAME, + MapsId2_0Annotation.ANNOTATION_NAME + }; + private static final Iterable SUPPORTING_ANNOTATION_NAMES_2_0 = new ArrayIterable(SUPPORTING_ANNOTATION_NAMES_ARRAY_2_0); + + @SuppressWarnings("unchecked") + private static final Iterable COMBINED_SUPPORTING_ANNOTATION_NAMES = new CompositeIterable( + DELEGATE.getSupportingAnnotationNames(), + SUPPORTING_ANNOTATION_NAMES_2_0 + ); +} +