| /******************************************************************************* |
| * Copyright (c) 2008, 2009 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.orm; |
| |
| import java.util.Iterator; |
| import java.util.ListIterator; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jpt.core.JptCorePlugin; |
| import org.eclipse.jpt.core.MappingKeys; |
| import org.eclipse.jpt.core.context.AccessType; |
| import org.eclipse.jpt.core.context.BasicMapping; |
| import org.eclipse.jpt.core.context.IdMapping; |
| import org.eclipse.jpt.core.context.java.JavaPersistentAttribute; |
| import org.eclipse.jpt.core.context.java.JavaPersistentType; |
| import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; |
| import org.eclipse.jpt.core.context.orm.OrmPersistentType; |
| import org.eclipse.jpt.core.internal.context.orm.GenericOrmIdMapping; |
| import org.eclipse.jpt.core.internal.context.orm.GenericOrmNullAttributeMapping; |
| import org.eclipse.jpt.core.internal.context.orm.GenericOrmOneToOneMapping; |
| import org.eclipse.jpt.core.resource.java.JPA; |
| import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute; |
| import org.eclipse.jpt.core.resource.persistence.PersistenceFactory; |
| import org.eclipse.jpt.core.resource.persistence.XmlMappingFileRef; |
| import org.eclipse.jpt.core.tests.internal.context.ContextModelTestCase; |
| import org.eclipse.jpt.utility.internal.iterators.ArrayIterator; |
| |
| @SuppressWarnings("nls") |
| public class GenericOrmPersistentAttributeTests extends ContextModelTestCase |
| { |
| public GenericOrmPersistentAttributeTests(String name) { |
| super(name); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| XmlMappingFileRef mappingFileRef = PersistenceFactory.eINSTANCE.createXmlMappingFileRef(); |
| mappingFileRef.setFileName(JptCorePlugin.DEFAULT_ORM_XML_FILE_PATH); |
| getXmlPersistenceUnit().getMappingFiles().add(mappingFileRef); |
| getPersistenceXmlResource().save(null); |
| } |
| |
| private ICompilationUnit createTestTypeNullAttributeMapping() throws Exception { |
| |
| return this.createTestType(new DefaultAnnotationWriter() { |
| @Override |
| public void appendIdFieldAnnotationTo(StringBuilder sb) { |
| sb.append(CR); |
| sb.append(" private Address address;").append(CR); |
| sb.append(CR); |
| } |
| }); |
| } |
| |
| private ICompilationUnit createTestEntityIdMapping() throws Exception { |
| return this.createTestType(new DefaultAnnotationWriter() { |
| @Override |
| public Iterator<String> imports() { |
| return new ArrayIterator<String>(JPA.ENTITY, JPA.ID, JPA.COLUMN); |
| } |
| @Override |
| public void appendTypeAnnotationTo(StringBuilder sb) { |
| sb.append("@Entity"); |
| } |
| @Override |
| public void appendIdFieldAnnotationTo(StringBuilder sb) { |
| sb.append("@Id"); |
| sb.append("@Column(name=\"FOO\")"); |
| } |
| }); |
| } |
| |
| private ICompilationUnit createTestEntityOneToOneMapping() throws Exception { |
| return this.createTestType(new DefaultAnnotationWriter() { |
| @Override |
| public Iterator<String> imports() { |
| return new ArrayIterator<String>(JPA.ENTITY, JPA.ONE_TO_ONE); |
| } |
| @Override |
| public void appendTypeAnnotationTo(StringBuilder sb) { |
| sb.append("@Entity"); |
| } |
| @Override |
| public void appendIdFieldAnnotationTo(StringBuilder sb) { |
| sb.append("@OneToOne"); |
| sb.append(" private Address address;"); |
| } |
| }); |
| } |
| |
| public void testMakeSpecified() throws Exception { |
| createTestType(); |
| OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); |
| |
| assertEquals(2, ormPersistentType.virtualAttributesSize()); |
| |
| OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| assertEquals("id", ormPersistentAttribute.getName()); |
| assertTrue(ormPersistentAttribute.isVirtual()); |
| ormPersistentAttribute.makeSpecified(); |
| |
| assertEquals(1, ormPersistentType.virtualAttributesSize()); |
| assertEquals(1, ormPersistentType.specifiedAttributesSize()); |
| OrmPersistentAttribute specifiedOrmPersistentAttribute = ormPersistentType.specifiedAttributes().next(); |
| assertEquals("id", specifiedOrmPersistentAttribute.getName()); |
| assertFalse(specifiedOrmPersistentAttribute.isVirtual()); |
| |
| ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| ormPersistentAttribute.makeSpecified(); |
| |
| assertEquals(0, ormPersistentType.virtualAttributesSize()); |
| assertEquals(2, ormPersistentType.specifiedAttributesSize()); |
| ListIterator<OrmPersistentAttribute> specifiedAttributes = ormPersistentType.specifiedAttributes(); |
| specifiedOrmPersistentAttribute = specifiedAttributes.next(); |
| assertEquals("id", specifiedOrmPersistentAttribute.getName()); |
| assertFalse(specifiedOrmPersistentAttribute.isVirtual()); |
| |
| specifiedOrmPersistentAttribute = specifiedAttributes.next(); |
| assertEquals("name", specifiedOrmPersistentAttribute.getName()); |
| assertFalse(specifiedOrmPersistentAttribute.isVirtual()); |
| } |
| |
| public void testMakeSpecifiedMappingKey() throws Exception { |
| createTestTypeNullAttributeMapping(); |
| OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); |
| |
| assertEquals(3, ormPersistentType.virtualAttributesSize()); |
| |
| //take a virtual mapping with a mapping type and make it specified |
| OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| assertEquals("address", ormPersistentAttribute.getName()); |
| assertTrue(ormPersistentAttribute.isVirtual()); |
| assertTrue(ormPersistentAttribute.getMapping() instanceof GenericOrmNullAttributeMapping); |
| ormPersistentAttribute.makeSpecified(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY); |
| |
| assertEquals(2, ormPersistentType.virtualAttributesSize()); |
| assertEquals(1, ormPersistentType.specifiedAttributesSize()); |
| OrmPersistentAttribute specifiedOrmPersistentAttribute = ormPersistentType.specifiedAttributes().next(); |
| assertEquals("address", specifiedOrmPersistentAttribute.getName()); |
| assertFalse(specifiedOrmPersistentAttribute.isVirtual()); |
| assertTrue(specifiedOrmPersistentAttribute.getMapping() instanceof GenericOrmOneToOneMapping); |
| |
| |
| ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| ormPersistentAttribute.makeSpecified(MappingKeys.ID_ATTRIBUTE_MAPPING_KEY); |
| |
| assertEquals(1, ormPersistentType.virtualAttributesSize()); |
| assertEquals(2, ormPersistentType.specifiedAttributesSize()); |
| ListIterator<OrmPersistentAttribute> specifiedAttributes = ormPersistentType.specifiedAttributes(); |
| |
| specifiedOrmPersistentAttribute = specifiedAttributes.next(); |
| assertEquals("id", specifiedOrmPersistentAttribute.getName()); |
| assertFalse(specifiedOrmPersistentAttribute.isVirtual()); |
| assertTrue(specifiedOrmPersistentAttribute.getMapping() instanceof GenericOrmIdMapping); |
| |
| specifiedOrmPersistentAttribute = specifiedAttributes.next(); |
| assertEquals("address", specifiedOrmPersistentAttribute.getName()); |
| assertFalse(specifiedOrmPersistentAttribute.isVirtual()); |
| } |
| |
| public void testMakeVirtual() throws Exception { |
| createTestType(); |
| OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); |
| |
| assertEquals(2, ormPersistentType.virtualAttributesSize()); |
| |
| ormPersistentType.virtualAttributes().next().makeSpecified(); |
| ormPersistentType.virtualAttributes().next().makeSpecified(); |
| |
| assertEquals(0, ormPersistentType.virtualAttributesSize()); |
| assertEquals(2, ormPersistentType.specifiedAttributesSize()); |
| OrmPersistentAttribute specifiedOrmPersistentAttribute = ormPersistentType.specifiedAttributes().next(); |
| assertEquals("id", specifiedOrmPersistentAttribute.getName()); |
| assertFalse(specifiedOrmPersistentAttribute.isVirtual()); |
| |
| specifiedOrmPersistentAttribute.makeVirtual(); |
| assertEquals(1, ormPersistentType.virtualAttributesSize()); |
| assertEquals(1, ormPersistentType.specifiedAttributesSize()); |
| |
| specifiedOrmPersistentAttribute = ormPersistentType.specifiedAttributes().next(); |
| specifiedOrmPersistentAttribute.makeVirtual(); |
| assertEquals(2, ormPersistentType.virtualAttributesSize()); |
| assertEquals(0, ormPersistentType.specifiedAttributesSize()); |
| |
| ListIterator<OrmPersistentAttribute> virtualAttributes = ormPersistentType.virtualAttributes(); |
| OrmPersistentAttribute virtualAttribute = virtualAttributes.next(); |
| assertEquals("id", virtualAttribute.getName()); |
| virtualAttribute = virtualAttributes.next(); |
| assertEquals("name", virtualAttribute.getName()); |
| } |
| |
| public void testMakeVirtualNoUnderlyingJavaAttribute() throws Exception { |
| createTestType(); |
| OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); |
| |
| assertEquals(2, ormPersistentType.virtualAttributesSize()); |
| |
| ormPersistentType.virtualAttributes().next().makeSpecified(); |
| ormPersistentType.virtualAttributes().next().makeSpecified(); |
| |
| |
| ormPersistentType.specifiedAttributes().next().getMapping().setName("noJavaAttribute"); |
| assertEquals(1, ormPersistentType.virtualAttributesSize()); |
| assertEquals(2, ormPersistentType.specifiedAttributesSize()); |
| |
| |
| OrmPersistentAttribute specifiedOrmPersistentAttribute = ormPersistentType.specifiedAttributes().next(); |
| specifiedOrmPersistentAttribute.makeVirtual(); |
| assertEquals(1, ormPersistentType.virtualAttributesSize()); |
| assertEquals(1, ormPersistentType.specifiedAttributesSize()); |
| |
| assertEquals("id", ormPersistentType.virtualAttributes().next().getName()); |
| assertEquals("name", ormPersistentType.specifiedAttributes().next().getName()); |
| } |
| |
| public void testVirtualMappingTypeWhenMetadataComplete() throws Exception { |
| createTestEntityIdMapping(); |
| OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); |
| |
| OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| assertEquals("id", ormPersistentAttribute.getName()); |
| assertEquals(MappingKeys.ID_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); |
| assertEquals("FOO", ((IdMapping) ormPersistentAttribute.getMapping()).getColumn().getName()); |
| |
| |
| ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); |
| |
| ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| assertEquals("id", ormPersistentAttribute.getName()); |
| assertEquals(MappingKeys.BASIC_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); |
| assertEquals("id", ((BasicMapping) ormPersistentAttribute.getMapping()).getColumn().getName()); |
| } |
| |
| public void testVirtualMappingTypeWhenMetadataComplete2() throws Exception { |
| createTestEntityOneToOneMapping(); |
| OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); |
| |
| OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| assertEquals("address", ormPersistentAttribute.getName()); |
| assertEquals(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); |
| |
| |
| ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); |
| |
| ormPersistentAttribute = ormPersistentType.virtualAttributes().next(); |
| assertEquals("address", ormPersistentAttribute.getName()); |
| assertEquals(MappingKeys.NULL_ATTRIBUTE_MAPPING_KEY, ormPersistentAttribute.getMappingKey()); |
| } |
| |
| public void testGetJavaPersistentAttribute() throws Exception { |
| createTestEntityIdMapping(); |
| OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); |
| JavaPersistentType javaPersistentType = ormPersistentType.getJavaPersistentType(); |
| |
| OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.getAttributeNamed("id"); |
| JavaPersistentAttribute javaPersistentAttribute = javaPersistentType.getAttributeNamed("id"); |
| |
| //virtual orm attribute, access type matches java : FIELD, name matches java |
| assertTrue(ormPersistentAttribute.isVirtual()); |
| assertNotSame(javaPersistentAttribute, ormPersistentAttribute.getJavaPersistentAttribute()); |
| assertEquals(AccessType.FIELD, javaPersistentAttribute.getAccess()); |
| JavaResourcePersistentAttribute javaResourcePersistentAttribute = ormPersistentAttribute.getJavaPersistentAttribute().getResourcePersistentAttribute(); |
| assertTrue(javaResourcePersistentAttribute.isField()); |
| assertEquals("id", javaResourcePersistentAttribute.getName()); |
| assertEquals(javaPersistentType.getResourcePersistentType().persistableFields().next(), javaResourcePersistentAttribute); |
| |
| |
| //specified orm attribute, access type matches java : FIELD, name matches java |
| //javaPersistentAttribute should be == to java context model object |
| ormPersistentAttribute.makeSpecified(); |
| ormPersistentAttribute = ormPersistentType.getAttributeNamed("id"); |
| assertFalse(ormPersistentAttribute.isVirtual()); |
| assertEquals(javaPersistentAttribute, ormPersistentAttribute.getJavaPersistentAttribute()); |
| |
| |
| //virtual orm attribute, java access type FIELD, orm access type PROPERTY, name matches java |
| //verify the property java resource persistent attribute is used in orm. |
| ormPersistentAttribute.makeVirtual(); |
| ormPersistentAttribute = ormPersistentType.getAttributeNamed("id"); |
| ormPersistentType.setSpecifiedAccess(AccessType.PROPERTY); |
| assertNotSame(ormPersistentAttribute, ormPersistentType.getAttributeNamed("id")); |
| ormPersistentAttribute = ormPersistentType.getAttributeNamed("id"); |
| assertNotSame(javaPersistentAttribute, ormPersistentAttribute.getJavaPersistentAttribute()); |
| assertEquals(AccessType.FIELD, javaPersistentAttribute.getAccess()); |
| assertEquals(AccessType.PROPERTY, ormPersistentAttribute.getJavaPersistentAttribute().getAccess()); |
| javaResourcePersistentAttribute = ormPersistentAttribute.getJavaPersistentAttribute().getResourcePersistentAttribute(); |
| assertTrue(javaResourcePersistentAttribute.isProperty()); |
| assertEquals("id", javaResourcePersistentAttribute.getName()); |
| assertEquals(javaPersistentType.getResourcePersistentType().persistableProperties().next(), javaResourcePersistentAttribute); |
| |
| |
| ormPersistentType.setSpecifiedAccess(null);//default access will be field |
| ormPersistentAttribute = ormPersistentType.getAttributeNamed("id"); |
| ormPersistentAttribute.makeSpecified(); |
| ormPersistentAttribute = ormPersistentType.getAttributeNamed("id"); |
| ormPersistentAttribute.getMapping().setName("id2"); |
| assertEquals(null, ormPersistentAttribute.getJavaPersistentAttribute()); |
| |
| ormPersistentAttribute.getMapping().setName(null); |
| assertEquals(null, ormPersistentAttribute.getJavaPersistentAttribute()); |
| |
| ormPersistentAttribute.getMapping().setName("id"); |
| assertEquals(javaPersistentAttribute, ormPersistentAttribute.getJavaPersistentAttribute()); |
| |
| |
| ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE); |
| assertEquals(javaPersistentAttribute, ormPersistentAttribute.getJavaPersistentAttribute()); |
| } |
| } |