Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/java/JavaEntityTests.java')
-rw-r--r--jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/java/JavaEntityTests.java2440
1 files changed, 2440 insertions, 0 deletions
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/java/JavaEntityTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/java/JavaEntityTests.java
new file mode 100644
index 0000000000..3fb053666a
--- /dev/null
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/java/JavaEntityTests.java
@@ -0,0 +1,2440 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.core.tests.internal.context.java;
+
+import java.util.Iterator;
+import java.util.ListIterator;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jpt.core.internal.IMappingKeys;
+import org.eclipse.jpt.core.internal.JptCorePlugin;
+import org.eclipse.jpt.core.internal.context.base.AccessType;
+import org.eclipse.jpt.core.internal.context.base.DiscriminatorType;
+import org.eclipse.jpt.core.internal.context.base.IAssociationOverride;
+import org.eclipse.jpt.core.internal.context.base.IAttributeOverride;
+import org.eclipse.jpt.core.internal.context.base.IBasicMapping;
+import org.eclipse.jpt.core.internal.context.base.IClassRef;
+import org.eclipse.jpt.core.internal.context.base.IEmbeddable;
+import org.eclipse.jpt.core.internal.context.base.IEntity;
+import org.eclipse.jpt.core.internal.context.base.IIdMapping;
+import org.eclipse.jpt.core.internal.context.base.IMappedSuperclass;
+import org.eclipse.jpt.core.internal.context.base.INamedNativeQuery;
+import org.eclipse.jpt.core.internal.context.base.INamedQuery;
+import org.eclipse.jpt.core.internal.context.base.IPersistentType;
+import org.eclipse.jpt.core.internal.context.base.IPrimaryKeyJoinColumn;
+import org.eclipse.jpt.core.internal.context.base.ISecondaryTable;
+import org.eclipse.jpt.core.internal.context.base.ITable;
+import org.eclipse.jpt.core.internal.context.base.InheritanceType;
+import org.eclipse.jpt.core.internal.context.java.IJavaAttributeOverride;
+import org.eclipse.jpt.core.internal.context.java.IJavaEntity;
+import org.eclipse.jpt.core.internal.context.java.IJavaPersistentType;
+import org.eclipse.jpt.core.internal.context.java.IJavaPrimaryKeyJoinColumn;
+import org.eclipse.jpt.core.internal.context.java.IJavaSecondaryTable;
+import org.eclipse.jpt.core.internal.context.java.JavaNullTypeMapping;
+import org.eclipse.jpt.core.internal.context.orm.XmlEntity;
+import org.eclipse.jpt.core.internal.context.orm.XmlPersistentType;
+import org.eclipse.jpt.core.internal.resource.java.AssociationOverride;
+import org.eclipse.jpt.core.internal.resource.java.AssociationOverrides;
+import org.eclipse.jpt.core.internal.resource.java.AttributeOverride;
+import org.eclipse.jpt.core.internal.resource.java.AttributeOverrides;
+import org.eclipse.jpt.core.internal.resource.java.DiscriminatorColumn;
+import org.eclipse.jpt.core.internal.resource.java.DiscriminatorValue;
+import org.eclipse.jpt.core.internal.resource.java.Entity;
+import org.eclipse.jpt.core.internal.resource.java.IdClass;
+import org.eclipse.jpt.core.internal.resource.java.Inheritance;
+import org.eclipse.jpt.core.internal.resource.java.JPA;
+import org.eclipse.jpt.core.internal.resource.java.JavaPersistentAttributeResource;
+import org.eclipse.jpt.core.internal.resource.java.JavaPersistentTypeResource;
+import org.eclipse.jpt.core.internal.resource.java.JavaResource;
+import org.eclipse.jpt.core.internal.resource.java.NamedNativeQueries;
+import org.eclipse.jpt.core.internal.resource.java.NamedNativeQuery;
+import org.eclipse.jpt.core.internal.resource.java.NamedQueries;
+import org.eclipse.jpt.core.internal.resource.java.NamedQuery;
+import org.eclipse.jpt.core.internal.resource.java.PrimaryKeyJoinColumn;
+import org.eclipse.jpt.core.internal.resource.java.PrimaryKeyJoinColumns;
+import org.eclipse.jpt.core.internal.resource.java.SecondaryTable;
+import org.eclipse.jpt.core.internal.resource.java.SecondaryTables;
+import org.eclipse.jpt.core.internal.resource.java.SequenceGenerator;
+import org.eclipse.jpt.core.internal.resource.java.Table;
+import org.eclipse.jpt.core.internal.resource.java.TableGenerator;
+import org.eclipse.jpt.core.internal.resource.persistence.PersistenceFactory;
+import org.eclipse.jpt.core.internal.resource.persistence.XmlMappingFileRef;
+import org.eclipse.jpt.core.tests.internal.context.ContextModelTestCase;
+import org.eclipse.jpt.core.tests.internal.projects.TestJavaProject.SourceWriter;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
+
+public class JavaEntityTests extends ContextModelTestCase
+{
+ private static final String ENTITY_NAME = "entityName";
+ private static final String TABLE_NAME = "MY_TABLE";
+ private static final String DISCRIMINATOR_VALUE = "MY_DISCRIMINATOR_VALUE";
+ protected static final String SUB_TYPE_NAME = "AnnotationTestTypeChild";
+ protected static final String FULLY_QUALIFIED_SUB_TYPE_NAME = PACKAGE_NAME + "." + SUB_TYPE_NAME;
+
+
+ public JavaEntityTests(String name) {
+ super(name);
+ }
+
+ private void createEntityAnnotation() throws Exception {
+ this.createAnnotationAndMembers("Entity", "String name() default \"\";");
+ }
+
+ private void createIdAnnotation() throws Exception {
+ this.createAnnotationAndMembers("Id", "");
+ }
+
+ private void createMappedSuperclassAnnotation() throws Exception{
+ this.createAnnotationAndMembers("MappedSuperclass", "");
+ }
+
+ private void createTableAnnotation() throws Exception {
+ this.createAnnotationAndMembers("Table", "String name() default \"\";");
+ }
+
+ private void createInheritanceAnnotation() throws Exception {
+ createInheritanceTypeEnum();
+ this.createAnnotationAndMembers("Inheritance", "InheritanceType strategy() default SINGLE_TABLE;");
+ }
+
+ private void createInheritanceTypeEnum() throws Exception {
+ this.createEnumAndMembers("InheritanceType", "SINGLE_TABLE, JOINED, TABLE_PER_CLASS");
+ }
+
+ private void createDiscriminatorValueAnnotation() throws Exception {
+ this.createAnnotationAndMembers("DiscriminatorValue", "String value();");
+ }
+
+ private void createSecondaryTableAnnotation() throws Exception {
+ this.createAnnotationAndMembers("SecondaryTable",
+ "String name(); " +
+ "String catalog() default \"\"; " +
+ "String schema() default \"\"; ");
+// PrimaryKeyJoinColumn[] pkJoinColumns() default {};
+// UniqueConstraint[] uniqueConstraints() default {};
+ }
+
+ private void createSecondaryTablesAnnotation() throws Exception {
+ createSecondaryTableAnnotation();
+ this.createAnnotationAndMembers("SecondaryTables", "SecondaryTable[] value();");
+ }
+
+ private void createPrimaryKeyJoinColumnAnnotation() throws Exception {
+ this.createAnnotationAndMembers("PrimaryKeyJoinColumn",
+ "String name(); " +
+ "String referencedColumnName() default \"\"; " +
+ "String columnDefinition() default \"\"; ");
+ }
+
+ private void createPrimaryKeyJoinColumnsAnnotation() throws Exception {
+ createPrimaryKeyJoinColumnAnnotation();
+ this.createAnnotationAndMembers("PrimaryKeyJoinColumns", "PrimaryKeyJoinColumn[] value();");
+ }
+
+
+ private IType createTestEntity() throws Exception {
+ createEntityAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.ID);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity");
+ }
+ });
+ }
+
+ private IType createTestEntityAnnotationOnProperty() throws Exception {
+ createEntityAnnotation();
+ createIdAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.ID);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity");
+ }
+
+ @Override
+ public void appendGetIdMethodAnnotationTo(StringBuilder sb) {
+ sb.append("@Id");
+ }
+ });
+ }
+
+ private IType createTestMappedSuperclass() throws Exception {
+ createMappedSuperclassAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.MAPPED_SUPERCLASS, JPA.ONE_TO_ONE);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@MappedSuperclass");
+ }
+
+ @Override
+ public void appendIdFieldAnnotationTo(StringBuilder sb) {
+ sb.append("@OneToOne");
+ sb.append(CR);
+ sb.append(" private int address;").append(CR);
+ sb.append(CR);
+ sb.append(" ");
+ }
+ });
+ }
+
+ private IType createTestEntityWithName() throws Exception {
+ createEntityAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.ID);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity(name=\"" + ENTITY_NAME + "\")");
+ }
+ });
+ }
+
+ private IType createTestEntityWithTable() throws Exception {
+ createEntityAnnotation();
+ createTableAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.TABLE);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity").append(CR);
+ sb.append("@Table(name=\"" + TABLE_NAME + "\")");
+ }
+ });
+ }
+
+ private IType createTestSubType() throws Exception {
+ SourceWriter sourceWriter = new SourceWriter() {
+ public void appendSourceTo(StringBuilder sb) {
+ sb.append(CR);
+ sb.append("import ");
+ sb.append(JPA.ENTITY);
+ sb.append(";");
+ sb.append(CR);
+ sb.append("@Entity");
+ sb.append(CR);
+ sb.append("public class ").append("AnnotationTestTypeChild").append(" ");
+ sb.append("extends " + TYPE_NAME + " ");
+ sb.append("{}").append(CR);
+ }
+ };
+ return this.javaProject.createType(PACKAGE_NAME, "AnnotationTestTypeChild.java", sourceWriter);
+ }
+
+ private IType createTestEntityWithInheritance() throws Exception {
+ createEntityAnnotation();
+ createInheritanceAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.INHERITANCE, JPA.INHERITANCE_TYPE);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity").append(CR);
+ sb.append("@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)").append(CR);
+ }
+ });
+ }
+
+ private IType createTestEntityWithDiscriminatorValue() throws Exception {
+ createEntityAnnotation();
+ createDiscriminatorValueAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.DISCRIMINATOR_VALUE);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity").append(CR);
+ sb.append("@DiscriminatorValue(value=\"" + DISCRIMINATOR_VALUE + "\")");
+ }
+ });
+ }
+
+ private IType createTestEntityWithSecondaryTable() throws Exception {
+ createEntityAnnotation();
+ createSecondaryTableAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.SECONDARY_TABLE);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity").append(CR);
+ sb.append("@SecondaryTable(name=\"foo\")");
+ }
+ });
+ }
+
+ private IType createTestEntityWithSecondaryTables() throws Exception {
+ createEntityAnnotation();
+ createSecondaryTablesAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.SECONDARY_TABLE, JPA.SECONDARY_TABLES);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity").append(CR);
+ sb.append("@SecondaryTables({@SecondaryTable(name=\"foo\"), @SecondaryTable(name=\"bar\")})");
+ }
+ });
+ }
+
+ private IType createTestEntityWithPrimaryKeyJoinColumns() throws Exception {
+ createEntityAnnotation();
+ createPrimaryKeyJoinColumnsAnnotation();
+
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JPA.ENTITY, JPA.PRIMARY_KEY_JOIN_COLUMN, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@Entity").append(CR);
+ sb.append("@PrimaryKeyJoinColumns({@PrimaryKeyJoinColumn(name=\"foo\"), @PrimaryKeyJoinColumn(name=\"bar\")})");
+ }
+ });
+ }
+
+
+ public void testMorphToMappedSuperclass() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = (IEntity) javaPersistentType().getMapping();
+ entity.getTable().setSpecifiedName("FOO");
+ entity.addSpecifiedSecondaryTable(0);
+ entity.addSpecifiedPrimaryKeyJoinColumn(0);
+ entity.addSpecifiedAttributeOverride(0);
+ entity.setSpecifiedInheritanceStrategy(InheritanceType.JOINED);
+ entity.setSpecifiedDiscriminatorValue("asdf");
+ entity.addTableGenerator();
+ entity.addSequenceGenerator();
+
+ javaPersistentType().setMappingKey(IMappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY);
+ assertTrue(javaPersistentType().getMapping() instanceof IMappedSuperclass);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ JavaPersistentAttributeResource attributeResource = typeResource.attributes().next();
+ assertNull(attributeResource.mappingAnnotation(Entity.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(Table.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(SecondaryTable.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(PrimaryKeyJoinColumn.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(AttributeOverride.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(Inheritance.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(DiscriminatorValue.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(TableGenerator.ANNOTATION_NAME));
+ assertNull(attributeResource.annotation(SequenceGenerator.ANNOTATION_NAME));
+ }
+
+ public void testMorphToEmbeddable() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = (IEntity) javaPersistentType().getMapping();
+ entity.getTable().setSpecifiedName("FOO");
+ entity.addSpecifiedSecondaryTable(0);
+ entity.addSpecifiedPrimaryKeyJoinColumn(0);
+ entity.addSpecifiedAttributeOverride(0);
+ entity.setSpecifiedInheritanceStrategy(InheritanceType.JOINED);
+ entity.setSpecifiedDiscriminatorValue("asdf");
+ entity.addTableGenerator();
+ entity.addSequenceGenerator();
+
+ javaPersistentType().setMappingKey(IMappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY);
+ assertTrue(javaPersistentType().getMapping() instanceof IEmbeddable);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ assertNull(typeResource.mappingAnnotation(Entity.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(Table.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(SecondaryTable.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(PrimaryKeyJoinColumn.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(AttributeOverride.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(Inheritance.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(DiscriminatorValue.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(TableGenerator.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(SequenceGenerator.ANNOTATION_NAME));
+ }
+
+ public void testMorphToNull() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = (IEntity) javaPersistentType().getMapping();
+ entity.getTable().setSpecifiedName("FOO");
+ entity.addSpecifiedSecondaryTable(0);
+ entity.addSpecifiedPrimaryKeyJoinColumn(0);
+ entity.addSpecifiedAttributeOverride(0);
+ entity.setSpecifiedInheritanceStrategy(InheritanceType.JOINED);
+ entity.setSpecifiedDiscriminatorValue("asdf");
+ entity.addTableGenerator();
+ entity.addSequenceGenerator();
+
+ javaPersistentType().setMappingKey(IMappingKeys.NULL_TYPE_MAPPING_KEY);
+ assertTrue(javaPersistentType().getMapping() instanceof JavaNullTypeMapping);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ assertNull(typeResource.mappingAnnotation(Entity.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(Table.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(SecondaryTable.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(PrimaryKeyJoinColumn.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(AttributeOverride.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(Inheritance.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(DiscriminatorValue.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(TableGenerator.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(SequenceGenerator.ANNOTATION_NAME));
+ }
+
+ public void testAccessNoAnnotations() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ assertEquals(AccessType.FIELD, javaPersistentType().access());
+ }
+
+ public void testAccessAnnotationsOnParent() throws Exception {
+ createTestEntityAnnotationOnProperty();
+ createTestSubType();
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ XmlMappingFileRef mappingFileRef = PersistenceFactory.eINSTANCE.createXmlMappingFileRef();
+ mappingFileRef.setFileName(JptCorePlugin.DEFAULT_ORM_XML_FILE_PATH);
+ xmlPersistenceUnit().getMappingFiles().add(mappingFileRef);
+
+ IJavaPersistentType childPersistentType = javaPersistentType();
+ IPersistentType parentPersistentType = childPersistentType.parentPersistentType();
+
+ assertEquals(AccessType.PROPERTY, parentPersistentType.access());
+ assertEquals(AccessType.PROPERTY, childPersistentType.access());
+
+ ((IIdMapping) parentPersistentType.attributeNamed("id").getMapping()).getColumn().setSpecifiedName("FOO");
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ typeResource.properties().next().setMappingAnnotation(null);
+ //no mapping(Id) annotation, but still a Column annotation, so access should still be property
+ assertEquals(AccessType.PROPERTY, parentPersistentType.access());
+ assertEquals(AccessType.PROPERTY, childPersistentType.access());
+
+ ((IBasicMapping) parentPersistentType.attributeNamed("id").getMapping()).getColumn().setSpecifiedName(null);
+ assertEquals(AccessType.FIELD, parentPersistentType.access());
+ assertEquals(AccessType.FIELD, childPersistentType.access());
+
+ entityMappings().getPersistenceUnitMetadata().getPersistenceUnitDefaults().setAccess(AccessType.PROPERTY);
+ assertEquals(AccessType.PROPERTY, parentPersistentType.access());
+ assertEquals(AccessType.PROPERTY, childPersistentType.access());
+
+ entityMappings().setSpecifiedAccess(AccessType.FIELD);
+ //still accessType of PROPERTY because the java class is not specified in this orm.xml
+ assertEquals(AccessType.PROPERTY, parentPersistentType.access());
+ assertEquals(AccessType.PROPERTY, childPersistentType.access());
+
+ XmlPersistentType xmlPersistentType = entityMappings().addXmlPersistentType(IMappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ removeXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ //only parent specified in orm.xml, i think this outcome is right??
+ assertEquals(AccessType.FIELD, xmlPersistentType.javaPersistentType().access());
+ assertEquals(AccessType.FIELD, childPersistentType.access());
+
+ XmlPersistentType childXmlPersistentType = entityMappings().addXmlPersistentType(IMappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".AnnotationTestTypeChild");
+ removeXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ //both parent and child specified in orm.xml
+ assertEquals(AccessType.FIELD, xmlPersistentType.javaPersistentType().access());
+ assertEquals(AccessType.FIELD, childXmlPersistentType.javaPersistentType().access());
+ }
+
+ public void testAccessWithXmlSettings() throws Exception {
+ createTestEntityAnnotationOnProperty();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ XmlMappingFileRef mappingFileRef = PersistenceFactory.eINSTANCE.createXmlMappingFileRef();
+ mappingFileRef.setFileName(JptCorePlugin.DEFAULT_ORM_XML_FILE_PATH);
+ xmlPersistenceUnit().getMappingFiles().add(mappingFileRef);
+
+ assertEquals(AccessType.PROPERTY, javaPersistentType().access());
+
+ ((IIdMapping) javaPersistentType().attributeNamed("id").getMapping()).getColumn().setSpecifiedName("FOO");
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ typeResource.properties().next().setMappingAnnotation(null);
+ //no mapping(Id) annotation, but still a Column annotation, so access should still be property
+ assertEquals(AccessType.PROPERTY, javaPersistentType().access());
+
+ ((IBasicMapping) javaPersistentType().attributeNamed("id").getMapping()).getColumn().setSpecifiedName(null);
+ assertEquals(AccessType.FIELD, javaPersistentType().access());
+
+ entityMappings().getPersistenceUnitMetadata().getPersistenceUnitDefaults().setAccess(AccessType.PROPERTY);
+ assertEquals(AccessType.PROPERTY, javaPersistentType().access());
+
+ entityMappings().setSpecifiedAccess(AccessType.FIELD);
+ //still accessType of PROPERTY because the java class is not specified in this orm.xml
+ assertEquals(AccessType.PROPERTY, javaPersistentType().access());
+
+ XmlPersistentType xmlPersistentType = entityMappings().addXmlPersistentType(IMappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+
+ //now class is specified in orm.xml, so entityMappings access setting wins over persistence-unit-defaults
+ assertEquals(AccessType.FIELD, xmlPersistentType.javaPersistentType().access());
+
+ ((XmlEntity) xmlPersistentType.getMapping()).setSpecifiedAccess(AccessType.PROPERTY);
+
+ //accessType should be PROPERTY now, java gets the access from xml entity if it is specified
+ assertEquals(AccessType.PROPERTY, xmlPersistentType.javaPersistentType().access());
+ }
+
+ public void testGetSpecifiedNameNull() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(javaEntity().getSpecifiedName());
+ }
+
+ public void testGetSpecifiedName() throws Exception {
+ createTestEntityWithName();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(ENTITY_NAME, javaEntity().getSpecifiedName());
+ }
+
+ public void testGetDefaultNameSpecifiedNameNull() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(TYPE_NAME, javaEntity().getDefaultName());
+ }
+
+ public void testGetDefaultName() throws Exception {
+ createTestEntityWithName();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(TYPE_NAME, javaEntity().getDefaultName());
+ }
+
+ public void testGetNameSpecifiedNameNull() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(TYPE_NAME, javaEntity().getName());
+ }
+
+ public void testGetName() throws Exception {
+ createTestEntityWithName();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(ENTITY_NAME, javaEntity().getName());
+ }
+
+ public void testSetSpecifiedName() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().setSpecifiedName("foo");
+
+ assertEquals("foo", javaEntity().getSpecifiedName());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals("foo", ((Entity) typeResource.mappingAnnotation()).getName());
+ }
+
+ public void testSetSpecifiedNameNull() throws Exception {
+ createTestEntityWithName();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().setSpecifiedName(null);
+
+ assertNull(javaEntity().getSpecifiedName());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(((Entity) typeResource.mappingAnnotation()).getName());
+ }
+
+ public void testUpdateFromSpecifiedNameChangeInResourceModel() throws Exception {
+ createTestEntityWithName();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Entity entity = (Entity) typeResource.mappingAnnotation();
+ entity.setName("foo");
+
+ assertEquals("foo", javaEntity().getSpecifiedName());
+ }
+
+ public void testGetTableName() throws Exception {
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ createTestEntityWithName();
+
+ assertEquals(ENTITY_NAME, javaEntity().getTableName());
+ }
+
+ public void testGetTableName2() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(TYPE_NAME, javaEntity().getTableName());
+ }
+
+ public void testGetTableName3() throws Exception {
+ createTestEntityWithTable();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(TABLE_NAME, javaEntity().getTableName());
+ }
+
+ public void testSetTableNameWithNullTable() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ ITable table = javaEntity().getTable();
+ assertEquals(TYPE_NAME, table.getName());
+ assertSourceDoesNotContain("@Table");
+
+ table.setSpecifiedName(TABLE_NAME);
+ assertSourceContains("@Table(name=\"" + TABLE_NAME + "\")");
+
+ assertEquals(TABLE_NAME, javaEntity().getTableName());
+ assertEquals(TABLE_NAME, table.getName());
+
+ table.setSpecifiedCatalog(TABLE_NAME);
+ }
+
+ public void testGetInheritanceStrategy() throws Exception {
+ createTestEntityWithInheritance();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(InheritanceType.TABLE_PER_CLASS, javaEntity().getInheritanceStrategy());
+ }
+
+ public void testGetDefaultInheritanceStrategy() throws Exception {
+ createTestEntity();
+ createTestSubType();
+
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNotSame(javaEntity(), javaEntity().rootEntity());
+ assertEquals(InheritanceType.SINGLE_TABLE, javaEntity().getDefaultInheritanceStrategy());
+
+ //change root inheritance strategy, verify default is changed for child entity
+ javaEntity().rootEntity().setSpecifiedInheritanceStrategy(InheritanceType.TABLE_PER_CLASS);
+
+ assertEquals(InheritanceType.SINGLE_TABLE, javaEntity().rootEntity().getDefaultInheritanceStrategy());
+ assertEquals(InheritanceType.TABLE_PER_CLASS, javaEntity().getDefaultInheritanceStrategy());
+ assertEquals(InheritanceType.TABLE_PER_CLASS, javaEntity().getInheritanceStrategy());
+ assertNull(javaEntity().getSpecifiedInheritanceStrategy());
+ }
+
+ public void testGetSpecifiedInheritanceStrategy() throws Exception {
+ createTestEntityWithInheritance();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(InheritanceType.TABLE_PER_CLASS, javaEntity().getSpecifiedInheritanceStrategy());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Inheritance inheritance = (Inheritance) typeResource.annotation(Inheritance.ANNOTATION_NAME);
+
+ inheritance.setStrategy(org.eclipse.jpt.core.internal.resource.java.InheritanceType.JOINED);
+
+ assertEquals(InheritanceType.JOINED, javaEntity().getSpecifiedInheritanceStrategy());
+
+ inheritance.setStrategy(null);
+
+ assertNull(javaEntity().getSpecifiedInheritanceStrategy());
+ }
+
+ public void testSetSpecifiedInheritanceStrategy() throws Exception {
+ createTestEntityWithInheritance();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ assertEquals(InheritanceType.TABLE_PER_CLASS, javaEntity().getSpecifiedInheritanceStrategy());
+
+ javaEntity().setSpecifiedInheritanceStrategy(InheritanceType.JOINED);
+
+ assertEquals(InheritanceType.JOINED, javaEntity().getSpecifiedInheritanceStrategy());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Inheritance inheritance = (Inheritance) typeResource.annotation(Inheritance.ANNOTATION_NAME);
+ assertEquals(org.eclipse.jpt.core.internal.resource.java.InheritanceType.JOINED, inheritance.getStrategy());
+
+ }
+
+ public void testGetDiscriminatorValue() throws Exception {
+ createTestEntityWithDiscriminatorValue();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(DISCRIMINATOR_VALUE, javaEntity().getDiscriminatorValue());
+ }
+
+ public void testGetDefaultDiscriminatorValue() throws Exception {
+ createTestEntityWithDiscriminatorValue();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(javaEntity().getName(), javaEntity().getDefaultDiscriminatorValue());
+
+ javaEntity().getDiscriminatorColumn().setSpecifiedDiscriminatorType(DiscriminatorType.INTEGER);
+ assertNull(javaEntity().getDefaultDiscriminatorValue());
+ }
+
+ public void testGetSpecifiedDiscriminatorValue() throws Exception {
+ createTestEntityWithDiscriminatorValue();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(DISCRIMINATOR_VALUE, javaEntity().getSpecifiedDiscriminatorValue());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ DiscriminatorValue discriminatorValue = (DiscriminatorValue) typeResource.annotation(DiscriminatorValue.ANNOTATION_NAME);
+
+ discriminatorValue.setValue("foo");
+
+ assertEquals("foo", javaEntity().getSpecifiedDiscriminatorValue());
+
+ discriminatorValue.setValue(null);
+
+ assertNull(javaEntity().getSpecifiedDiscriminatorValue());
+ assertNull(typeResource.annotation(DiscriminatorValue.ANNOTATION_NAME));
+ }
+
+ public void testSetSpecifiedDiscriminatorValue() throws Exception {
+ createTestEntityWithDiscriminatorValue();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ assertEquals(DISCRIMINATOR_VALUE, javaEntity().getSpecifiedDiscriminatorValue());
+
+ javaEntity().setSpecifiedDiscriminatorValue("foo");
+
+ assertEquals("foo", javaEntity().getSpecifiedDiscriminatorValue());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ DiscriminatorValue discriminatorValue = (DiscriminatorValue) typeResource.annotation(DiscriminatorValue.ANNOTATION_NAME);
+ assertEquals("foo", discriminatorValue.getValue());
+ }
+
+ public void testSecondaryTables() throws Exception {
+ createTestEntityWithSecondaryTable();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ ListIterator<IJavaSecondaryTable> secondaryTables = javaEntity().secondaryTables();
+
+ assertTrue(secondaryTables.hasNext());
+ assertEquals("foo", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+ }
+
+ public void testSecondaryTablesSize() throws Exception {
+ createTestEntityWithSecondaryTable();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(1, javaEntity().secondaryTablesSize());
+ }
+
+ public void testSpecifiedSecondaryTables() throws Exception {
+ createTestEntityWithSecondaryTables();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ ListIterator<IJavaSecondaryTable> specifiedSecondaryTables = javaEntity().specifiedSecondaryTables();
+
+ assertTrue(specifiedSecondaryTables.hasNext());
+ assertEquals("foo", specifiedSecondaryTables.next().getName());
+ assertEquals("bar", specifiedSecondaryTables.next().getName());
+ assertFalse(specifiedSecondaryTables.hasNext());
+ }
+
+ public void testSpecifiedSecondaryTablesSize() throws Exception {
+ createTestEntityWithSecondaryTables();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(2, javaEntity().specifiedSecondaryTablesSize());
+ }
+
+ public void testAddSpecifiedSecondaryTable() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedSecondaryTable(0).setSpecifiedName("FOO");
+ javaEntity().addSpecifiedSecondaryTable(0).setSpecifiedName("BAR");
+ javaEntity().addSpecifiedSecondaryTable(0).setSpecifiedName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Iterator<JavaResource> secondaryTables = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+
+ assertEquals("BAZ", ((SecondaryTable) secondaryTables.next()).getName());
+ assertEquals("BAR", ((SecondaryTable) secondaryTables.next()).getName());
+ assertEquals("FOO", ((SecondaryTable) secondaryTables.next()).getName());
+ assertFalse(secondaryTables.hasNext());
+ }
+
+ public void testAddSpecifiedSecondaryTable2() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedSecondaryTable(0).setSpecifiedName("FOO");
+ javaEntity().addSpecifiedSecondaryTable(1).setSpecifiedName("BAR");
+ javaEntity().addSpecifiedSecondaryTable(0).setSpecifiedName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Iterator<JavaResource> secondaryTables = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+
+ assertEquals("BAZ", ((SecondaryTable) secondaryTables.next()).getName());
+ assertEquals("FOO", ((SecondaryTable) secondaryTables.next()).getName());
+ assertEquals("BAR", ((SecondaryTable) secondaryTables.next()).getName());
+ assertFalse(secondaryTables.hasNext());
+ }
+ public void testRemoveSpecifiedSecondaryTable() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedSecondaryTable(0).setSpecifiedName("FOO");
+ javaEntity().addSpecifiedSecondaryTable(1).setSpecifiedName("BAR");
+ javaEntity().addSpecifiedSecondaryTable(2).setSpecifiedName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(3, CollectionTools.size(typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME)));
+
+ javaEntity().removeSpecifiedSecondaryTable(1);
+
+ Iterator<JavaResource> secondaryTableResources = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ assertEquals("FOO", ((SecondaryTable) secondaryTableResources.next()).getName());
+ assertEquals("BAZ", ((SecondaryTable) secondaryTableResources.next()).getName());
+ assertFalse(secondaryTableResources.hasNext());
+
+ Iterator<ISecondaryTable> secondaryTables = javaEntity().secondaryTables();
+ assertEquals("FOO", secondaryTables.next().getName());
+ assertEquals("BAZ", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+
+
+ javaEntity().removeSpecifiedSecondaryTable(1);
+ secondaryTableResources = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ assertEquals("FOO", ((SecondaryTable) secondaryTableResources.next()).getName());
+ assertFalse(secondaryTableResources.hasNext());
+
+ secondaryTables = javaEntity().secondaryTables();
+ assertEquals("FOO", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+
+
+ javaEntity().removeSpecifiedSecondaryTable(0);
+ secondaryTableResources = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ assertFalse(secondaryTableResources.hasNext());
+ secondaryTables = javaEntity().secondaryTables();
+ assertFalse(secondaryTables.hasNext());
+
+ assertNull(typeResource.annotation(SecondaryTables.ANNOTATION_NAME));
+ }
+
+ public void testMoveSpecifiedSecondaryTable() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addSpecifiedSecondaryTable(0).setSpecifiedName("FOO");
+ entity.addSpecifiedSecondaryTable(1).setSpecifiedName("BAR");
+ entity.addSpecifiedSecondaryTable(2).setSpecifiedName("BAZ");
+
+ ListIterator<SecondaryTable> javaSecondaryTables = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaSecondaryTables));
+
+
+ entity.moveSpecifiedSecondaryTable(2, 0);
+ ListIterator<ISecondaryTable> secondaryTables = entity.specifiedSecondaryTables();
+ assertEquals("BAR", secondaryTables.next().getSpecifiedName());
+ assertEquals("BAZ", secondaryTables.next().getSpecifiedName());
+ assertEquals("FOO", secondaryTables.next().getSpecifiedName());
+
+ javaSecondaryTables = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ assertEquals("BAR", javaSecondaryTables.next().getName());
+ assertEquals("BAZ", javaSecondaryTables.next().getName());
+ assertEquals("FOO", javaSecondaryTables.next().getName());
+
+
+ entity.moveSpecifiedSecondaryTable(0, 1);
+ secondaryTables = entity.specifiedSecondaryTables();
+ assertEquals("BAZ", secondaryTables.next().getSpecifiedName());
+ assertEquals("BAR", secondaryTables.next().getSpecifiedName());
+ assertEquals("FOO", secondaryTables.next().getSpecifiedName());
+
+ javaSecondaryTables = typeResource.annotations(SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ assertEquals("BAZ", javaSecondaryTables.next().getName());
+ assertEquals("BAR", javaSecondaryTables.next().getName());
+ assertEquals("FOO", javaSecondaryTables.next().getName());
+ }
+
+ public void testUpdateSpecifiedSecondaryTables() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ ((SecondaryTable) typeResource.addAnnotation(0, SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME)).setName("FOO");
+ ((SecondaryTable) typeResource.addAnnotation(1, SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME)).setName("BAR");
+ ((SecondaryTable) typeResource.addAnnotation(2, SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME)).setName("BAZ");
+
+ ListIterator<ISecondaryTable> secondaryTables = entity.specifiedSecondaryTables();
+ assertEquals("FOO", secondaryTables.next().getName());
+ assertEquals("BAR", secondaryTables.next().getName());
+ assertEquals("BAZ", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+
+ typeResource.move(2, 0, SecondaryTables.ANNOTATION_NAME);
+ secondaryTables = entity.specifiedSecondaryTables();
+ assertEquals("BAR", secondaryTables.next().getName());
+ assertEquals("BAZ", secondaryTables.next().getName());
+ assertEquals("FOO", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+
+ typeResource.move(0, 1, SecondaryTables.ANNOTATION_NAME);
+ secondaryTables = entity.specifiedSecondaryTables();
+ assertEquals("BAZ", secondaryTables.next().getName());
+ assertEquals("BAR", secondaryTables.next().getName());
+ assertEquals("FOO", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+
+ typeResource.removeAnnotation(1, SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ secondaryTables = entity.specifiedSecondaryTables();
+ assertEquals("BAZ", secondaryTables.next().getName());
+ assertEquals("FOO", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+
+ typeResource.removeAnnotation(1, SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ secondaryTables = entity.specifiedSecondaryTables();
+ assertEquals("BAZ", secondaryTables.next().getName());
+ assertFalse(secondaryTables.hasNext());
+
+ typeResource.removeAnnotation(0, SecondaryTable.ANNOTATION_NAME, SecondaryTables.ANNOTATION_NAME);
+ secondaryTables = entity.specifiedSecondaryTables();
+ assertFalse(secondaryTables.hasNext());
+ }
+
+ public void testAssociatedTables() throws Exception {
+ createTestEntityWithSecondaryTables();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(3, CollectionTools.size(javaEntity().associatedTables()));
+ Iterator<ITable> associatedTables = javaEntity().associatedTables();
+ ITable table1 = associatedTables.next();
+ ISecondaryTable table2 = (ISecondaryTable) associatedTables.next();
+ ISecondaryTable table3 = (ISecondaryTable) associatedTables.next();
+ assertEquals(TYPE_NAME, table1.getName());
+ assertEquals("foo", table2.getName());
+ assertEquals("bar", table3.getName());
+ }
+
+ public void testAssociatedTablesIncludingInherited() throws Exception {
+ createTestEntityWithSecondaryTables();
+ createTestSubType();
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity parentEntity = javaEntity().rootEntity();
+ assertEquals(3, CollectionTools.size(parentEntity.associatedTablesIncludingInherited()));
+ Iterator<ITable> associatedTables = parentEntity.associatedTablesIncludingInherited();
+ ITable table1 = associatedTables.next();
+ ISecondaryTable table2 = (ISecondaryTable) associatedTables.next();
+ ISecondaryTable table3 = (ISecondaryTable) associatedTables.next();
+ assertEquals(TYPE_NAME, table1.getName());
+ assertEquals("foo", table2.getName());
+ assertEquals("bar", table3.getName());
+
+ IEntity childEntity = javaEntity();
+ //TODO probably want this to be 3, since in this case the child descriptor really uses the
+ //parent table because it is single table inheritance strategy. Not sure yet how to deal with this.
+ assertEquals(4, CollectionTools.size(childEntity.associatedTablesIncludingInherited()));
+ }
+
+ public void testAssociatedTableNamesIncludingInherited() throws Exception {
+ createTestEntityWithSecondaryTables();
+ createTestSubType();
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity parentEntity = javaEntity().rootEntity();
+ assertEquals(3, CollectionTools.size(parentEntity.associatedTableNamesIncludingInherited()));
+ Iterator<String> associatedTables = parentEntity.associatedTableNamesIncludingInherited();
+ String table1 = associatedTables.next();
+ String table2 = associatedTables.next();
+ String table3 = associatedTables.next();
+ assertEquals(TYPE_NAME, table1);
+ assertEquals("foo", table2);
+ assertEquals("bar", table3);
+
+ IEntity childEntity = javaEntity();
+ //TODO probably want this to be 3, since in this case the child descriptor really uses the
+ //parent table because it is single table inheritance strategy. Not sure yet how to deal with this.
+ assertEquals(4, CollectionTools.size(childEntity.associatedTableNamesIncludingInherited()));
+ }
+
+ public void testAddSecondaryTableToResourceModel() throws Exception {
+ createTestEntityWithName();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ SecondaryTable secondaryTable = (SecondaryTable) typeResource.addAnnotation(0, JPA.SECONDARY_TABLE, JPA.SECONDARY_TABLES);
+ secondaryTable.setName("FOO");
+
+ assertEquals(1, javaEntity().secondaryTablesSize());
+ assertEquals("FOO", javaEntity().secondaryTables().next().getSpecifiedName());
+ assertEquals("FOO", javaEntity().secondaryTables().next().getName());
+
+ SecondaryTable secondaryTable2 = (SecondaryTable) typeResource.addAnnotation(1, JPA.SECONDARY_TABLE, JPA.SECONDARY_TABLES);
+ secondaryTable2.setName("BAR");
+
+ assertEquals(2, javaEntity().secondaryTablesSize());
+ ListIterator<ISecondaryTable> secondaryTables = javaEntity().secondaryTables();
+ assertEquals("FOO", secondaryTables.next().getSpecifiedName());
+ assertEquals("BAR", secondaryTables.next().getSpecifiedName());
+
+ SecondaryTable secondaryTable3 = (SecondaryTable) typeResource.addAnnotation(0, JPA.SECONDARY_TABLE, JPA.SECONDARY_TABLES);
+ secondaryTable3.setName("BAZ");
+
+ assertEquals(3, javaEntity().secondaryTablesSize());
+ secondaryTables = javaEntity().secondaryTables();
+ assertEquals("BAZ", secondaryTables.next().getSpecifiedName());
+ assertEquals("FOO", secondaryTables.next().getSpecifiedName());
+ assertEquals("BAR", secondaryTables.next().getSpecifiedName());
+ }
+
+ public void testRemoveSecondaryTableFromResourceModel() throws Exception {
+ createTestEntityWithSecondaryTables();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedSecondaryTable(2).setSpecifiedName("baz");
+ ListIterator<ISecondaryTable> secondaryTables = javaEntity().secondaryTables();
+
+ assertEquals(3, javaEntity().secondaryTablesSize());
+ assertEquals("foo", secondaryTables.next().getSpecifiedName());
+ assertEquals("bar", secondaryTables.next().getSpecifiedName());
+ assertEquals("baz", secondaryTables.next().getSpecifiedName());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ typeResource.removeAnnotation(0, JPA.SECONDARY_TABLE, JPA.SECONDARY_TABLES);
+
+ secondaryTables = javaEntity().secondaryTables();
+ assertEquals(2, javaEntity().secondaryTablesSize());
+ assertEquals("bar", secondaryTables.next().getSpecifiedName());
+ assertEquals("baz", secondaryTables.next().getSpecifiedName());
+
+ typeResource.removeAnnotation(0, JPA.SECONDARY_TABLE, JPA.SECONDARY_TABLES);
+
+ secondaryTables = javaEntity().secondaryTables();
+ assertEquals(1, javaEntity().secondaryTablesSize());
+ assertEquals("baz", secondaryTables.next().getSpecifiedName());
+
+
+ typeResource.removeAnnotation(0, JPA.SECONDARY_TABLE, JPA.SECONDARY_TABLES);
+
+ secondaryTables = javaEntity().secondaryTables();
+ assertEquals(0, javaEntity().secondaryTablesSize());
+ assertFalse(secondaryTables.hasNext());
+ }
+
+ public void testGetSequenceGenerator() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(javaEntity().getSequenceGenerator());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ typeResource.addAnnotation(JPA.SEQUENCE_GENERATOR);
+
+ assertNotNull(javaEntity().getSequenceGenerator());
+ assertEquals(1, CollectionTools.size(typeResource.annotations()));
+ }
+
+ public void testAddSequenceGenerator() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(javaEntity().getSequenceGenerator());
+
+ javaEntity().addSequenceGenerator();
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNotNull(typeResource.annotation(JPA.SEQUENCE_GENERATOR));
+ assertNotNull(javaEntity().getSequenceGenerator());
+
+ //try adding another sequence generator, should get an IllegalStateException
+ try {
+ javaEntity().addSequenceGenerator();
+ } catch (IllegalStateException e) {
+ return;
+ }
+ fail("IllegalStateException not thrown");
+ }
+
+ public void testRemoveSequenceGenerator() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ typeResource.addAnnotation(JPA.SEQUENCE_GENERATOR);
+
+ javaEntity().removeSequenceGenerator();
+
+ assertNull(javaEntity().getSequenceGenerator());
+ assertNull(typeResource.annotation(JPA.SEQUENCE_GENERATOR));
+
+ //try removing the sequence generator again, should get an IllegalStateException
+ try {
+ javaEntity().removeSequenceGenerator();
+ } catch (IllegalStateException e) {
+ return;
+ }
+ fail("IllegalStateException not thrown");
+ }
+
+ public void testGetTableGenerator() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(javaEntity().getTableGenerator());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ typeResource.addAnnotation(JPA.TABLE_GENERATOR);
+
+ assertNotNull(javaEntity().getTableGenerator());
+ assertEquals(1, CollectionTools.size(typeResource.annotations()));
+ }
+
+ public void testAddTableGenerator() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(javaEntity().getTableGenerator());
+
+ javaEntity().addTableGenerator();
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNotNull(typeResource.annotation(JPA.TABLE_GENERATOR));
+ assertNotNull(javaEntity().getTableGenerator());
+
+ //try adding another table generator, should get an IllegalStateException
+ try {
+ javaEntity().addTableGenerator();
+ } catch (IllegalStateException e) {
+ return;
+ }
+ fail("IllegalStateException not thrown");
+ }
+
+ public void testRemoveTableGenerator() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ typeResource.addAnnotation(JPA.TABLE_GENERATOR);
+
+ javaEntity().removeTableGenerator();
+
+ assertNull(javaEntity().getTableGenerator());
+ assertNull(typeResource.annotation(JPA.TABLE_GENERATOR));
+
+ //try removing the table generator again, should get an IllegalStateException
+ try {
+ javaEntity().removeTableGenerator();
+ } catch (IllegalStateException e) {
+ return;
+ }
+ fail("IllegalStateException not thrown");
+ }
+
+ public void testGetDiscriminatorColumn() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNotNull(javaEntity().getDiscriminatorColumn());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ DiscriminatorColumn column = (DiscriminatorColumn) typeResource.addAnnotation(JPA.DISCRIMINATOR_COLUMN);
+ column.setName("foo");
+
+ assertEquals("foo", javaEntity().getDiscriminatorColumn().getSpecifiedName());
+
+ column.setName(null);
+
+ assertNull(javaEntity().getDiscriminatorColumn().getSpecifiedName());
+
+ typeResource.removeAnnotation(JPA.DISCRIMINATOR_COLUMN);
+
+ assertNotNull(javaEntity().getDiscriminatorColumn());
+ }
+
+ public void testSpecifiedPrimaryKeyJoinColumns() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ ListIterator<IJavaPrimaryKeyJoinColumn> specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+
+ assertFalse(specifiedPkJoinColumns.hasNext());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ //add an annotation to the resource model and verify the context model is updated
+ PrimaryKeyJoinColumn pkJoinColumn = (PrimaryKeyJoinColumn) typeResource.addAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ pkJoinColumn.setName("FOO");
+ specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("FOO", specifiedPkJoinColumns.next().getName());
+ assertFalse(specifiedPkJoinColumns.hasNext());
+
+ pkJoinColumn = (PrimaryKeyJoinColumn) typeResource.addAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ pkJoinColumn.setName("BAR");
+ specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAR", specifiedPkJoinColumns.next().getName());
+ assertEquals("FOO", specifiedPkJoinColumns.next().getName());
+ assertFalse(specifiedPkJoinColumns.hasNext());
+
+
+ pkJoinColumn = (PrimaryKeyJoinColumn) typeResource.addAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ pkJoinColumn.setName("BAZ");
+ specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAZ", specifiedPkJoinColumns.next().getName());
+ assertEquals("BAR", specifiedPkJoinColumns.next().getName());
+ assertEquals("FOO", specifiedPkJoinColumns.next().getName());
+ assertFalse(specifiedPkJoinColumns.hasNext());
+
+ //move an annotation to the resource model and verify the context model is updated
+ typeResource.move(1, 0, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAR", specifiedPkJoinColumns.next().getName());
+ assertEquals("BAZ", specifiedPkJoinColumns.next().getName());
+ assertEquals("FOO", specifiedPkJoinColumns.next().getName());
+ assertFalse(specifiedPkJoinColumns.hasNext());
+
+ typeResource.removeAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAZ", specifiedPkJoinColumns.next().getName());
+ assertEquals("FOO", specifiedPkJoinColumns.next().getName());
+ assertFalse(specifiedPkJoinColumns.hasNext());
+
+ typeResource.removeAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("FOO", specifiedPkJoinColumns.next().getName());
+ assertFalse(specifiedPkJoinColumns.hasNext());
+
+
+ typeResource.removeAnnotation(0, JPA.PRIMARY_KEY_JOIN_COLUMN, JPA.PRIMARY_KEY_JOIN_COLUMNS);
+ specifiedPkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertFalse(specifiedPkJoinColumns.hasNext());
+ }
+
+ public void testDefaultPrimaryKeyJoinColumns() {
+ //TODO
+ }
+
+ public void testSpecifiedPrimaryKeyJoinColumnsSize() throws Exception {
+ createTestEntityWithPrimaryKeyJoinColumns();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(2, javaEntity().specifiedPrimaryKeyJoinColumnsSize());
+ }
+
+ public void testAddSpecifiedPrimaryKeyJoinColumn() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(0).setSpecifiedName("FOO");
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(0).setSpecifiedName("BAR");
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(0).setSpecifiedName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Iterator<JavaResource> pkJoinColumns = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+
+ assertEquals("BAZ", ((PrimaryKeyJoinColumn) pkJoinColumns.next()).getName());
+ assertEquals("BAR", ((PrimaryKeyJoinColumn) pkJoinColumns.next()).getName());
+ assertEquals("FOO", ((PrimaryKeyJoinColumn) pkJoinColumns.next()).getName());
+ assertFalse(pkJoinColumns.hasNext());
+ }
+
+ public void testAddSpecifiedPrimaryKeyJoinColumn2() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(0).setSpecifiedName("FOO");
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(1).setSpecifiedName("BAR");
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(2).setSpecifiedName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Iterator<JavaResource> pkJoinColumns = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+
+ assertEquals("FOO", ((PrimaryKeyJoinColumn) pkJoinColumns.next()).getName());
+ assertEquals("BAR", ((PrimaryKeyJoinColumn) pkJoinColumns.next()).getName());
+ assertEquals("BAZ", ((PrimaryKeyJoinColumn) pkJoinColumns.next()).getName());
+ assertFalse(pkJoinColumns.hasNext());
+ }
+ public void testRemoveSpecifiedPrimaryKeyJoinColumn() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(0).setSpecifiedName("FOO");
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(1).setSpecifiedName("BAR");
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(2).setSpecifiedName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(3, CollectionTools.size(typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME)));
+
+ javaEntity().removeSpecifiedPrimaryKeyJoinColumn(1);
+
+ Iterator<JavaResource> pkJoinColumnResources = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ assertEquals("FOO", ((PrimaryKeyJoinColumn) pkJoinColumnResources.next()).getName());
+ assertEquals("BAZ", ((PrimaryKeyJoinColumn) pkJoinColumnResources.next()).getName());
+ assertFalse(pkJoinColumnResources.hasNext());
+
+ Iterator<IPrimaryKeyJoinColumn> pkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("FOO", pkJoinColumns.next().getName());
+ assertEquals("BAZ", pkJoinColumns.next().getName());
+ assertFalse(pkJoinColumns.hasNext());
+
+
+ javaEntity().removeSpecifiedPrimaryKeyJoinColumn(1);
+ pkJoinColumnResources = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ assertEquals("FOO", ((PrimaryKeyJoinColumn) pkJoinColumnResources.next()).getName());
+ assertFalse(pkJoinColumnResources.hasNext());
+
+ pkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertEquals("FOO", pkJoinColumns.next().getName());
+ assertFalse(pkJoinColumns.hasNext());
+
+
+ javaEntity().removeSpecifiedPrimaryKeyJoinColumn(0);
+ pkJoinColumnResources = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ assertFalse(pkJoinColumnResources.hasNext());
+ pkJoinColumns = javaEntity().specifiedPrimaryKeyJoinColumns();
+ assertFalse(pkJoinColumns.hasNext());
+
+ assertNull(typeResource.annotation(PrimaryKeyJoinColumns.ANNOTATION_NAME));
+ }
+
+ public void testMoveSpecifiedPrimaryKeyJoinColumn() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addSpecifiedPrimaryKeyJoinColumn(0).setSpecifiedName("FOO");
+ entity.addSpecifiedPrimaryKeyJoinColumn(1).setSpecifiedName("BAR");
+ entity.addSpecifiedPrimaryKeyJoinColumn(2).setSpecifiedName("BAZ");
+
+ ListIterator<PrimaryKeyJoinColumn> javaPrimaryKeyJoinColumns = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaPrimaryKeyJoinColumns));
+
+
+ entity.moveSpecifiedPrimaryKeyJoinColumn(2, 0);
+ ListIterator<IPrimaryKeyJoinColumn> primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAR", primaryKeyJoinColumns.next().getSpecifiedName());
+ assertEquals("BAZ", primaryKeyJoinColumns.next().getSpecifiedName());
+ assertEquals("FOO", primaryKeyJoinColumns.next().getSpecifiedName());
+
+ javaPrimaryKeyJoinColumns = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ assertEquals("BAR", javaPrimaryKeyJoinColumns.next().getName());
+ assertEquals("BAZ", javaPrimaryKeyJoinColumns.next().getName());
+ assertEquals("FOO", javaPrimaryKeyJoinColumns.next().getName());
+
+
+ entity.moveSpecifiedPrimaryKeyJoinColumn(0, 1);
+ primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAZ", primaryKeyJoinColumns.next().getSpecifiedName());
+ assertEquals("BAR", primaryKeyJoinColumns.next().getSpecifiedName());
+ assertEquals("FOO", primaryKeyJoinColumns.next().getSpecifiedName());
+
+ javaPrimaryKeyJoinColumns = typeResource.annotations(PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ assertEquals("BAZ", javaPrimaryKeyJoinColumns.next().getName());
+ assertEquals("BAR", javaPrimaryKeyJoinColumns.next().getName());
+ assertEquals("FOO", javaPrimaryKeyJoinColumns.next().getName());
+ }
+
+ public void testUpdateSpecifiedPrimaryKeyJoinColumns() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ ((PrimaryKeyJoinColumn) typeResource.addAnnotation(0, PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME)).setName("FOO");
+ ((PrimaryKeyJoinColumn) typeResource.addAnnotation(1, PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME)).setName("BAR");
+ ((PrimaryKeyJoinColumn) typeResource.addAnnotation(2, PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME)).setName("BAZ");
+
+ ListIterator<IPrimaryKeyJoinColumn> primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertEquals("FOO", primaryKeyJoinColumns.next().getName());
+ assertEquals("BAR", primaryKeyJoinColumns.next().getName());
+ assertEquals("BAZ", primaryKeyJoinColumns.next().getName());
+ assertFalse(primaryKeyJoinColumns.hasNext());
+
+ typeResource.move(2, 0, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAR", primaryKeyJoinColumns.next().getName());
+ assertEquals("BAZ", primaryKeyJoinColumns.next().getName());
+ assertEquals("FOO", primaryKeyJoinColumns.next().getName());
+ assertFalse(primaryKeyJoinColumns.hasNext());
+
+ typeResource.move(0, 1, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAZ", primaryKeyJoinColumns.next().getName());
+ assertEquals("BAR", primaryKeyJoinColumns.next().getName());
+ assertEquals("FOO", primaryKeyJoinColumns.next().getName());
+ assertFalse(primaryKeyJoinColumns.hasNext());
+
+ typeResource.removeAnnotation(1, PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAZ", primaryKeyJoinColumns.next().getName());
+ assertEquals("FOO", primaryKeyJoinColumns.next().getName());
+ assertFalse(primaryKeyJoinColumns.hasNext());
+
+ typeResource.removeAnnotation(1, PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertEquals("BAZ", primaryKeyJoinColumns.next().getName());
+ assertFalse(primaryKeyJoinColumns.hasNext());
+
+ typeResource.removeAnnotation(0, PrimaryKeyJoinColumn.ANNOTATION_NAME, PrimaryKeyJoinColumns.ANNOTATION_NAME);
+ primaryKeyJoinColumns = entity.specifiedPrimaryKeyJoinColumns();
+ assertFalse(primaryKeyJoinColumns.hasNext());
+ }
+
+ public void testPrimaryKeyJoinColumnIsVirtual() throws Exception {
+ createTestEntityWithSecondaryTable();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedPrimaryKeyJoinColumn(0);
+ IPrimaryKeyJoinColumn specifiedPkJoinColumn = javaEntity().specifiedPrimaryKeyJoinColumns().next();
+ assertFalse(specifiedPkJoinColumn.isVirtual());
+
+ IPrimaryKeyJoinColumn defaultPkJoinColumn = javaEntity().defaultPrimaryKeyJoinColumns().next();
+ assertTrue(defaultPkJoinColumn.isVirtual());
+ }
+
+ public void testOverridableAttributeNames() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ Iterator<String> overridableAttributeNames = javaEntity().overridableAttributeNames();
+ assertFalse(overridableAttributeNames.hasNext());
+ }
+
+ public void testAllOverridableAttributeNames() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ Iterator<String> overridableAttributeNames = javaEntity().allOverridableAttributeNames();
+ assertEquals("id", overridableAttributeNames.next());
+ assertEquals("name", overridableAttributeNames.next());
+ assertFalse(overridableAttributeNames.hasNext());
+ }
+
+ public void testOverridableAssociationNames() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ Iterator<String> overridableAssociationNames = javaEntity().overridableAssociationNames();
+ assertFalse(overridableAssociationNames.hasNext());
+ }
+ //TODO add some associations to the MappedSuperclass
+ //add all mapping types to test which ones are overridable
+ public void testAllOverridableAssociationNames() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ Iterator<String> overridableAssociationNames = javaPersistentType().parentPersistentType().getMapping().allOverridableAssociationNames();
+ assertFalse(overridableAssociationNames.hasNext());
+ }
+
+ public void testTableNameIsInvalid() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertFalse(javaEntity().tableNameIsInvalid(TYPE_NAME));
+ assertTrue(javaEntity().tableNameIsInvalid("FOO"));
+
+ javaEntity().addSpecifiedSecondaryTable(0).setSpecifiedName("BAR");
+
+ assertFalse(javaEntity().tableNameIsInvalid("BAR"));
+ }
+
+ public void testAttributeMappingKeyAllowed() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = (IEntity) javaPersistentType().getMapping();
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.BASIC_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.ID_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.EMBEDDED_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.VERSION_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.TRANSIENT_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY));
+ assertTrue(entity.attributeMappingKeyAllowed(IMappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY));
+ }
+
+ public void testSpecifiedAttributeOverrides() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ ListIterator<IJavaAttributeOverride> specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+
+ assertFalse(specifiedAttributeOverrides.hasNext());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ //add an annotation to the resource model and verify the context model is updated
+ AttributeOverride attributeOverride = (AttributeOverride) typeResource.addAnnotation(0, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ attributeOverride.setName("FOO");
+ specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("FOO", specifiedAttributeOverrides.next().getName());
+ assertFalse(specifiedAttributeOverrides.hasNext());
+
+ attributeOverride = (AttributeOverride) typeResource.addAnnotation(1, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ attributeOverride.setName("BAR");
+ specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("FOO", specifiedAttributeOverrides.next().getName());
+ assertEquals("BAR", specifiedAttributeOverrides.next().getName());
+ assertFalse(specifiedAttributeOverrides.hasNext());
+
+
+ attributeOverride = (AttributeOverride) typeResource.addAnnotation(0, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ attributeOverride.setName("BAZ");
+ specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("BAZ", specifiedAttributeOverrides.next().getName());
+ assertEquals("FOO", specifiedAttributeOverrides.next().getName());
+ assertEquals("BAR", specifiedAttributeOverrides.next().getName());
+ assertFalse(specifiedAttributeOverrides.hasNext());
+
+ //move an annotation to the resource model and verify the context model is updated
+ typeResource.move(1, 0, JPA.ATTRIBUTE_OVERRIDES);
+ specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("FOO", specifiedAttributeOverrides.next().getName());
+ assertEquals("BAZ", specifiedAttributeOverrides.next().getName());
+ assertEquals("BAR", specifiedAttributeOverrides.next().getName());
+ assertFalse(specifiedAttributeOverrides.hasNext());
+
+ typeResource.removeAnnotation(0, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("BAZ", specifiedAttributeOverrides.next().getName());
+ assertEquals("BAR", specifiedAttributeOverrides.next().getName());
+ assertFalse(specifiedAttributeOverrides.hasNext());
+
+ typeResource.removeAnnotation(0, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("BAR", specifiedAttributeOverrides.next().getName());
+ assertFalse(specifiedAttributeOverrides.hasNext());
+
+
+ typeResource.removeAnnotation(0, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ specifiedAttributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertFalse(specifiedAttributeOverrides.hasNext());
+ }
+
+ public void testDefaultAttributeOverrides() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ addXmlClassRef(FULLY_QUALIFIED_SUB_TYPE_NAME);
+
+ ListIterator<IClassRef> classRefs = persistenceUnit().classRefs();
+ classRefs.next();
+ IJavaEntity javaEntity = (IJavaEntity) classRefs.next().getJavaPersistentType().getMapping();
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_SUB_TYPE_NAME);
+ assertEquals(SUB_TYPE_NAME, typeResource.getName());
+ assertNull(typeResource.annotation(AttributeOverride.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(AttributeOverrides.ANNOTATION_NAME));
+
+ assertEquals(2, CollectionTools.size(javaEntity.defaultAttributeOverrides()));
+ IAttributeOverride defaultAttributeOverride = javaEntity.defaultAttributeOverrides().next();
+ assertEquals("id", defaultAttributeOverride.getName());
+ assertEquals("id", defaultAttributeOverride.getColumn().getName());
+ assertEquals(SUB_TYPE_NAME, defaultAttributeOverride.getColumn().getTable());
+
+
+ IMappedSuperclass mappedSuperclass = (IMappedSuperclass) javaPersistentType().getMapping();
+
+ IBasicMapping idMapping = (IBasicMapping) mappedSuperclass.persistentType().attributeNamed("id").getMapping();
+ idMapping.getColumn().setSpecifiedName("FOO");
+ idMapping.getColumn().setSpecifiedTable("BAR");
+
+ assertEquals(SUB_TYPE_NAME, typeResource.getName());
+ assertNull(typeResource.annotation(AttributeOverride.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(AttributeOverrides.ANNOTATION_NAME));
+
+ assertEquals(2, CollectionTools.size(javaEntity.defaultAttributeOverrides()));
+ defaultAttributeOverride = javaEntity.defaultAttributeOverrides().next();
+ assertEquals("id", defaultAttributeOverride.getName());
+ assertEquals("FOO", defaultAttributeOverride.getColumn().getName());
+ assertEquals("BAR", defaultAttributeOverride.getColumn().getTable());
+
+ idMapping.getColumn().setSpecifiedName(null);
+ idMapping.getColumn().setSpecifiedTable(null);
+ assertEquals(SUB_TYPE_NAME, typeResource.getName());
+ assertNull(typeResource.annotation(AttributeOverride.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(AttributeOverrides.ANNOTATION_NAME));
+
+ defaultAttributeOverride = javaEntity.defaultAttributeOverrides().next();
+ assertEquals("id", defaultAttributeOverride.getName());
+ assertEquals("id", defaultAttributeOverride.getColumn().getName());
+ assertEquals(SUB_TYPE_NAME, defaultAttributeOverride.getColumn().getTable());
+
+ javaEntity.addSpecifiedAttributeOverride(0).setName("id");
+ assertEquals(1, CollectionTools.size(javaEntity.defaultAttributeOverrides()));
+ }
+
+ public void testSpecifiedAttributeOverridesSize() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(0, javaEntity().specifiedAttributeOverridesSize());
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ //add an annotation to the resource model and verify the context model is updated
+ AttributeOverride attributeOverride = (AttributeOverride) typeResource.addAnnotation(0, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ attributeOverride.setName("FOO");
+ attributeOverride = (AttributeOverride) typeResource.addAnnotation(0, JPA.ATTRIBUTE_OVERRIDE, JPA.ATTRIBUTE_OVERRIDES);
+ attributeOverride.setName("BAR");
+
+ assertEquals(2, javaEntity().specifiedAttributeOverridesSize());
+ }
+
+ public void testAddSpecifiedAttributeOverride() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedAttributeOverride(0).setName("FOO");
+ javaEntity().addSpecifiedAttributeOverride(0).setName("BAR");
+ javaEntity().addSpecifiedAttributeOverride(0).setName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Iterator<JavaResource> attributeOverrides = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+
+ assertEquals("BAZ", ((AttributeOverride) attributeOverrides.next()).getName());
+ assertEquals("BAR", ((AttributeOverride) attributeOverrides.next()).getName());
+ assertEquals("FOO", ((AttributeOverride) attributeOverrides.next()).getName());
+ assertFalse(attributeOverrides.hasNext());
+ }
+
+ public void testAddSpecifiedAttributeOverride2() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedAttributeOverride(0).setName("FOO");
+ javaEntity().addSpecifiedAttributeOverride(1).setName("BAR");
+ javaEntity().addSpecifiedAttributeOverride(2).setName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+ Iterator<JavaResource> attributeOverrides = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+
+ assertEquals("FOO", ((AttributeOverride) attributeOverrides.next()).getName());
+ assertEquals("BAR", ((AttributeOverride) attributeOverrides.next()).getName());
+ assertEquals("BAZ", ((AttributeOverride) attributeOverrides.next()).getName());
+ assertFalse(attributeOverrides.hasNext());
+ }
+
+ public void testRemoveSpecifiedAttributeOverride() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ javaEntity().addSpecifiedAttributeOverride(0).setName("FOO");
+ javaEntity().addSpecifiedAttributeOverride(1).setName("BAR");
+ javaEntity().addSpecifiedAttributeOverride(2).setName("BAZ");
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertEquals(3, CollectionTools.size(typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME)));
+
+ javaEntity().removeSpecifiedAttributeOverride(1);
+
+ Iterator<JavaResource> attributeOverrideResources = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ assertEquals("FOO", ((AttributeOverride) attributeOverrideResources.next()).getName());
+ assertEquals("BAZ", ((AttributeOverride) attributeOverrideResources.next()).getName());
+ assertFalse(attributeOverrideResources.hasNext());
+
+ Iterator<IAttributeOverride> attributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+
+ javaEntity().removeSpecifiedAttributeOverride(1);
+ attributeOverrideResources = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ assertEquals("FOO", ((AttributeOverride) attributeOverrideResources.next()).getName());
+ assertFalse(attributeOverrideResources.hasNext());
+
+ attributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+
+ javaEntity().removeSpecifiedAttributeOverride(0);
+ attributeOverrideResources = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ assertFalse(attributeOverrideResources.hasNext());
+ attributeOverrides = javaEntity().specifiedAttributeOverrides();
+ assertFalse(attributeOverrides.hasNext());
+
+ assertNull(typeResource.annotation(AttributeOverrides.ANNOTATION_NAME));
+ }
+
+ public void testMoveSpecifiedAttributeOverride() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addSpecifiedAttributeOverride(0).setName("FOO");
+ entity.addSpecifiedAttributeOverride(1).setName("BAR");
+ entity.addSpecifiedAttributeOverride(2).setName("BAZ");
+
+ ListIterator<AttributeOverride> javaAttributeOverrides = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaAttributeOverrides));
+
+
+ entity.moveSpecifiedAttributeOverride(2, 0);
+ ListIterator<IAttributeOverride> attributeOverrides = entity.specifiedAttributeOverrides();
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+
+ javaAttributeOverrides = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ assertEquals("BAR", javaAttributeOverrides.next().getName());
+ assertEquals("BAZ", javaAttributeOverrides.next().getName());
+ assertEquals("FOO", javaAttributeOverrides.next().getName());
+
+
+ entity.moveSpecifiedAttributeOverride(0, 1);
+ attributeOverrides = entity.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+
+ javaAttributeOverrides = typeResource.annotations(AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ assertEquals("BAZ", javaAttributeOverrides.next().getName());
+ assertEquals("BAR", javaAttributeOverrides.next().getName());
+ assertEquals("FOO", javaAttributeOverrides.next().getName());
+ }
+
+ public void testUpdateSpecifiedAttributeOverrides() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ ((AttributeOverride) typeResource.addAnnotation(0, AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME)).setName("FOO");
+ ((AttributeOverride) typeResource.addAnnotation(1, AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME)).setName("BAR");
+ ((AttributeOverride) typeResource.addAnnotation(2, AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME)).setName("BAZ");
+
+ ListIterator<IAttributeOverride> attributeOverrides = entity.specifiedAttributeOverrides();
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ typeResource.move(2, 0, AttributeOverrides.ANNOTATION_NAME);
+ attributeOverrides = entity.specifiedAttributeOverrides();
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ typeResource.move(0, 1, AttributeOverrides.ANNOTATION_NAME);
+ attributeOverrides = entity.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ typeResource.removeAnnotation(1, AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ attributeOverrides = entity.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ typeResource.removeAnnotation(1, AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ attributeOverrides = entity.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ typeResource.removeAnnotation(0, AttributeOverride.ANNOTATION_NAME, AttributeOverrides.ANNOTATION_NAME);
+ attributeOverrides = entity.specifiedAttributeOverrides();
+ assertFalse(attributeOverrides.hasNext());
+ }
+
+ public void testAttributeOverrideIsVirtual() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ ListIterator<IAttributeOverride> defaultAttributeOverrides = javaEntity().defaultAttributeOverrides();
+ IAttributeOverride defaultAttributeOverride = defaultAttributeOverrides.next();
+ assertEquals("id", defaultAttributeOverride.getName());
+ assertTrue(defaultAttributeOverride.isVirtual());
+
+ defaultAttributeOverride = defaultAttributeOverrides.next();
+ assertEquals("name", defaultAttributeOverride.getName());
+ assertTrue(defaultAttributeOverride.isVirtual());
+ assertFalse(defaultAttributeOverrides.hasNext());
+
+ javaEntity().addSpecifiedAttributeOverride(0).setName("id");
+ IAttributeOverride specifiedAttributeOverride = javaEntity().specifiedAttributeOverrides().next();
+ assertFalse(specifiedAttributeOverride.isVirtual());
+
+
+ defaultAttributeOverrides = javaEntity().defaultAttributeOverrides();
+ defaultAttributeOverride = defaultAttributeOverrides.next();
+ assertEquals("name", defaultAttributeOverride.getName());
+ assertTrue(defaultAttributeOverride.isVirtual());
+ assertFalse(defaultAttributeOverrides.hasNext());
+ }
+
+ public void testAddNamedQuery() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ INamedQuery namedQuery = entity.addNamedQuery(0);
+ namedQuery.setName("FOO");
+
+ ListIterator<NamedQuery> javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+ INamedQuery namedQuery2 = entity.addNamedQuery(0);
+ namedQuery2.setName("BAR");
+
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+ INamedQuery namedQuery3 = entity.addNamedQuery(1);
+ namedQuery3.setName("BAZ");
+
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+ ListIterator<INamedQuery> namedQueries = entity.namedQueries();
+ assertEquals(namedQuery2, namedQueries.next());
+ assertEquals(namedQuery3, namedQueries.next());
+ assertEquals(namedQuery, namedQueries.next());
+
+ namedQueries = entity.namedQueries();
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ }
+
+ public void testRemoveNamedQuery() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addNamedQuery(0).setName("FOO");
+ entity.addNamedQuery(1).setName("BAR");
+ entity.addNamedQuery(2).setName("BAZ");
+
+ ListIterator<NamedQuery> javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaNamedQueries));
+
+ entity.removeNamedQuery(0);
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals(2, CollectionTools.size(javaNamedQueries));
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+
+ entity.removeNamedQuery(0);
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals(1, CollectionTools.size(javaNamedQueries));
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+
+ entity.removeNamedQuery(0);
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals(0, CollectionTools.size(javaNamedQueries));
+ }
+
+ public void testMoveNamedQuery() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addNamedQuery(0).setName("FOO");
+ entity.addNamedQuery(1).setName("BAR");
+ entity.addNamedQuery(2).setName("BAZ");
+
+ ListIterator<NamedQuery> javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaNamedQueries));
+
+
+ entity.moveNamedQuery(2, 0);
+ ListIterator<INamedQuery> namedQueries = entity.namedQueries();
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+
+ entity.moveNamedQuery(0, 1);
+ namedQueries = entity.namedQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+
+ javaNamedQueries = typeResource.annotations(NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+ }
+
+ public void testUpdateNamedQueries() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ ((NamedQuery) typeResource.addAnnotation(0, NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME)).setName("FOO");
+ ((NamedQuery) typeResource.addAnnotation(1, NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME)).setName("BAR");
+ ((NamedQuery) typeResource.addAnnotation(2, NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME)).setName("BAZ");
+
+ ListIterator<INamedQuery> namedQueries = entity.namedQueries();
+ assertEquals("FOO", namedQueries.next().getName());
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.move(2, 0, NamedQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedQueries();
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.move(0, 1, NamedQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.removeAnnotation(1, NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.removeAnnotation(1, NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.removeAnnotation(0, NamedQuery.ANNOTATION_NAME, NamedQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedQueries();
+ assertFalse(namedQueries.hasNext());
+ }
+
+ public void testAddNamedNativeQuery() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ INamedNativeQuery namedNativeQuery = entity.addNamedNativeQuery(0);
+ namedNativeQuery.setName("FOO");
+
+ ListIterator<NamedNativeQuery> javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+ INamedNativeQuery namedNativeQuery2 = entity.addNamedNativeQuery(0);
+ namedNativeQuery2.setName("BAR");
+
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+ INamedNativeQuery namedNativeQuery3 = entity.addNamedNativeQuery(1);
+ namedNativeQuery3.setName("BAZ");
+
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+ ListIterator<INamedNativeQuery> namedQueries = entity.namedNativeQueries();
+ assertEquals(namedNativeQuery2, namedQueries.next());
+ assertEquals(namedNativeQuery3, namedQueries.next());
+ assertEquals(namedNativeQuery, namedQueries.next());
+
+ namedQueries = entity.namedNativeQueries();
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ }
+
+ public void testRemoveNamedNativeQuery() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addNamedNativeQuery(0).setName("FOO");
+ entity.addNamedNativeQuery(1).setName("BAR");
+ entity.addNamedNativeQuery(2).setName("BAZ");
+
+ ListIterator<NamedNativeQuery> javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaNamedQueries));
+
+ entity.removeNamedNativeQuery(0);
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals(2, CollectionTools.size(javaNamedQueries));
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+
+ entity.removeNamedNativeQuery(0);
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals(1, CollectionTools.size(javaNamedQueries));
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+
+ entity.removeNamedNativeQuery(0);
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals(0, CollectionTools.size(javaNamedQueries));
+ }
+
+ public void testMoveNamedNativeQuery() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addNamedNativeQuery(0).setName("FOO");
+ entity.addNamedNativeQuery(1).setName("BAR");
+ entity.addNamedNativeQuery(2).setName("BAZ");
+
+ ListIterator<NamedNativeQuery> javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaNamedQueries));
+
+
+ entity.moveNamedNativeQuery(2, 0);
+ ListIterator<INamedNativeQuery> namedQueries = entity.namedNativeQueries();
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+
+
+ entity.moveNamedNativeQuery(0, 1);
+ namedQueries = entity.namedNativeQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+
+ javaNamedQueries = typeResource.annotations(NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ assertEquals("BAZ", javaNamedQueries.next().getName());
+ assertEquals("BAR", javaNamedQueries.next().getName());
+ assertEquals("FOO", javaNamedQueries.next().getName());
+ }
+
+ public void testUpdateNamedNativeQueries() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ ((NamedNativeQuery) typeResource.addAnnotation(0, NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME)).setName("FOO");
+ ((NamedNativeQuery) typeResource.addAnnotation(1, NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME)).setName("BAR");
+ ((NamedNativeQuery) typeResource.addAnnotation(2, NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME)).setName("BAZ");
+
+ ListIterator<INamedNativeQuery> namedQueries = entity.namedNativeQueries();
+ assertEquals("FOO", namedQueries.next().getName());
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.move(2, 0, NamedNativeQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedNativeQueries();
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.move(0, 1, NamedNativeQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedNativeQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("BAR", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.removeAnnotation(1, NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedNativeQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertEquals("FOO", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.removeAnnotation(1, NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedNativeQueries();
+ assertEquals("BAZ", namedQueries.next().getName());
+ assertFalse(namedQueries.hasNext());
+
+ typeResource.removeAnnotation(0, NamedNativeQuery.ANNOTATION_NAME, NamedNativeQueries.ANNOTATION_NAME);
+ namedQueries = entity.namedNativeQueries();
+ assertFalse(namedQueries.hasNext());
+ }
+
+ public void testAddSpecifiedAssociationOverride() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ IAssociationOverride associationOverride = entity.addSpecifiedAssociationOverride(0);
+ associationOverride.setName("FOO");
+
+ ListIterator<AssociationOverride> javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals("FOO", javaAssociationOverrides.next().getName());
+
+ IAssociationOverride associationOverride2 = entity.addSpecifiedAssociationOverride(0);
+ associationOverride2.setName("BAR");
+
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals("BAR", javaAssociationOverrides.next().getName());
+ assertEquals("FOO", javaAssociationOverrides.next().getName());
+
+ IAssociationOverride associationOverride3 = entity.addSpecifiedAssociationOverride(1);
+ associationOverride3.setName("BAZ");
+
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals("BAR", javaAssociationOverrides.next().getName());
+ assertEquals("BAZ", javaAssociationOverrides.next().getName());
+ assertEquals("FOO", javaAssociationOverrides.next().getName());
+
+ ListIterator<IAssociationOverride> associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals(associationOverride2, associationOverrides.next());
+ assertEquals(associationOverride3, associationOverrides.next());
+ assertEquals(associationOverride, associationOverrides.next());
+
+ associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("BAR", associationOverrides.next().getName());
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertEquals("FOO", associationOverrides.next().getName());
+ }
+
+ public void testRemoveSpecifiedAssociationOverride() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addSpecifiedAssociationOverride(0).setName("FOO");
+ entity.addSpecifiedAssociationOverride(1).setName("BAR");
+ entity.addSpecifiedAssociationOverride(2).setName("BAZ");
+
+ ListIterator<AssociationOverride> javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaAssociationOverrides));
+
+ entity.removeSpecifiedAssociationOverride(0);
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals(2, CollectionTools.size(javaAssociationOverrides));
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals("BAR", javaAssociationOverrides.next().getName());
+ assertEquals("BAZ", javaAssociationOverrides.next().getName());
+
+ entity.removeSpecifiedAssociationOverride(0);
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals(1, CollectionTools.size(javaAssociationOverrides));
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals("BAZ", javaAssociationOverrides.next().getName());
+
+ entity.removeSpecifiedAssociationOverride(0);
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals(0, CollectionTools.size(javaAssociationOverrides));
+ }
+
+ public void testMoveSpecifiedAssociationOverride() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ entity.addSpecifiedAssociationOverride(0).setName("FOO");
+ entity.addSpecifiedAssociationOverride(1).setName("BAR");
+ entity.addSpecifiedAssociationOverride(2).setName("BAZ");
+
+ ListIterator<AssociationOverride> javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals(3, CollectionTools.size(javaAssociationOverrides));
+
+
+ entity.moveSpecifiedAssociationOverride(2, 0);
+ ListIterator<IAssociationOverride> associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("BAR", associationOverrides.next().getName());
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertEquals("FOO", associationOverrides.next().getName());
+
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals("BAR", javaAssociationOverrides.next().getName());
+ assertEquals("BAZ", javaAssociationOverrides.next().getName());
+ assertEquals("FOO", javaAssociationOverrides.next().getName());
+
+
+ entity.moveSpecifiedAssociationOverride(0, 1);
+ associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertEquals("BAR", associationOverrides.next().getName());
+ assertEquals("FOO", associationOverrides.next().getName());
+
+ javaAssociationOverrides = typeResource.annotations(AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ assertEquals("BAZ", javaAssociationOverrides.next().getName());
+ assertEquals("BAR", javaAssociationOverrides.next().getName());
+ assertEquals("FOO", javaAssociationOverrides.next().getName());
+ }
+
+ public void testUpdateSpecifiedAssociationOverrides() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ IEntity entity = javaEntity();
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ ((AssociationOverride) typeResource.addAnnotation(0, AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME)).setName("FOO");
+ ((AssociationOverride) typeResource.addAnnotation(1, AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME)).setName("BAR");
+ ((AssociationOverride) typeResource.addAnnotation(2, AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME)).setName("BAZ");
+
+ ListIterator<IAssociationOverride> associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("FOO", associationOverrides.next().getName());
+ assertEquals("BAR", associationOverrides.next().getName());
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertFalse(associationOverrides.hasNext());
+
+ typeResource.move(2, 0, AssociationOverrides.ANNOTATION_NAME);
+ associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("BAR", associationOverrides.next().getName());
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertEquals("FOO", associationOverrides.next().getName());
+ assertFalse(associationOverrides.hasNext());
+
+ typeResource.move(0, 1, AssociationOverrides.ANNOTATION_NAME);
+ associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertEquals("BAR", associationOverrides.next().getName());
+ assertEquals("FOO", associationOverrides.next().getName());
+ assertFalse(associationOverrides.hasNext());
+
+ typeResource.removeAnnotation(1, AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertEquals("FOO", associationOverrides.next().getName());
+ assertFalse(associationOverrides.hasNext());
+
+ typeResource.removeAnnotation(1, AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ associationOverrides = entity.specifiedAssociationOverrides();
+ assertEquals("BAZ", associationOverrides.next().getName());
+ assertFalse(associationOverrides.hasNext());
+
+ typeResource.removeAnnotation(0, AssociationOverride.ANNOTATION_NAME, AssociationOverrides.ANNOTATION_NAME);
+ associationOverrides = entity.specifiedAssociationOverrides();
+ assertFalse(associationOverrides.hasNext());
+ }
+
+ public void testAssociationOverrideIsVirtual() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+ addXmlClassRef(PACKAGE_NAME + ".AnnotationTestTypeChild");
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ ListIterator<IAssociationOverride> defaultAssociationOverrides = javaEntity().defaultAssociationOverrides();
+ IAssociationOverride defaultAssociationOverride = defaultAssociationOverrides.next();
+ assertEquals("address", defaultAssociationOverride.getName());
+ assertTrue(defaultAssociationOverride.isVirtual());
+ assertFalse(defaultAssociationOverrides.hasNext());
+
+ javaEntity().addSpecifiedAssociationOverride(0).setName("address");
+ IAssociationOverride specifiedAssociationOverride = javaEntity().specifiedAssociationOverrides().next();
+ assertFalse(specifiedAssociationOverride.isVirtual());
+
+ defaultAssociationOverrides = javaEntity().defaultAssociationOverrides();
+ assertFalse(defaultAssociationOverrides.hasNext());
+ }
+
+ public void testDefaultAssociationOverrides() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+ addXmlClassRef(FULLY_QUALIFIED_SUB_TYPE_NAME);
+
+ ListIterator<IClassRef> classRefs = persistenceUnit().classRefs();
+ classRefs.next();
+ IJavaEntity javaEntity = (IJavaEntity) classRefs.next().getJavaPersistentType().getMapping();
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_SUB_TYPE_NAME);
+ assertEquals(SUB_TYPE_NAME, typeResource.getName());
+ assertNull(typeResource.annotation(AssociationOverride.ANNOTATION_NAME));
+ assertNull(typeResource.annotation(AssociationOverrides.ANNOTATION_NAME));
+
+ assertEquals(1, CollectionTools.size(javaEntity.defaultAssociationOverrides()));
+ IAssociationOverride defaultAssociationOverride = javaEntity.defaultAssociationOverrides().next();
+ assertEquals("address", defaultAssociationOverride.getName());
+ //TODO joinColumns for default association overrides
+// IJoinColumn defaultJoinColumn = defaultAssociationOverride.joinColumns().next();
+// assertEquals("address", defaultJoinColumn.getName());
+// assertEquals("address", defaultJoinColumn.getReferencedColumnName());
+// assertEquals(SUB_TYPE_NAME, defaultJoinColumn.getTable());
+//
+//
+// IMappedSuperclass mappedSuperclass = (IMappedSuperclass) javaPersistentType().getMapping();
+//
+// IOneToOneMapping addressMapping = (IOneToOneMapping) mappedSuperclass.persistentType().attributeNamed("address").getMapping();
+// IJoinColumn joinColumn = addressMapping.addSpecifiedJoinColumn(0);
+// joinColumn.setSpecifiedName("FOO");
+// joinColumn.setSpecifiedReferencedColumnName("BAR");
+// joinColumn.setSpecifiedTable("BAZ");
+//
+// assertEquals(SUB_TYPE_NAME, typeResource.getName());
+// assertNull(typeResource.annotation(AssociationOverride.ANNOTATION_NAME));
+// assertNull(typeResource.annotation(AssociationOverrides.ANNOTATION_NAME));
+//
+// assertEquals(1, CollectionTools.size(javaEntity.defaultAssociationOverrides()));
+// defaultAssociationOverride = javaEntity.defaultAssociationOverrides().next();
+// assertEquals("address", defaultAssociationOverride.getName());
+// assertEquals("FOO", defaultJoinColumn.getName());
+// assertEquals("BAR", defaultJoinColumn.getReferencedColumnName());
+// assertEquals("BAZ", defaultJoinColumn.getTable());
+//
+// joinColumn.setSpecifiedName(null);
+// joinColumn.setSpecifiedReferencedColumnName(null);
+// joinColumn.setSpecifiedTable(null);
+// assertEquals(SUB_TYPE_NAME, typeResource.getName());
+// assertNull(typeResource.annotation(AssociationOverride.ANNOTATION_NAME));
+// assertNull(typeResource.annotation(AssociationOverrides.ANNOTATION_NAME));
+//
+// defaultAssociationOverride = javaEntity.defaultAssociationOverrides().next();
+// assertEquals("address", defaultJoinColumn.getName());
+// assertEquals("address", defaultJoinColumn.getReferencedColumnName());
+// assertEquals(SUB_TYPE_NAME, defaultJoinColumn.getTable());
+//
+// javaEntity.addSpecifiedAssociationOverride(0).setName("address");
+// assertEquals(0, CollectionTools.size(javaEntity.defaultAssociationOverrides()));
+ }
+
+ public void testSpecifiedAssociationOverrides() {
+ //TODO
+ }
+
+ public void testUpdateIdClass() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(javaEntity().getIdClass());
+ assertNull(typeResource.annotation(IdClass.ANNOTATION_NAME));
+
+ IdClass idClass = (IdClass) typeResource.addAnnotation(IdClass.ANNOTATION_NAME);
+ assertNull(javaEntity().getIdClass());
+ assertNotNull(typeResource.annotation(IdClass.ANNOTATION_NAME));
+
+ idClass.setValue("model.Foo");
+ assertEquals("model.Foo", javaEntity().getIdClass());
+ assertEquals("model.Foo", ((IdClass) typeResource.annotation(IdClass.ANNOTATION_NAME)).getValue());
+
+ //test setting @IdClass value to null, IdClass annotation is removed
+ idClass.setValue(null);
+ assertNull(javaEntity().getIdClass());
+ assertNull(typeResource.annotation(IdClass.ANNOTATION_NAME));
+
+ //reset @IdClass value and then remove @IdClass
+ idClass = (IdClass) typeResource.addAnnotation(IdClass.ANNOTATION_NAME);
+ idClass.setValue("model.Foo");
+ typeResource.removeAnnotation(IdClass.ANNOTATION_NAME);
+
+ assertNull(javaEntity().getIdClass());
+ assertNull(typeResource.annotation(IdClass.ANNOTATION_NAME));
+ }
+
+ public void testModifyIdClass() throws Exception {
+ createTestEntity();
+ addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
+
+ JavaPersistentTypeResource typeResource = jpaProject().javaPersistentTypeResource(FULLY_QUALIFIED_TYPE_NAME);
+
+ assertNull(javaEntity().getIdClass());
+ assertNull(typeResource.annotation(IdClass.ANNOTATION_NAME));
+
+ javaEntity().setIdClass("model.Foo");
+ assertEquals("model.Foo", ((IdClass) typeResource.annotation(IdClass.ANNOTATION_NAME)).getValue());
+ assertEquals("model.Foo", javaEntity().getIdClass());
+
+ javaEntity().setIdClass(null);
+ assertNull(javaEntity().getIdClass());
+ assertNull(typeResource.annotation(IdClass.ANNOTATION_NAME));
+ }
+
+// Iterator<String> allOverridableAttributeNames();
+//
+// Iterator<String> allOverridableAssociationNames();
+
+}

Back to the top