Index: cpactf/src/test/ddl/org/castor/cpa/test/test2861/sapdb-create.sql =================================================================== --- cpactf/src/test/ddl/org/castor/cpa/test/test2861/sapdb-create.sql (revision 0) +++ cpactf/src/test/ddl/org/castor/cpa/test/test2861/sapdb-create.sql (revision 0) @@ -0,0 +1,105 @@ +CREATE TABLE test2861_person ( + oid VARCHAR(8) NOT NULL, + name VARCHAR(32), + creator VARCHAR(8), + PRIMARY KEY (OID) +) +// +ALTER TABLE test2861_person +ADD FOREIGN KEY (creator) +REFERENCES test2861_person (oid) +// +CREATE TABLE test2861_naturalPerson ( + oid VARCHAR(8) NOT NULL, + socialSecurityNumber VARCHAR(16), + PRIMARY KEY (OID) +) +// +ALTER TABLE test2861_naturalPerson +ADD FOREIGN KEY (oid) +REFERENCES test2861_person (oid) +// +CREATE TABLE test2861_legalPerson ( + oid VARCHAR(8) NOT NULL, + federalTaxNumber VARCHAR(16), + PRIMARY KEY (OID) +) +// +ALTER TABLE test2861_legalPerson +ADD FOREIGN KEY (oid) +REFERENCES test2861_person (oid) +// +CREATE TABLE test2861_product ( + oid VARCHAR(8) NOT NULL, + eanCode VARCHAR(13), + PRIMARY KEY (OID) +) +// +CREATE TABLE test2861_motorcycle ( + oid VARCHAR(8) NOT NULL, + chassisNumber VARCHAR(16), + holder VARCHAR(8) NOT NULL, + reseller VARCHAR(8) NOT NULL, + PRIMARY KEY (OID) +) +// +ALTER TABLE test2861_motorcycle +ADD FOREIGN KEY (oid) +REFERENCES test2861_product (oid) +// +ALTER TABLE test2861_motorcycle +ADD FOREIGN KEY (holder) +REFERENCES test2861_person (oid) +// +ALTER TABLE test2861_motorcycle +ADD FOREIGN KEY (reseller) +REFERENCES test2861_person (oid) +// +CREATE TABLE test2861_invoice ( + oid VARCHAR(8), + nb INTEGER, + emitter VARCHAR(8), + billTo VARCHAR(8), + PRIMARY KEY (OID) +) +// +ALTER TABLE test2861_invoice +ADD FOREIGN KEY (emitter) +REFERENCES test2861_person (oid) +// +ALTER TABLE test2861_invoice +ADD FOREIGN KEY (billTo) +REFERENCES test2861_person (oid) +// +CREATE TABLE test2861_invoiceItem ( + oid VARCHAR(8) NOT NULL, + invoice VARCHAR(8), + product VARCHAR(8), + quantity INTEGER, + price DECIMAL(12,2), + total DECIMAL(12,2), + PRIMARY KEY (OID) +) +// +ALTER TABLE test2861_invoiceItem +ADD FOREIGN KEY (invoice) +REFERENCES test2861_invoice (oid) +// +ALTER TABLE test2861_invoiceItem +ADD FOREIGN KEY (product) +REFERENCES test2861_product (oid) +// + + +CREATE TABLE test2861_parameter ( + oid VARCHAR(8) NOT NULL, + person VARCHAR(8), + idSys VARCHAR(6), + intValue INTEGER, + PRIMARY KEY (OID) +) +// +ALTER TABLE test2861_parameter +ADD FOREIGN KEY (person) +REFERENCES test2861_person (oid) +// \ No newline at end of file Index: cpactf/src/test/ddl/org/castor/cpa/test/test2861/sapdb-drop.sql =================================================================== --- cpactf/src/test/ddl/org/castor/cpa/test/test2861/sapdb-drop.sql (revision 0) +++ cpactf/src/test/ddl/org/castor/cpa/test/test2861/sapdb-drop.sql (revision 0) @@ -0,0 +1,16 @@ +DROP TABLE test2861_parameter +// +DROP TABLE test2861_invoiceItem +// +DROP TABLE test2861_invoice +// +DROP TABLE test2861_motorcycle +// +DROP TABLE test2861_product +// +DROP TABLE test2861_legalPerson +// +DROP TABLE test2861_naturalPerson +// +DROP TABLE test2861_person +// \ No newline at end of file Index: cpactf/src/test/java/org/castor/cpa/test/test2861/BusinessObject.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/BusinessObject.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/BusinessObject.java (revision 0) @@ -0,0 +1,27 @@ +package org.castor.cpa.test.test2861; + +import java.util.Date; +import java.util.Vector; + +import org.castor.cpa.test.test2858.Payment; +import org.exolab.castor.jdo.TimeStampable; +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class BusinessObject implements TimeStampable { + + private String _oid; + private long _timeStamp; + + public String getOid() { return _oid; } + public void setOid(final String oid) { _oid = oid; } + + public long jdoGetTimeStamp() { return _timeStamp; } + public void jdoSetTimeStamp(final long timeStamp) { + _timeStamp = timeStamp; + } + +} \ No newline at end of file Index: cpactf/src/test/java/org/castor/cpa/test/test2861/Invoice.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/Invoice.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/Invoice.java (revision 0) @@ -0,0 +1,33 @@ +package org.castor.cpa.test.test2861; + +import java.util.Vector; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class Invoice extends BusinessObject { + + Integer _number; + Person _emitter; + Person _billTo; + Vector _invoiceItem; + + public Integer getNumber() { return _number; } + public void setNumber(Integer number) { _number = number; } + + public Person getEmitter() { return _emitter; } + public void setEmitter(Person emitter) { _emitter = emitter; } + + public Person getBillTo() { return _billTo; } + public void setBillTo(Person billTo) { _billTo = billTo; } + + public Vector getInvoiceItem() { return _invoiceItem; } + public void setInvoiceItem(Vector invoiceItem) { + _invoiceItem = invoiceItem; + } + + +} Index: cpactf/src/test/java/org/castor/cpa/test/test2861/InvoiceItem.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/InvoiceItem.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/InvoiceItem.java (revision 0) @@ -0,0 +1,32 @@ +package org.castor.cpa.test.test2861; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class InvoiceItem extends BusinessObject { + + Invoice _invoice; + Product _product; + Integer _quantity; + Double _price; + Double _total; + + public Invoice getInvoice() { return _invoice; } + public void setInvoice(Invoice invoice) { _invoice = invoice; } + + public Product getProduct() { return _product; } + public void setProduct(Product product) { _product = product; } + + public Integer getQuantity() { return _quantity; } + public void setQuantity(Integer quantity) { _quantity = quantity; } + + public Double getPrice() { return _price; } + public void setPrice(Double price) { _price = price; } + + public Double getTotal() { return _total; } + public void setTotal(Double total) { _total = total; } + +} \ No newline at end of file Index: cpactf/src/test/java/org/castor/cpa/test/test2861/LegalPerson.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/LegalPerson.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/LegalPerson.java (revision 0) @@ -0,0 +1,16 @@ +package org.castor.cpa.test.test2861; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class LegalPerson extends Person { + + String _federalTaxNumber; + + public String getFederalTaxNumber() { return _federalTaxNumber; } + public void setFederalTaxNumber(String federalTaxNumber) { _federalTaxNumber = federalTaxNumber; } + +} Index: cpactf/src/test/java/org/castor/cpa/test/test2861/Motorcycle.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/Motorcycle.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/Motorcycle.java (revision 0) @@ -0,0 +1,25 @@ +package org.castor.cpa.test.test2861; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class Motorcycle extends Product { + + String _chassisNumber; + Person _holder; + Person _reseller; + + public String getChassisNumber() { return _chassisNumber; } + public void setChassisNumber(String chassisNumber) { + _chassisNumber = chassisNumber; + } + + public Person getHolder() { return _holder; } + public void setHolder(Person holder) { _holder = holder; } + + public Person getReseller() { return _reseller; } + public void setReseller(Person reseller) { _reseller = reseller; } +} Index: cpactf/src/test/java/org/castor/cpa/test/test2861/NaturalPerson.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/NaturalPerson.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/NaturalPerson.java (revision 0) @@ -0,0 +1,18 @@ +package org.castor.cpa.test.test2861; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class NaturalPerson extends Person { + + String _socialSecurityNumber; + + public String getSocialSecurityNumber() { return _socialSecurityNumber; } + public void setSocialSecurityNumber(String socialSecurityNumber) { + _socialSecurityNumber = socialSecurityNumber; + } + +} Index: cpactf/src/test/java/org/castor/cpa/test/test2861/Parameter.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/Parameter.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/Parameter.java (revision 0) @@ -0,0 +1,24 @@ +package org.castor.cpa.test.test2861; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class Parameter extends BusinessObject { + + Person _person; + String _idSys; + Integer _intValue; + + public Person getPerson() { return _person; } + public void setPerson(Person person) { _person = person; } + + public String getIdSys() { return _idSys; } + public void setIdSys(String idSys) { _idSys = idSys; } + + public Integer getIntValue() { return _intValue; } + public void setIntValue(Integer intValue) { _intValue = intValue; } + +} \ No newline at end of file Index: cpactf/src/test/java/org/castor/cpa/test/test2861/Person.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/Person.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/Person.java (revision 0) @@ -0,0 +1,22 @@ +package org.castor.cpa.test.test2861; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class Person extends BusinessObject { + + String _name; + Person _creator; + + public String getName() { return _name; } + public void setName(String name) { _name = name; } + + public Person getCreator() { return _creator; } + public void setCreator(Person creator) { + _creator = creator; + } + +} Index: cpactf/src/test/java/org/castor/cpa/test/test2861/Product.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/Product.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/Product.java (revision 0) @@ -0,0 +1,16 @@ +package org.castor.cpa.test.test2861; + +import org.junit.Ignore; + +/** + * @author cwichoski + */ +@Ignore +public class Product extends BusinessObject { + + String _eanCode; + + public String getEanCode() { return _eanCode; } + public void setEanCode(String eanCode) { _eanCode = eanCode; } + +} Index: cpactf/src/test/java/org/castor/cpa/test/test2861/TestReferenceChange.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test2861/TestReferenceChange.java (revision 0) +++ cpactf/src/test/java/org/castor/cpa/test/test2861/TestReferenceChange.java (revision 0) @@ -0,0 +1,144 @@ +package org.castor.cpa.test.test2861; + +import java.util.Date; +import java.util.Vector; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.castor.cpa.test.framework.CPATestCase; +import org.castor.cpa.test.framework.xml.types.DatabaseEngineType; +import org.exolab.castor.jdo.Database; +import org.exolab.castor.jdo.OQLQuery; +import org.exolab.castor.jdo.QueryResults; +import org.exolab.castor.persist.spi.Identity; + +public final class TestReferenceChange extends CPATestCase { + + private static final String DBNAME = "test2861"; + private static final String MAPPING = "/org/castor/cpa/test/test2861/mapping.xml"; + + public static Test suite() throws Exception { + TestSuite suite = new TestSuite(TestReferenceChange.class.getName()); + + suite.addTest(new TestReferenceChange("createObjects")); + suite.addTest(new TestReferenceChange("testCreateInvoice")); + + return suite; + } + + public TestReferenceChange(final String name) { + super(name); + } + + // Test are only included/excluded for engines that have been tested with this test suite. + + public boolean include(final DatabaseEngineType engine) { + return (engine == DatabaseEngineType.SAPDB); + } + + public void createObjects() throws Exception { + LegalPerson acme = new LegalPerson(); + acme.setOid("AAAAacme"); + acme.setName("ACME INC."); + acme.setFederalTaxNumber("1"); + + NaturalPerson marvin = new NaturalPerson(); + marvin.setOid("AAmarvin"); + marvin.setName("MARVIN ACME"); + marvin.setSocialSecurityNumber("2"); + marvin.setCreator(acme); + + Motorcycle motorcycle = new Motorcycle(); + motorcycle.setOid("AAAAMT01"); + motorcycle.setChassisNumber("CHASSIS00001"); + motorcycle.setHolder(marvin); + motorcycle.setReseller(acme); + + Parameter invoiceSeq = new Parameter(); + invoiceSeq.setOid("AAAINVSQ"); + invoiceSeq.setIdSys("INVSEQ"); + invoiceSeq.setIntValue(new Integer(0)); + invoiceSeq.setPerson(acme); + + Database db = getJDOManager(DBNAME, MAPPING).getDatabase(); + db.setAutoStore(false); + db.begin(); + + db.create(acme); + db.create(marvin); + db.create(motorcycle); + db.create(invoiceSeq); + + db.commit(); + db.close(); + } + + public void testCreateInvoice() throws Exception { + + LegalPerson acme = null; + NaturalPerson marvin = null; + Motorcycle motorcycle = null; + + Database db = getJDOManager(DBNAME, MAPPING).getDatabase(); + db.setAutoStore(false); + db.begin(); + acme = db.load(LegalPerson.class, "AAAAacme"); + marvin = db.load(NaturalPerson.class, "AAmarvin"); + motorcycle = db.load(Motorcycle.class, "AAAAMT01"); + db.commit(); + + + Vector vInvoiceItem = new Vector(); + Invoice invoice = new Invoice(); + invoice.setOid("AAAINV01"); + invoice.setEmitter(marvin); + invoice.setBillTo(acme); + invoice.setInvoiceItem(vInvoiceItem); + + InvoiceItem invoiceItem = new InvoiceItem(); + invoiceItem.setOid("AINVIT01"); + invoiceItem.setInvoice(invoice); + invoiceItem.setProduct(motorcycle); + invoiceItem.setQuantity(new Integer(1)); + invoiceItem.setPrice(new Double(12000)); + invoiceItem.setTotal(new Double(12000)); + vInvoiceItem.add(invoiceItem); + + motorcycle.setHolder(acme); + + db.setAutoStore(false); + db.begin(); + + Parameter invoiceSeq = null; + OQLQuery oql = db.getOQLQuery("SELECT obj FROM org.castor.cpa.test.test2861.Parameter obj WHERE person.oid = $1 AND idSys = $2"); + oql.bind(acme.getOid()); + oql.bind("INVSEQ"); + QueryResults results = oql.execute(); + if (results.hasMore()) { + invoiceSeq = (Parameter)results.nextElement(); + } + int newInvoiceSeq = invoiceSeq.getIntValue().intValue() + 1; + invoiceSeq.setIntValue(new Integer(newInvoiceSeq)); + invoice.setNumber(invoiceSeq.getIntValue()); + oql.close(); + results.close(); + + db.update(motorcycle); + db.create(invoice); + + + db.commit(); + + db.begin(); + motorcycle = db.load(Motorcycle.class, "AAAAMT01"); + db.commit(); + + assert(motorcycle.getHolder().getName().equals(marvin.getName())); + System.out.println(motorcycle.getHolder().getName().equals(marvin.getName())); + + db.close(); + + } + +} Index: cpactf/src/test/resources/org/castor/cpa/test/test2861/mapping.out.xml =================================================================== --- cpactf/src/test/resources/org/castor/cpa/test/test2861/mapping.out.xml (revision 0) +++ cpactf/src/test/resources/org/castor/cpa/test/test2861/mapping.out.xml (revision 0) @@ -0,0 +1,17 @@ + + + CREATE TABLE test2861_person ( oid VARCHAR() , name VARCHAR() , PRIMARY KEY (OID)); + + CREATE TABLE test2861_naturalPerson ( socialSecurityNumber VARCHAR() , PRIMARY KEY (OID)); + + + CREATE TABLE test2861_legalPerson ( federalTaxNumber VARCHAR() , PRIMARY KEY (OID)); + + CREATE TABLE test2861_product ( eanCode VARCHAR() , PRIMARY KEY (OID)); + + CREATE TABLE test2861_motorcycle ( chassisNumber VARCHAR() , holder VARCHAR(8), reseller VARCHAR(8), PRIMARY KEY (OID)); + + CREATE TABLE test2861_invoice ( oid VARCHAR() , holder VARCHAR(8), billTo VARCHAR(8), PRIMARY KEY (OID)); + + CREATE TABLE test2861_invoiceItem ( oid VARCHAR() , invoice VARCHAR(8), product VARCHAR(8), quantity INTEGER, price DECIMAL(), total DECIMAL(), PRIMARY KEY (OID)); + Index: cpactf/src/test/resources/org/castor/cpa/test/test2861/mapping.xml =================================================================== --- cpactf/src/test/resources/org/castor/cpa/test/test2861/mapping.xml (revision 0) +++ cpactf/src/test/resources/org/castor/cpa/test/test2861/mapping.xml (revision 0) @@ -0,0 +1,144 @@ + + + + + + Person + + + + + + + + + + + + + + + NaturalPerson + + + + + + + + + + + + + LegalPerson + + + + + + + + + + + + Product + + + + + + + + + + + + Motorcycle + + + + + + + + + + + + + + + + + + Invoice + + + + + + + + + + + + + + + + + + + + + org.castor.cpa.test.test2861.InvoiceItem + + + + + + + + + + + + + + + + + + + + + + + + Invoice + + + + + + + + + + + + + + + + + + \ No newline at end of file