/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.persistence.inheritance.jointable.onetomany;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
/**
* Test an inheritance type of 'joinable' where a OneToMany relationship is used
* to get a parent class.
*/
public class TestJointableOneToMany extends SingleEMFTestCase {
public void setUp() {
setUp(UMLType.class, UMLPrimitiveType.class, UMLClass.class,
UMLPackage.class, UMLNamed.class, CLEAR_TABLES);
initialize();
}
public void initialize() {
EntityManager em = emf.createEntityManager();
try {
UMLPackage aPackage =
em.find(UMLPackage.class, "org.apache.openjpa");
if (null == aPackage) {
EntityTransaction tx = em.getTransaction();
tx.begin();
// Create a UMLPackage
aPackage = new UMLPackage();
aPackage.setId("org.apache.openjpa");
aPackage.setName("org.apache.openjpa");
aPackage.setOwnedType(new ArrayList<UMLType>());
em.persist(aPackage);
// Create a UMLClass and add the UMLPackage to it.
UMLClass aClass = new UMLClass();
aClass.setId("org.apache.openjpa.ATestClass");
aClass.setName("TesClass");
aClass.setOwnerPackage(aPackage);
em.persist(aClass);
// Add UMLClass to UMLPackage
aPackage.getOwnedType().add(aClass);
em.merge(aPackage);
// TODO: temp
// em.persist(aPackage);
// Create a UMLPrimativeType and add UMLPackage to it.
UMLPrimitiveType primitiveType = new UMLPrimitiveType();
primitiveType.setId("String");
primitiveType.setName("String");
primitiveType.setOwnerPackage(aPackage);
em.persist(primitiveType);
// Add UMLPrimativeType to UMLPackage
aPackage.getOwnedType().add(primitiveType);
em.merge(aPackage);
// TODO: temp
// em.persist(aPackage);
tx.commit();
}
} finally {
em.close();
}
}
public void test() {
EntityManager em = emf.createEntityManager();
try {
// Verify the Class exists, and that from it we can get the Package.
UMLClass aClass =
em.find(UMLClass.class, "org.apache.openjpa.ATestClass");
assertNotNull(aClass);
assertEquals("org.apache.openjpa", aClass.getOwnerPackage()
.getName());
// Verify the PrimitiveType exists, and that from it we can get the
// Package.
UMLPrimitiveType aPrimitiveType =
em.find(UMLPrimitiveType.class, "String");
assertNotNull(aPrimitiveType);
assertEquals("org.apache.openjpa", aPrimitiveType.getOwnerPackage()
.getName());
// Verify the Package exists.
UMLPackage aPackage =
em.find(UMLPackage.class, "org.apache.openjpa");
assertNotNull(aPackage);
// From the Package, lets get the Type.....there should be two
// Types (i.e. a UMLClass and UMLPrimativeTYpe), but 0 is returned!
List<UMLType> ownedType = aPackage.getOwnedType();
assertNotNull(ownedType);
assertEquals(2, ownedType.size());
} finally {
em.close();
}
}
}