blob: e5bea2aeeaec7e07706b3f5a99a059701615a66b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 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.jpa.eclipselink.core.tests.internal.context.orm;
import java.util.Iterator;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jpt.common.utility.internal.iterators.ArrayIterator;
import org.eclipse.jpt.jpa.core.MappingKeys;
import org.eclipse.jpt.jpa.core.resource.java.JPA;
import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkAccessType;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm.OrmEclipseLinkPersistentType;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.EclipseLinkOrmFactory;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlAccessMethodsHolder;
import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.context.EclipseLink2_1ContextModelTestCase;
@SuppressWarnings("nls")
public class EclipseLink2_1OrmPersistentTypeTests
extends EclipseLink2_1ContextModelTestCase
{
public EclipseLink2_1OrmPersistentTypeTests(String name) {
super(name);
}
private ICompilationUnit createTestEntity() 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");
}
});
}
public void testUpdateSpecifiedGetMethod() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
//set getMethod in the resource model, verify context model updated
xmlAccessMethodsHolder.setAccessMethods(EclipseLinkOrmFactory.eINSTANCE.createXmlAccessMethods());
xmlAccessMethodsHolder.getAccessMethods().setGetMethod("getFoo");
assertEquals("getFoo", ormPersistentType.getSpecifiedGetMethod());
assertEquals("getFoo", xmlAccessMethodsHolder.getAccessMethods().getGetMethod());
//set getMethod to null in the resource model
xmlAccessMethodsHolder.getAccessMethods().setGetMethod(null);
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods().getGetMethod());
}
public void testModifySpecifiedGetMethod() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
//set getMethod in the context model, verify resource model modified
ormPersistentType.setSpecifiedGetMethod("getMe");
assertEquals("getMe", ormPersistentType.getSpecifiedGetMethod());
assertEquals("getMe", xmlAccessMethodsHolder.getAccessMethods().getGetMethod());
//set getMethod to null in the context model
ormPersistentType.setSpecifiedGetMethod(null);
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
}
public void testModifySpecifiedGetMethod2() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
//set getMethod in the context model, verify resource model modified
ormPersistentType.setSpecifiedGetMethod("getMe");
assertEquals("getMe", ormPersistentType.getGetMethod());
assertEquals("getMe", xmlAccessMethodsHolder.getAccessMethods().getGetMethod());
//set another element on the access-methods element so it doesn't get removed
xmlAccessMethodsHolder.getAccessMethods().setSetMethod("setMe");
//set getMethod to null in the context model
ormPersistentType.setSpecifiedGetMethod(null);
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods().getGetMethod());
}
//TODO default from super class, default from mapped super class, what about a default on an embeddable?
//default from persistence-unit-defaults, default from entity-mappings, default from java entity
public void testGetDefaultGetMethod() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertNull(ormPersistentType.getGetMethod());
assertNull(ormPersistentType.getDefaultGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
ormPersistentType.setSpecifiedAccess(EclipseLinkAccessType.VIRTUAL);
assertNull(ormPersistentType.getSpecifiedGetMethod());
assertEquals("get", ormPersistentType.getGetMethod());
assertEquals("get", ormPersistentType.getDefaultGetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
getPersistenceUnitDefaults().setSpecifiedGetMethod("getFoo");
assertEquals("getFoo", ormPersistentType.getDefaultGetMethod());
assertEquals("getFoo", ormPersistentType.getGetMethod());
ormPersistentType.setSpecifiedGetMethod("getBar");
assertEquals("getFoo", ormPersistentType.getDefaultGetMethod());
assertEquals("getBar", ormPersistentType.getGetMethod());
getPersistenceUnitDefaults().setSpecifiedGetMethod(null);
assertEquals("get", ormPersistentType.getDefaultGetMethod());
assertEquals("getBar", ormPersistentType.getGetMethod());
ormPersistentType.setSpecifiedAccess(null);
assertNull(ormPersistentType.getDefaultGetMethod());
}
public void testUpdateSpecifiedSetMethod() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
//set setMethod in the resource model, verify context model updated
xmlAccessMethodsHolder.setAccessMethods(EclipseLinkOrmFactory.eINSTANCE.createXmlAccessMethods());
xmlAccessMethodsHolder.getAccessMethods().setSetMethod("setFoo");
assertEquals("setFoo", ormPersistentType.getSpecifiedSetMethod());
assertEquals("setFoo", xmlAccessMethodsHolder.getAccessMethods().getSetMethod());
//set setMethod to null in the resource model
xmlAccessMethodsHolder.getAccessMethods().setSetMethod(null);
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods().getSetMethod());
}
public void testModifySpecifiedSetMethod() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
//set setMethod in the context model, verify resource model modified
ormPersistentType.setSpecifiedSetMethod("setMe");
assertEquals("setMe", ormPersistentType.getSpecifiedSetMethod());
assertEquals("setMe", xmlAccessMethodsHolder.getAccessMethods().getSetMethod());
//set setMethod to null in the context model
ormPersistentType.setSpecifiedSetMethod(null);
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
}
public void testModifySpecifiedSetMethod2() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
//set setMethod in the context model, verify resource model modified
ormPersistentType.setSpecifiedSetMethod("setMe");
assertEquals("setMe", ormPersistentType.getSetMethod());
assertEquals("setMe", xmlAccessMethodsHolder.getAccessMethods().getSetMethod());
//set another element on the access-methods element so it doesn't get removed
xmlAccessMethodsHolder.getAccessMethods().setGetMethod("getMe");
//set setMethod to null in the context model
ormPersistentType.setSpecifiedSetMethod(null);
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods().getSetMethod());
}
//TODO default from super class, default from mapped super class, what about a default on an embeddable?
//default from persistence-unit-defaults, default from entity-mappings, default from java entity
public void testGetDefaultSetMethod() throws Exception {
createTestEntity();
OrmEclipseLinkPersistentType ormPersistentType = (OrmEclipseLinkPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
XmlAccessMethodsHolder xmlAccessMethodsHolder = (XmlAccessMethodsHolder) ormPersistentType.getMapping().getXmlTypeMapping();
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertNull(ormPersistentType.getSetMethod());
assertNull(ormPersistentType.getDefaultSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
ormPersistentType.setSpecifiedAccess(EclipseLinkAccessType.VIRTUAL);
assertNull(ormPersistentType.getSpecifiedSetMethod());
assertEquals("set", ormPersistentType.getSetMethod());
assertEquals("set", ormPersistentType.getDefaultSetMethod());
assertNull(xmlAccessMethodsHolder.getAccessMethods());
getPersistenceUnitDefaults().setSpecifiedSetMethod("setFoo");
assertEquals("setFoo", ormPersistentType.getDefaultSetMethod());
assertEquals("setFoo", ormPersistentType.getSetMethod());
ormPersistentType.setSpecifiedSetMethod("setBar");
assertEquals("setFoo", ormPersistentType.getDefaultSetMethod());
assertEquals("setBar", ormPersistentType.getSetMethod());
getPersistenceUnitDefaults().setSpecifiedSetMethod(null);
assertEquals("set", ormPersistentType.getDefaultSetMethod());
assertEquals("setBar", ormPersistentType.getSetMethod());
ormPersistentType.setSpecifiedAccess(null);
assertNull(ormPersistentType.getDefaultSetMethod());
}
protected EclipseLinkPersistenceUnitDefaults getPersistenceUnitDefaults() {
return(EclipseLinkPersistenceUnitDefaults) getEntityMappings().getPersistenceUnitMetadata().getPersistenceUnitDefaults();
}
}