| /******************************************************************************* |
| * Copyright (c) 2008 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.BasicMapping; |
| import org.eclipse.jpt.core.context.IdMapping; |
| 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.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; |
| |
| public class OrmPersistentAttributeTests extends ContextModelTestCase |
| { |
| public OrmPersistentAttributeTests(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); |
| xmlPersistenceUnit().getMappingFiles().add(mappingFileRef); |
| persistenceResource().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 = entityMappings().addOrmPersistentType(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 = entityMappings().addOrmPersistentType(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 = entityMappings().addOrmPersistentType(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 = entityMappings().addOrmPersistentType(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 = entityMappings().addOrmPersistentType(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 = entityMappings().addOrmPersistentType(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()); |
| } |
| } |