blob: 03cdf9a1303a481cfd87e73bcac63c971803b4ab [file] [log] [blame]
/*
* 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.jdbc.kernel;
import java.util.*;
import org.apache.openjpa.persistence.jdbc.common.apps.*;
import org.apache.openjpa.persistence.common.utils.*;
import java.lang.annotation.Annotation;
import junit.framework.*;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
import org.apache.openjpa.jdbc.sql.DBDictionary;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
public class TestOperationOrderUpdateManager
extends AbstractTestCase {
// private boolean = true;//Boolean.valueOf(bool);
private static boolean _mapped = false;
private EntityManagerFactory emf;
/*protected boolean skipTest() {
if (!getName().startsWith("testAuto"))
return false;
emf = getEmf();
JDBCConfiguration conf = (JDBCConfiguration) ((OpenJPAEntityManagerFactorySPI) OpenJPAPersistence.cast(emf)).getConfiguration();
DBDictionary dict = conf.getDBDictionaryInstance();
return !dict.supportsAutoAssign;
}
*/
public TestOperationOrderUpdateManager(String name)
{
super(name);
}
private void insertTest(boolean autoAssign) {
OpOrder oid = (autoAssign) ? insertAutoAssign() : insert();
EntityManager em = currentEntityManager();
OpOrder pc = (OpOrder) em.find(OpOrder.class,oid.getId());
assertEquals("pc", pc.getSecondary());
assertEquals("pcsub", pc.getSub());
assertNotNull(pc.getRel());
assertEquals("rel", pc.getRel().getSecondary());
assertEquals(2, pc.getRelList().size());
assertTrue(((OpOrder) pc.getRelList().iterator().next()).
getSecondary().startsWith("child"));
assertEquals(2, pc.getMappedRelList().size());
assertTrue(((OpOrder) pc.getMappedRelList().iterator().next()).
getSecondary().startsWith("mapped"));
assertEquals(2, pc.getInverseKeyRelList().size());
assertTrue(((OpOrder) pc.getInverseKeyRelList().iterator().
next()).getSecondary().startsWith("inverse"));
em.close();
}
private OpOrder insert() {
OpOrderPCSub pc = new OpOrderPCSub();
pc.setSecondary("pc");
pc.setSub("pcsub");
OpOrderPCSub rel = new OpOrderPCSub();
rel.setSecondary("rel");
pc.setRel(rel);
for (int i = 0; i < 2; i++) {
OpOrderPCSub child = new OpOrderPCSub();
child.setSecondary("child" + i);
pc.getRelList().add(child);
OpOrderPCSub mapped = new OpOrderPCSub();
mapped.setSecondary("mapped" + i);
mapped.setOwner(pc);
pc.getMappedRelList().add(mapped);
OpOrderPCSub inverse = new OpOrderPCSub();
inverse.setSecondary("inverse" + i);
pc.getInverseKeyRelList().add(inverse);
}
EntityManager em = currentEntityManager();
startTx(em);
em.persist(rel);
persistAll(em,pc.getInverseKeyRelList());
em.persist(pc);
endTx(em);
OpOrder oid = em.find(OpOrder.class,pc.getId());
//em.getObjectId(pc);
em.close();
return oid;
}
private OpOrder insertAutoAssign() {
AutoIncrementOpOrderPCSub pc = new AutoIncrementOpOrderPCSub();
pc.setSecondary("pc");
pc.setSub("pcsub");
AutoIncrementOpOrderPCSub rel = new AutoIncrementOpOrderPCSub();
rel.setSecondary("rel");
pc.setRel(rel);
for (int i = 0; i < 2; i++) {
AutoIncrementOpOrderPCSub child = new AutoIncrementOpOrderPCSub();
child.setSecondary("child" + i);
pc.getRelList().add(child);
AutoIncrementOpOrderPCSub mapped = new AutoIncrementOpOrderPCSub();
mapped.setSecondary("mapped" + i);
mapped.setOwner(pc);
pc.getMappedRelList().add(mapped);
AutoIncrementOpOrderPCSub inverse = new AutoIncrementOpOrderPCSub();
inverse.setSecondary("inverse" + i);
pc.getInverseKeyRelList().add(inverse);
}
EntityManager em = currentEntityManager();
startTx(em);
em.persist(rel);
persistAll(em,pc.getInverseKeyRelList());
em.persist(pc);
endTx(em);
OpOrder oid = em.find(AutoIncrementOpOrderPCSub.class,pc.getId());
em.close();
return oid;
}
private void insertCircularConstraintTest(boolean autoAssign) {
OpOrder oid = (autoAssign) ? insertCircularAutoAssign()
: insertCircular();
EntityManager em = currentEntityManager();
OpOrder pc1 = (OpOrder) em.find(OpOrder.class,oid.getId());
assertEquals("pc1", pc1.getSecondary());
assertNotNull(pc1.getRel());
assertEquals("pc2", pc1.getRel().getSecondary());
assertNotNull(pc1.getRel().getRel());
assertEquals(pc1, pc1.getRel().getRel());
em.close();
}
private OpOrder insertCircular() {
OpOrderPCSub pc1 = new OpOrderPCSub();
pc1.setSecondary("pc1");
pc1.setSub("pcsub");
OpOrderPCSub pc2 = new OpOrderPCSub();
pc2.setSecondary("pc2");
pc1.setRel(pc2);
pc2.setRel(pc1);
EntityManager em = currentEntityManager();
startTx(em);
em.persist(pc1);
em.persist(pc2);
endTx(em);
OpOrder oid = em.find(OpOrder.class,pc1.getId());
em.close();
return oid;
}
private OpOrder insertCircularAutoAssign() {
AutoIncrementOpOrderPCSub pc1 = new AutoIncrementOpOrderPCSub();
pc1.setSecondary("pc1");
pc1.setSub("pcsub");
AutoIncrementOpOrderPCSub pc2 = new AutoIncrementOpOrderPCSub();
pc2.setSecondary("pc2");
pc1.setRel(pc2);
pc2.setRel(pc1);
EntityManager em = currentEntityManager();
startTx(em);
em.persist(pc1);
em.persist(pc2);
endTx(em);
OpOrder oid = em.find(OpOrder.class,pc1.getId());
em.close();
return oid;
}
private void deleteCircularTest(boolean autoAssign) {
OpOrder oid = (autoAssign) ? insertCircularAutoAssign()
: insertCircular();
EntityManager em = currentEntityManager();
startTx(em);
OpOrder pc1 = (OpOrder) em.find(OpOrder.class,oid.getId());
em.remove(pc1.getRel());
em.remove(pc1);
endTx(em);
em.close();
/* pm = _pmf.getPersistenceManager();
if (autoAssign)
assertEquals(0, ((KodoExtent) pm.getExtent
(AutoIncrementOpOrderPCSub.class, true)).list().size());
else
assertEquals(0, ((KodoExtent) pm.getExtent(OpOrderPC.class,
true)).list().size());
pm.close();
*/
}
private void deleteTest(boolean autoAssign) {
OpOrder oid = (autoAssign) ? insertAutoAssign() : insert();
EntityManager em = currentEntityManager();
startTx(em);
OpOrder pc = (OpOrder) em.find(OpOrder.class,oid.getId());
removeAll(em,pc.getMappedRelList());
removeAll(em,pc.getInverseKeyRelList());
removeAll(em,pc.getRelList());
em.remove(pc.getRel());
em.remove(pc);
endTx(em);
em.close();
/*
pm = _pmf.getPersistenceManager();
if (autoAssign)
assertEquals(0, ((KodoExtent) pm.getExtent
(AutoIncrementOpOrderPCSub.class, true)).list().size());
else
assertEquals(0, ((KodoExtent) pm.getExtent(OpOrderPC.class,
true)).list().size());
pm.close();
*/
}
public void testInsert() {
insertTest(false);
}
public void testAutoAssignInsert() {
insertTest(true);
}
public void testDeleteCircular() {
deleteCircularTest(false);
}
public void testAutoAssignDeleteCircular() {
deleteCircularTest(true);
}
public void testDelete() {
deleteTest(false);
}
public void testAutoAssignDelete() {
deleteTest(true);
}
public void testInsertCircularConstraint() {
insertCircularConstraintTest(false);
}
public void testAutoAssignInsertCircularConstraint() {
insertCircularConstraintTest(true);
}
private void persistAll(EntityManager em, List list) {
Iterator i = list.iterator();
while(i.hasNext()) {
Object o = i.next();
em.persist(o);
}
}
private void removeAll(EntityManager em, List list) {
Iterator i = list.iterator();
while(i.hasNext()) {
Object o = i.next();
em.remove(o);
}
}
}