package org.compass.core.test.inheritance;
import org.compass.core.CompassSession;
import org.compass.core.CompassTransaction;
import org.compass.core.mapping.AliasMapping;
import org.compass.core.mapping.CompassMapping;
import org.compass.core.mapping.ResourcePropertyMapping;
import org.compass.core.mapping.osem.ClassMapping;
import org.compass.core.mapping.osem.RefAliasObjectMapping;
import org.compass.core.spi.InternalCompass;
import org.compass.core.spi.InternalCompassSession;
import org.compass.core.test.AbstractTestCase;
public class PolyCollectionTests extends AbstractTestCase {
protected String[] getMappings() {
return new String[]{"inheritance/PolyCollection.cpm.xml"};
}
public void testClassBasedRefAliasIdentification() {
CompassMapping compassMapping = ((InternalCompass) getCompass()).getMapping();
ClassMapping classMapping = (ClassMapping) compassMapping.getMappingByAlias("cComponentNoRefAlias");
assertEquals(2, ((RefAliasObjectMapping) classMapping.getMapping("a")).getRefAliases().length);
}
public void testPolyComponentCollection() throws Exception {
CompassMapping compassMapping = ((InternalCompass) getCompass()).getMapping();
AliasMapping aliasMapping = compassMapping.getAliasMapping("polybase");
assertEquals(1, aliasMapping.getExtendingAliases().length);
aliasMapping = compassMapping.getAliasMapping("contract");
assertEquals(2, aliasMapping.getExtendingAliases().length);
InternalCompassSession session = (InternalCompassSession) openSession();
CompassTransaction tr = session.beginTransaction();
CompassMapping mapping = session.getMapping();
ClassMapping bComponent = (ClassMapping) mapping.getRootMappingByAlias("bComponent");
ResourcePropertyMapping rpMapping = bComponent.getResourcePropertyMappingByDotPath("a.value");
assertNotNull(rpMapping);
// this mvalue is shared between polybase and polyextends, so there should not be
// an internal id
assertEquals("mvalue", rpMapping.getName());
assertEquals("mvalue", rpMapping.getPath().getPath());
rpMapping = bComponent.getResourcePropertyMappingByDotPath("a.value.mvalue");
assertNotNull(rpMapping);
assertEquals("bComponent", rpMapping.getRootAlias());
assertEquals("mvalue", rpMapping.getName());
assertEquals("mvalue", rpMapping.getPath().getPath());
rpMapping = bComponent.getResourcePropertyMappingByDotPath("a.extendsValue");
assertEquals("bComponent", rpMapping.getRootAlias());
assertNotNull(rpMapping);
assertEquals("mextendsValue", rpMapping.getName());
assertEquals("mextendsValue", rpMapping.getPath().getPath()); // no internal id needed
rpMapping = bComponent.getResourcePropertyMappingByDotPath("a.extendsValue.mextendsValue");
assertNotNull(rpMapping);
assertEquals("bComponent", rpMapping.getRootAlias());
assertEquals("mextendsValue", rpMapping.getName());
assertEquals("mextendsValue", rpMapping.getPath().getPath());
B b = new B();
b.id = 1;
Long id = new Long(1);
ExtendsA extendsA = new ExtendsA();
extendsA.setId(id);
extendsA.setValue("value");
extendsA.setExtendsValue("evalue");
extendsA.setD(new D("edvalue"));
b.a.add(extendsA);
id = new Long(2);
BaseA base = new BaseA();
base.setId(id);
base.setValue("baseValue");
base.setD(new D("bdvalue"));
b.a.add(base);
session.save("bComponent", b);
b = (B) session.load("bComponent", new Long(1));
assertEquals(2, b.a.size());
extendsA = (ExtendsA) b.a.get(0);
assertEquals("value", extendsA.getValue());
assertEquals("evalue", extendsA.getExtendsValue());
assertEquals("edvalue", extendsA.getD().value);
base = (BaseA) b.a.get(1);
assertEquals("baseValue", base.getValue());
assertEquals("bdvalue", base.getD().value);
tr.commit();
session.close();
}
public void testPolyReferenceCollection() throws Exception {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
B b = new B();
b.id = 1;
Long id = new Long(1);
ExtendsA extendsA = new ExtendsA();
extendsA.setId(id);
extendsA.setValue("value");
extendsA.setExtendsValue("evalue");
b.a.add(extendsA);
session.save("polyextends", extendsA);
id = new Long(2);
BaseA base = new BaseA();
base.setId(id);
base.setValue("baseValue");
b.a.add(base);
session.save("polybase", base);
session.save("bReference", b);
b = (B) session.load("bReference", new Long(1));
assertEquals(2, b.a.size());
extendsA = (ExtendsA) b.a.get(0);
assertEquals("value", extendsA.getValue());
assertEquals("evalue", extendsA.getExtendsValue());
base = (BaseA) b.a.get(1);
assertEquals("baseValue", base.getValue());
tr.commit();
session.close();
}
public void testPolyComponent() throws Exception {
CompassSession session = openSession();
CompassTransaction tr = session.beginTransaction();
C c = new C();
c.id = 1;
Long id = new Long(1);
ExtendsA extendsA = new ExtendsA();
extendsA.setId(id);
extendsA.setValue("value");
extendsA.setExtendsValue("evalue");
c.a = extendsA;
session.save("cComponent", c);
c = (C) session.load("cComponent", new Long(1));
extendsA = (ExtendsA) c.a;
assertEquals("value", extendsA.getValue());
assertEquals("evalue", extendsA.getExtendsValue());
c = new C();
c.id = 2;
id = new Long(2);
BaseA base = new BaseA();
base.setId(id);
base.setValue("baseValue");
c.a = base;
session.save("cComponent", c);
c = (C) session.load("cComponent", new Long(2));
assertEquals("baseValue", c.a.getValue());
tr.commit();
session.close();
}
}