diff options
author | kmoore | 2010-01-25 21:04:34 +0000 |
---|---|---|
committer | kmoore | 2010-01-25 21:04:34 +0000 |
commit | dd04862aa2268e15ae6db17ce7da1b24a29e14dc (patch) | |
tree | d08b728e3b73c57d797c70ae14a200cd8521aebb /jpa/tests/org.eclipse.jpt.core.tests | |
parent | 673b711e00504604204c138f7c926512f25c0d73 (diff) | |
download | webtools.dali-dd04862aa2268e15ae6db17ce7da1b24a29e14dc.tar.gz webtools.dali-dd04862aa2268e15ae6db17ce7da1b24a29e14dc.tar.xz webtools.dali-dd04862aa2268e15ae6db17ce7da1b24a29e14dc.zip |
299547 - this fixes the order column table default and adds validation for the column
Diffstat (limited to 'jpa/tests/org.eclipse.jpt.core.tests')
6 files changed, 658 insertions, 2 deletions
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaElementCollectionMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaElementCollectionMapping2_0Tests.java index 84ba7d0e75..adb6ec613e 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaElementCollectionMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaElementCollectionMapping2_0Tests.java @@ -28,6 +28,8 @@ import org.eclipse.jpt.core.context.VersionMapping; import org.eclipse.jpt.core.context.java.JavaPersistentType; import org.eclipse.jpt.core.context.persistence.ClassRef; import org.eclipse.jpt.core.jpa2.context.ElementCollectionMapping2_0; +import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; +import org.eclipse.jpt.core.jpa2.context.Orderable2_0; import org.eclipse.jpt.core.jpa2.resource.java.ElementCollection2_0Annotation; import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0; import org.eclipse.jpt.core.jpa2.resource.java.MapKeyClass2_0Annotation; @@ -924,4 +926,28 @@ public class GenericJavaElementCollectionMapping2_0Tests extends Generic2_0Conte elementCollectionMapping.setSpecifiedMapKeyClass(null); assertEquals("java.lang.Integer", elementCollectionMapping.getMapKeyClass()); } + + public void testOrderColumnDefaults() throws Exception { + createTestEntityWithGenericEmbeddableElementCollectionMapping(); + addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); + + PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next(); + ElementCollectionMapping2_0 elementCollectionMapping = (ElementCollectionMapping2_0) persistentAttribute.getMapping(); + + Orderable2_0 orderable = ((Orderable2_0) elementCollectionMapping.getOrderable()); + assertEquals(false, orderable.isOrderColumnOrdering()); + assertEquals(true, orderable.isNoOrdering()); + + orderable.setOrderColumnOrdering(true); + OrderColumn2_0 orderColumn = orderable.getOrderColumn(); + assertEquals(true, orderable.isOrderColumnOrdering()); + assertEquals(null, orderColumn.getSpecifiedName()); + assertEquals("addresses_ORDER", orderColumn.getDefaultName()); + assertEquals(TYPE_NAME + "_addresses", orderColumn.getTable()); + + orderColumn.setSpecifiedName("FOO"); + assertEquals("FOO", orderColumn.getSpecifiedName()); + assertEquals("addresses_ORDER", orderColumn.getDefaultName()); + assertEquals(TYPE_NAME + "_addresses", orderColumn.getTable()); + } } diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaManyToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaManyToManyMapping2_0Tests.java index 1ec6bdc70d..ebb2fe3dd7 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaManyToManyMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaManyToManyMapping2_0Tests.java @@ -13,8 +13,13 @@ package org.eclipse.jpt.core.tests.internal.jpa2.context.java; import java.util.Iterator; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jpt.core.context.AttributeMapping; +import org.eclipse.jpt.core.context.Entity; import org.eclipse.jpt.core.context.ManyToManyMapping; import org.eclipse.jpt.core.context.PersistentAttribute; +import org.eclipse.jpt.core.context.java.JavaPersistentType; +import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; +import org.eclipse.jpt.core.jpa2.context.Orderable2_0; +import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0; import org.eclipse.jpt.core.jpa2.resource.java.MapKeyClass2_0Annotation; import org.eclipse.jpt.core.resource.java.JPA; import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute; @@ -420,4 +425,126 @@ public class GenericJavaManyToManyMapping2_0Tests manyToManyMapping.setSpecifiedMapKeyClass(null); assertEquals("java.lang.Integer", manyToManyMapping.getMapKeyClass()); } + + public void testOrderColumnDefaults() throws Exception { + createTestEntityPrintQueue(); + createTestEntityPrintJob(); + + addXmlClassRef(PACKAGE_NAME + ".PrintQueue"); + addXmlClassRef(PACKAGE_NAME + ".PrintJob"); + JavaPersistentType printQueuePersistentType = (JavaPersistentType) getPersistenceUnit().getPersistentType("test.PrintQueue"); + ManyToManyMapping jobsMapping = (ManyToManyMapping) printQueuePersistentType.getAttributeNamed("jobs").getMapping(); + JavaPersistentType printJobPersistentType = (JavaPersistentType) getPersistenceUnit().getPersistentType("test.PrintJob"); + ManyToManyMapping queuesMapping = (ManyToManyMapping) printJobPersistentType.getAttributeNamed("queues").getMapping(); + + Orderable2_0 jobsOrderable = ((Orderable2_0) jobsMapping.getOrderable()); + OrderColumn2_0 jobsOrderColumn = jobsOrderable.getOrderColumn(); + assertEquals(true, jobsOrderable.isOrderColumnOrdering()); + assertEquals(null, jobsOrderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", jobsOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", jobsOrderColumn.getTable()); //the join table name + Orderable2_0 queuesOrderable = ((Orderable2_0) queuesMapping.getOrderable()); + OrderColumn2_0 queuesOrderColumn = queuesOrderable.getOrderColumn(); + assertEquals(true, queuesOrderable.isOrderColumnOrdering()); + assertEquals(null, queuesOrderColumn.getSpecifiedName()); + assertEquals("queues_ORDER", queuesOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", queuesOrderColumn.getTable()); + + jobsOrderColumn.setSpecifiedName("FOO"); + assertEquals("FOO", jobsOrderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", jobsOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", jobsOrderColumn.getTable()); + queuesOrderColumn.setSpecifiedName("BAR"); + assertEquals("BAR", queuesOrderColumn.getSpecifiedName()); + assertEquals("queues_ORDER", queuesOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", queuesOrderColumn.getTable()); + + ((Entity) printJobPersistentType.getMapping()).getTable().setSpecifiedName("MY_TABLE"); + assertEquals("MY_TABLE_PrintQueue", jobsOrderColumn.getTable()); + assertEquals("MY_TABLE_PrintQueue", queuesOrderColumn.getTable()); + + ((Entity) printQueuePersistentType.getMapping()).getTable().setSpecifiedName("OTHER_TABLE"); + assertEquals("MY_TABLE_OTHER_TABLE", jobsOrderColumn.getTable()); + assertEquals("MY_TABLE_OTHER_TABLE", queuesOrderColumn.getTable()); + + queuesMapping.getRelationshipReference().getJoinTableJoiningStrategy().getJoinTable().setSpecifiedName("MY_JOIN_TABLE"); + assertEquals("MY_JOIN_TABLE", jobsOrderColumn.getTable()); + assertEquals("MY_JOIN_TABLE", queuesOrderColumn.getTable()); + } + + private void createTestEntityPrintQueue() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.MANY_TO_MANY); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA2_0.ORDER_COLUMN); + sb.append(";"); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintQueue").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private String name;").append(CR); + sb.append(CR); + sb.append(" @ManyToMany(mappedBy=\"queues\")").append(CR); + sb.append(" @OrderColumn").append(CR); + sb.append(" private java.util.List<PrintJob> jobs;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintQueue.java", sourceWriter); + } + + private void createTestEntityPrintJob() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.MANY_TO_MANY); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA2_0.ORDER_COLUMN); + sb.append(";"); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintJob").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private int id;").append(CR); + sb.append(CR); + sb.append(" @ManyToMany").append(CR); + sb.append(" @OrderColumn").append(CR); + sb.append(" private java.util.List<PrintQueue> queues;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintJob.java", sourceWriter); + } } diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java index 790b506ed5..cac8b37c78 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java @@ -13,11 +13,16 @@ import java.util.Iterator; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jpt.core.context.AttributeMapping; +import org.eclipse.jpt.core.context.Entity; import org.eclipse.jpt.core.context.OneToManyMapping; import org.eclipse.jpt.core.context.PersistentAttribute; +import org.eclipse.jpt.core.context.java.JavaPersistentType; import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0; +import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; +import org.eclipse.jpt.core.jpa2.context.Orderable2_0; import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0; import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0; +import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0; import org.eclipse.jpt.core.jpa2.resource.java.MapKeyClass2_0Annotation; import org.eclipse.jpt.core.jpa2.resource.java.OneToMany2_0Annotation; import org.eclipse.jpt.core.resource.java.JPA; @@ -588,4 +593,104 @@ public class GenericJavaOneToManyMapping2_0Tests oneToManyMapping.setSpecifiedMapKeyClass(null); assertEquals("java.lang.Integer", oneToManyMapping.getMapKeyClass()); } + + public void testOrderColumnDefaults() throws Exception { + createTestEntityPrintQueue(); + createTestEntityPrintJob(); + + addXmlClassRef(PACKAGE_NAME + ".PrintQueue"); + addXmlClassRef(PACKAGE_NAME + ".PrintJob"); + + OneToManyMapping oneToManyMapping = (OneToManyMapping) getJavaPersistentType().getAttributeNamed("jobs").getMapping(); + + Orderable2_0 orderable = ((Orderable2_0) oneToManyMapping.getOrderable()); + OrderColumn2_0 orderColumn = orderable.getOrderColumn(); + assertEquals(true, orderable.isOrderColumnOrdering()); + assertEquals(null, orderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", orderColumn.getDefaultName()); + assertEquals("PrintJob", orderColumn.getTable()); + + orderColumn.setSpecifiedName("FOO"); + assertEquals("FOO", orderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", orderColumn.getDefaultName()); + assertEquals("PrintJob", orderColumn.getTable()); + + JavaPersistentType printJobPersistentType = (JavaPersistentType) getPersistenceUnit().getPersistentType("test.PrintJob"); + ((Entity) printJobPersistentType.getMapping()).getTable().setSpecifiedName("MY_TABLE"); + + assertEquals("MY_TABLE", orderColumn.getTable()); + } + + private void createTestEntityPrintQueue() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.ONE_TO_MANY); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA2_0.ORDER_COLUMN); + sb.append(";"); + sb.append(CR); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintQueue").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private String name;").append(CR); + sb.append(CR); + sb.append(" @OneToMany(mappedBy=\"queue\")").append(CR); + sb.append(" @OrderColumn").append(CR); + sb.append(" private java.util.List<PrintJob> jobs;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintQueue.java", sourceWriter); + } + + private void createTestEntityPrintJob() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.MANY_TO_ONE); + sb.append(";"); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintJob").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private int id;").append(CR); + sb.append(CR); + sb.append(" @ManyToOne").append(CR); + sb.append(" private PrintQueue queue;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintJob.java", sourceWriter); + } + } diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmElementCollectionMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmElementCollectionMapping2_0Tests.java index 30a8367873..a53aa1eb5d 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmElementCollectionMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmElementCollectionMapping2_0Tests.java @@ -28,6 +28,8 @@ import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmPersistentType; import org.eclipse.jpt.core.jpa2.MappingKeys2_0; import org.eclipse.jpt.core.jpa2.context.ElementCollectionMapping2_0; +import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; +import org.eclipse.jpt.core.jpa2.context.Orderable2_0; import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0; import org.eclipse.jpt.core.jpa2.context.orm.OrmElementCollectionMapping2_0; import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0; @@ -876,4 +878,57 @@ public class GenericOrmElementCollectionMapping2_0Tests extends Generic2_0Contex assertNull(ormElementCollectionMapping.getSpecifiedMapKeyClass()); assertNull(elementCollection.getMapKeyClass()); } + + public void testOrderColumnDefaults() throws Exception { + createTestEntityWithGenericBasicElementCollectionMapping(); + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedAttribute(MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY, "addresses"); + OrmElementCollectionMapping2_0 elementCollectionMapping = (OrmElementCollectionMapping2_0) ormPersistentAttribute.getMapping(); + + Orderable2_0 orderable = ((Orderable2_0) elementCollectionMapping.getOrderable()); + assertEquals(false, orderable.isOrderColumnOrdering()); + assertEquals(true, orderable.isNoOrdering()); + + orderable.setOrderColumnOrdering(true); + OrderColumn2_0 orderColumn = orderable.getOrderColumn(); + assertEquals(true, orderable.isOrderColumnOrdering()); + assertEquals(null, orderColumn.getSpecifiedName()); + assertEquals("addresses_ORDER", orderColumn.getDefaultName()); + assertEquals(TYPE_NAME + "_addresses", orderColumn.getTable()); + + orderColumn.setSpecifiedName("FOO"); + assertEquals("FOO", orderColumn.getSpecifiedName()); + assertEquals("addresses_ORDER", orderColumn.getDefaultName()); + assertEquals(TYPE_NAME + "_addresses", orderColumn.getTable()); + } + + public void testVirtualOrderColumn() throws Exception { + createTestEntityWithGenericBasicElementCollectionMapping(); + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedAttribute(MappingKeys2_0.ELEMENT_COLLECTION_ATTRIBUTE_MAPPING_KEY, "addresses"); + OrmElementCollectionMapping2_0 elementCollectionMapping = (OrmElementCollectionMapping2_0) ormPersistentAttribute.getMapping(); + + Orderable2_0 orderable = ((Orderable2_0) elementCollectionMapping.getOrderable()); + assertEquals(false, orderable.isOrderColumnOrdering()); + assertEquals(true, orderable.isNoOrdering()); + + JavaElementCollectionMapping2_0 javaElementCollectionMapping = (JavaElementCollectionMapping2_0) ormPersistentAttribute.getJavaPersistentAttribute().getMapping(); + ((Orderable2_0) javaElementCollectionMapping.getOrderable()).setOrderColumnOrdering(true); + + assertEquals(false, orderable.isOrderColumnOrdering()); + assertEquals(true, orderable.isNoOrdering()); + + ormPersistentAttribute.makeVirtual(); + ormPersistentAttribute = ormPersistentType.getAttributeNamed("addresses"); + elementCollectionMapping = (OrmElementCollectionMapping2_0) ormPersistentAttribute.getMapping(); + orderable = ((Orderable2_0) elementCollectionMapping.getOrderable()); + assertEquals(true, orderable.isOrderColumnOrdering()); + assertEquals(false, orderable.isNoOrdering()); + assertEquals(TYPE_NAME + "_addresses", orderable.getOrderColumn().getTable()); + assertEquals("addresses_ORDER", orderable.getOrderColumn().getName()); + + ((Orderable2_0) javaElementCollectionMapping.getOrderable()).getOrderColumn().setSpecifiedName("FOO"); + assertEquals(TYPE_NAME + "_addresses", orderable.getOrderColumn().getTable()); + assertEquals("FOO", orderable.getOrderColumn().getName()); + } }
\ No newline at end of file diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java index 978800e372..4fdf3a7886 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmManyToManyMapping2_0Tests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009 Oracle. + * Copyright (c) 2009, 2010 Oracle. * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at @@ -14,12 +14,16 @@ import java.util.Iterator; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.AttributeMapping; +import org.eclipse.jpt.core.context.Entity; import org.eclipse.jpt.core.context.ManyToManyMapping; import org.eclipse.jpt.core.context.PersistentAttribute; import org.eclipse.jpt.core.context.java.JavaManyToManyMapping; import org.eclipse.jpt.core.context.orm.OrmManyToManyMapping; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmPersistentType; +import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; +import org.eclipse.jpt.core.jpa2.context.Orderable2_0; +import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0; import org.eclipse.jpt.core.resource.java.JPA; import org.eclipse.jpt.core.resource.orm.OrmFactory; import org.eclipse.jpt.core.resource.orm.XmlManyToMany; @@ -427,4 +431,199 @@ public class GenericOrmManyToManyMapping2_0Tests assertNull(ormManyToManyMapping.getSpecifiedMapKeyClass()); assertNull(manyToMany.getMapKeyClass()); } + + public void testOrderColumnDefaults() throws Exception { + createTestEntityPrintQueue(); + createTestEntityPrintJob(); + + OrmPersistentType printQueuePersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintQueue"); + OrmPersistentAttribute jobsPersistentAttribute = printQueuePersistentType.addSpecifiedAttribute(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY, "jobs"); + OrmManyToManyMapping jobsMapping = (OrmManyToManyMapping) jobsPersistentAttribute.getMapping(); + jobsMapping.getRelationshipReference().setMappedByJoiningStrategy(); + jobsMapping.getRelationshipReference().getMappedByJoiningStrategy().setMappedByAttribute("queues"); + + OrmPersistentType printJobPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintJob"); + OrmPersistentAttribute queuesPersistentAttribute = printJobPersistentType.addSpecifiedAttribute(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY, "queues"); + OrmManyToManyMapping queuesMapping = (OrmManyToManyMapping) queuesPersistentAttribute.getMapping(); + + getOrmXmlResource().save(null); + Orderable2_0 jobsOrderable = ((Orderable2_0) jobsMapping.getOrderable()); + OrderColumn2_0 jobsOrderColumn = jobsOrderable.getOrderColumn(); + assertEquals(false, jobsOrderable.isOrderColumnOrdering()); + assertEquals(true, jobsOrderable.isNoOrdering()); + Orderable2_0 queuesOrderable = ((Orderable2_0) queuesMapping.getOrderable()); + OrderColumn2_0 queuesOrderColumn = queuesOrderable.getOrderColumn(); + assertEquals(false, queuesOrderable.isOrderColumnOrdering()); + assertEquals(true, queuesOrderable.isNoOrdering()); + + + jobsOrderable.setOrderColumnOrdering(true); + jobsOrderColumn = jobsOrderable.getOrderColumn(); + assertEquals(true, jobsOrderable.isOrderColumnOrdering()); + assertEquals(null, jobsOrderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", jobsOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", jobsOrderColumn.getTable()); + queuesOrderable.setOrderColumnOrdering(true); + queuesOrderColumn = queuesOrderable.getOrderColumn(); + assertEquals(true, queuesOrderable.isOrderColumnOrdering()); + assertEquals(null, queuesOrderColumn.getSpecifiedName()); + assertEquals("queues_ORDER", queuesOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", queuesOrderColumn.getTable()); + + jobsOrderColumn.setSpecifiedName("FOO"); + assertEquals("FOO", jobsOrderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", jobsOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", jobsOrderColumn.getTable()); + queuesOrderColumn.setSpecifiedName("BAR"); + assertEquals("BAR", queuesOrderColumn.getSpecifiedName()); + assertEquals("queues_ORDER", queuesOrderColumn.getDefaultName()); + assertEquals("PrintJob_PrintQueue", queuesOrderColumn.getTable()); + + + ((Entity) printJobPersistentType.getMapping()).getTable().setSpecifiedName("MY_TABLE"); + assertEquals("MY_TABLE_PrintQueue", jobsOrderColumn.getTable()); + assertEquals("MY_TABLE_PrintQueue", queuesOrderColumn.getTable()); + + ((Entity) printQueuePersistentType.getMapping()).getTable().setSpecifiedName("OTHER_TABLE"); + assertEquals("MY_TABLE_OTHER_TABLE", jobsOrderColumn.getTable()); + assertEquals("MY_TABLE_OTHER_TABLE", queuesOrderColumn.getTable()); + + queuesMapping.getRelationshipReference().getJoinTableJoiningStrategy().getJoinTable().setSpecifiedName("MY_JOIN_TABLE"); + assertEquals("MY_JOIN_TABLE", jobsOrderColumn.getTable()); + assertEquals("MY_JOIN_TABLE", queuesOrderColumn.getTable()); + } + + public void testVirtualOrderColumn() throws Exception { + createTestEntityPrintQueue(); + createTestEntityPrintJob(); + + OrmPersistentType printQueuePersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintQueue"); + OrmPersistentAttribute jobsPersistentAttribute = printQueuePersistentType.addSpecifiedAttribute(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY, "jobs"); + OrmManyToManyMapping jobsMapping = (OrmManyToManyMapping) jobsPersistentAttribute.getMapping(); + + OrmPersistentType printJobPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintJob"); + OrmPersistentAttribute queuesPersistentAttribute = printJobPersistentType.addSpecifiedAttribute(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY, "queues"); + OrmManyToManyMapping queuesMapping = (OrmManyToManyMapping) queuesPersistentAttribute.getMapping(); + + Orderable2_0 jobsOrderable = ((Orderable2_0) jobsMapping.getOrderable()); + assertEquals(false, jobsOrderable.isOrderColumnOrdering()); + assertEquals(true, jobsOrderable.isNoOrdering()); + Orderable2_0 queuesOrderable = ((Orderable2_0) queuesMapping.getOrderable()); + assertEquals(false, queuesOrderable.isOrderColumnOrdering()); + assertEquals(true, queuesOrderable.isNoOrdering()); + + JavaManyToManyMapping javaJobsManyToManyMapping = (JavaManyToManyMapping) jobsPersistentAttribute.getJavaPersistentAttribute().getMapping(); + ((Orderable2_0) javaJobsManyToManyMapping.getOrderable()).setOrderColumnOrdering(true); + + assertEquals(false, jobsOrderable.isOrderColumnOrdering()); + assertEquals(true, jobsOrderable.isNoOrdering()); + assertEquals(false, queuesOrderable.isOrderColumnOrdering()); + assertEquals(true, queuesOrderable.isNoOrdering()); + + jobsPersistentAttribute.makeVirtual(); + jobsPersistentAttribute = printQueuePersistentType.getAttributeNamed("jobs"); + jobsMapping = (OrmManyToManyMapping) jobsPersistentAttribute.getMapping(); + jobsOrderable = ((Orderable2_0) jobsMapping.getOrderable()); + assertEquals(true, jobsOrderable.isOrderColumnOrdering()); + assertEquals(false, jobsOrderable.isNoOrdering()); + assertEquals("PrintJob_PrintQueue", jobsOrderable.getOrderColumn().getTable()); + assertEquals("jobs_ORDER", jobsOrderable.getOrderColumn().getName()); + queuesPersistentAttribute.makeVirtual(); + queuesPersistentAttribute = printJobPersistentType.getAttributeNamed("queues"); + queuesMapping = (OrmManyToManyMapping) queuesPersistentAttribute.getMapping(); + queuesOrderable = ((Orderable2_0) queuesMapping.getOrderable()); + assertEquals(true, queuesOrderable.isOrderColumnOrdering()); + assertEquals(false, queuesOrderable.isNoOrdering()); + assertEquals("PrintJob_PrintQueue", queuesOrderable.getOrderColumn().getTable()); + assertEquals("queues_ORDER", queuesOrderable.getOrderColumn().getName()); + + ((Orderable2_0) javaJobsManyToManyMapping.getOrderable()).getOrderColumn().setSpecifiedName("FOO"); + assertEquals("PrintJob_PrintQueue", jobsOrderable.getOrderColumn().getTable()); + assertEquals("FOO", jobsOrderable.getOrderColumn().getName()); + assertEquals("PrintJob_PrintQueue", queuesOrderable.getOrderColumn().getTable()); + assertEquals("queues_ORDER", queuesOrderable.getOrderColumn().getName()); + + JavaManyToManyMapping javaQueuesManyToManyMapping = (JavaManyToManyMapping) queuesPersistentAttribute.getJavaPersistentAttribute().getMapping(); + javaQueuesManyToManyMapping.getRelationshipReference().getJoinTableJoiningStrategy().getJoinTable().setSpecifiedName("JOIN_TABLE"); + assertEquals("JOIN_TABLE", jobsOrderable.getOrderColumn().getTable()); + assertEquals("FOO", jobsOrderable.getOrderColumn().getName()); + assertEquals("JOIN_TABLE", queuesOrderable.getOrderColumn().getTable()); + assertEquals("queues_ORDER", queuesOrderable.getOrderColumn().getName()); + } + + private void createTestEntityPrintQueue() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.MANY_TO_MANY); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA2_0.ORDER_COLUMN); + sb.append(";"); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintQueue").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private String name;").append(CR); + sb.append(CR); + sb.append(" @ManyToMany(mappedBy=\"queues\")").append(CR); + sb.append(" @OrderColumn").append(CR); + sb.append(" private java.util.List<test.PrintJob> jobs;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintQueue.java", sourceWriter); + } + + private void createTestEntityPrintJob() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.MANY_TO_MANY); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA2_0.ORDER_COLUMN); + sb.append(";"); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintJob").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private int id;").append(CR); + sb.append(CR); + sb.append(" @ManyToMany").append(CR); + sb.append(" @OrderColumn").append(CR); + sb.append(" private java.util.List<test.PrintQueue> queues;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintJob.java", sourceWriter); + } } diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java index e3931e1cbe..87afa3bbdb 100644 --- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java +++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2009 Oracle. All rights reserved. +* Copyright (c) 2009, 2010 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -13,6 +13,7 @@ import java.util.Iterator; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jpt.core.MappingKeys; import org.eclipse.jpt.core.context.AttributeMapping; +import org.eclipse.jpt.core.context.Entity; import org.eclipse.jpt.core.context.OneToManyMapping; import org.eclipse.jpt.core.context.PersistentAttribute; import org.eclipse.jpt.core.context.java.JavaOneToManyMapping; @@ -20,9 +21,12 @@ import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.core.context.orm.OrmPersistentType; import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0; +import org.eclipse.jpt.core.jpa2.context.OrderColumn2_0; +import org.eclipse.jpt.core.jpa2.context.Orderable2_0; import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToManyMapping2_0; import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0; import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0; +import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0; import org.eclipse.jpt.core.resource.java.JPA; import org.eclipse.jpt.core.resource.orm.OrmFactory; import org.eclipse.jpt.core.resource.orm.XmlOneToMany; @@ -473,4 +477,144 @@ public class GenericOrmOneToManyMapping2_0Tests assertNull(ormOneToManyMapping.getSpecifiedMapKeyClass()); assertNull(oneToMany.getMapKeyClass()); } + + public void testOrderColumnDefaults() throws Exception { + createTestEntityPrintQueue(); + createTestEntityPrintJob(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintQueue"); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintJob"); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedAttribute(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY, "jobs"); + OrmOneToManyMapping oneToManyMapping = (OrmOneToManyMapping) ormPersistentAttribute.getMapping(); + oneToManyMapping.getRelationshipReference().setMappedByJoiningStrategy(); + oneToManyMapping.getRelationshipReference().getMappedByJoiningStrategy().setMappedByAttribute("queue"); + + Orderable2_0 orderable = ((Orderable2_0) oneToManyMapping.getOrderable()); + assertEquals(false, orderable.isOrderColumnOrdering()); + assertEquals(true, orderable.isNoOrdering()); + + orderable.setOrderColumnOrdering(true); + OrderColumn2_0 orderColumn = orderable.getOrderColumn(); + assertEquals(true, orderable.isOrderColumnOrdering()); + assertEquals(null, orderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", orderColumn.getDefaultName()); + assertEquals("PrintJob", orderColumn.getTable()); + + orderColumn.setSpecifiedName("FOO"); + assertEquals("FOO", orderColumn.getSpecifiedName()); + assertEquals("jobs_ORDER", orderColumn.getDefaultName()); + assertEquals("PrintJob", orderColumn.getTable()); + + OrmPersistentType printJobPersistentType = (OrmPersistentType) getPersistenceUnit().getPersistentType("test.PrintJob"); + ((Entity) printJobPersistentType.getMapping()).getTable().setSpecifiedName("MY_TABLE"); + + assertEquals("MY_TABLE", orderColumn.getTable()); + } + + public void testVirtualOrderColumn() throws Exception { + createTestEntityPrintQueue(); + createTestEntityPrintJob(); + + OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintQueue"); + getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".PrintJob"); + OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedAttribute(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY, "jobs"); + OrmOneToManyMapping oneToManyMapping = (OrmOneToManyMapping) ormPersistentAttribute.getMapping(); + + Orderable2_0 orderable = ((Orderable2_0) oneToManyMapping.getOrderable()); + assertEquals(false, orderable.isOrderColumnOrdering()); + assertEquals(true, orderable.isNoOrdering()); + + JavaOneToManyMapping javaOneToManyMapping = (JavaOneToManyMapping) ormPersistentAttribute.getJavaPersistentAttribute().getMapping(); + ((Orderable2_0) javaOneToManyMapping.getOrderable()).setOrderColumnOrdering(true); + + assertEquals(false, orderable.isOrderColumnOrdering()); + assertEquals(true, orderable.isNoOrdering()); + + ormPersistentAttribute.makeVirtual(); + ormPersistentAttribute = ormPersistentType.getAttributeNamed("jobs"); + oneToManyMapping = (OrmOneToManyMapping) ormPersistentAttribute.getMapping(); + orderable = ((Orderable2_0) oneToManyMapping.getOrderable()); + assertEquals(true, orderable.isOrderColumnOrdering()); + assertEquals(false, orderable.isNoOrdering()); + assertEquals("PrintJob", orderable.getOrderColumn().getTable()); + assertEquals("jobs_ORDER", orderable.getOrderColumn().getName()); + + ((Orderable2_0) javaOneToManyMapping.getOrderable()).getOrderColumn().setSpecifiedName("FOO"); + assertEquals("PrintJob", orderable.getOrderColumn().getTable()); + assertEquals("FOO", orderable.getOrderColumn().getName()); + } + + + private void createTestEntityPrintQueue() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.ONE_TO_MANY); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA2_0.ORDER_COLUMN); + sb.append(";"); + sb.append(CR); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintQueue").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private String name;").append(CR); + sb.append(CR); + sb.append(" @OneToMany(mappedBy=\"queue\")").append(CR); + sb.append(" @OrderColumn").append(CR); + sb.append(" private java.util.List<PrintJob> jobs;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintQueue.java", sourceWriter); + } + + private void createTestEntityPrintJob() 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("import "); + sb.append(JPA.ID); + sb.append(";"); + sb.append(CR); + sb.append("import "); + sb.append(JPA.MANY_TO_ONE); + sb.append(";"); + sb.append(CR); + sb.append("@Entity"); + sb.append(CR); + sb.append("public class ").append("PrintJob").append(" "); + sb.append("{").append(CR); + sb.append(CR); + sb.append(" @Id").append(CR); + sb.append(" private int id;").append(CR); + sb.append(CR); + sb.append(" @ManyToOne").append(CR); + sb.append(" private PrintQueue queue;").append(CR); + sb.append(CR); + sb.append("}").append(CR); + } + }; + this.javaProject.createCompilationUnit(PACKAGE_NAME, "PrintJob.java", sourceWriter); + } + } |