blob: 7743c6b5318243bfa9ee9b9ebfd3ac08638e825c [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.sdo.model.changesummary;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import junit.textui.TestRunner;
import org.eclipse.persistence.sdo.SDOChangeSummary;
import org.eclipse.persistence.sdo.SDODataObject;
import org.eclipse.persistence.sdo.ValueStore;
import org.eclipse.persistence.sdo.helper.ListWrapper;
import org.eclipse.persistence.testing.sdo.SDOTestCase;
import commonj.sdo.ChangeSummary;
import commonj.sdo.DataObject;
import commonj.sdo.Property;
import commonj.sdo.helper.XMLDocument;
public class ChangeSummaryXSDWithCSonChildProject extends SDOTestCase {
protected DataObject rootObject;
protected DataObject rootObject2;
protected DataObject rootObjectOriginalCopy;
protected ChangeSummary salesPO1CS;
protected ChangeSummary salesPO2CS;
protected ChangeSummary developmentPO1CS; // n/a on startup
protected ChangeSummary developmentPO2CS; // n/a on startup
protected ChangeSummary stock1CS;
protected ChangeSummary stock2CS;
protected ChangeSummary stock3CS;
protected ChangeSummary salesPO1CS2;
protected ChangeSummary salesPO2CS2;
protected ChangeSummary developmentPO1CS2; // n/a on startup
protected ChangeSummary developmentPO2CS2; // n/a on startup
protected ChangeSummary stock1CS2;
protected ChangeSummary stock2CS2;
protected ChangeSummary stock3CS2;
public static final String URINAME = "http://www.example.org";
public static final String TYPENAME = "corporation";
public ChangeSummaryXSDWithCSonChildProject(String name) {
super(name);
}
@Override
public void setUp() {
super.setUp();// watch setup redundancy
//define types from deep with cs
try {
InputStream is = new FileInputStream("org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrderDeepWithCSonChild.xsd");
List types = xsdHelper.define(is, null);
XMLDocument document = xmlHelper.load(new FileInputStream("org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrderDeepWithCSonChild.xml"));
rootObject = document.getRootObject();
salesPO1CS = rootObject.getDataObject("sales/purchaseOrder[1]").getChangeSummary();
salesPO2CS = rootObject.getDataObject("sales/purchaseOrder[2]").getChangeSummary();
developmentPO1CS = rootObject.getDataObject("development/purchaseOrder[1]").getChangeSummary();
developmentPO2CS = null;//rootObject.getDataObject("development/purchaseOrder[2]").getChangeSummary();
stock1CS = rootObject.getDataObject("stock[1]").getChangeSummary();
stock2CS = rootObject.getDataObject("stock[2]").getChangeSummary();
stock3CS = rootObject.getDataObject("stock[3]").getChangeSummary();
//rootObjectOriginalCopy = copyHelper.copy(rootObject);
// see bug #5878605: SDO: COPYHELPER.COPY() LOGS CS CHANGES - SHOULD SUSPEND LOGGING DURING COPY
// turn off logging before deep copy as a workaround
salesPO1CS.endLogging();
salesPO2CS.endLogging();
developmentPO1CS.endLogging();
//developmentPO2CS.endLogging();
stock1CS.endLogging();
stock2CS.endLogging();
stock3CS.endLogging();
rootObject2 = copyHelper.copy(rootObject);
salesPO1CS2 = rootObject2.getDataObject("sales/purchaseOrder[1]").getChangeSummary();
salesPO2CS2 = rootObject2.getDataObject("sales/purchaseOrder[2]").getChangeSummary();
developmentPO1CS2 = rootObject.getDataObject("development/purchaseOrder[1]").getChangeSummary();
developmentPO2CS2 = null;//rootObject.getDataObject("development/purchaseOrder[2]").getChangeSummary();
stock1CS2 = rootObject2.getDataObject("stock[1]").getChangeSummary();
stock2CS2 = rootObject2.getDataObject("stock[2]").getChangeSummary();
stock3CS2 = rootObject2.getDataObject("stock[3]").getChangeSummary();
// make sure all logs are off
salesPO1CS.endLogging();
salesPO2CS.endLogging();
developmentPO1CS.endLogging();
//developmentPO2CS.endLogging();
stock1CS.endLogging();
stock2CS.endLogging();
stock3CS.endLogging();
salesPO1CS2.endLogging();
salesPO2CS2.endLogging();
developmentPO1CS2.endLogging();
//developmentPO2CS2.endLogging();
stock1CS2.endLogging();
stock2CS2.endLogging();
stock3CS2.endLogging();
} catch (Exception e) {
e.printStackTrace();
fail("An error occurred loading the xsd");
}
}
public void writeXML(DataObject anObject) {
// verify save
try {
xmlHelper.save(rootObject, ChangeSummaryOnChildTestCases.URINAME,//
ChangeSummaryOnChildTestCases.TYPENAME,//
System.out);
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
e.printStackTrace();
}
}
/*
CS on child (item)
/ns0:items/ns0:item[2]/ns0:myChangeSummary/ns0:product/ns0:price[2]
/ns0:items/ns0:item[2]/ns0:myChangeSummary/ns0:product
/ns0:items/ns0:item[2]/ns0:myChangeSummary - invalid
cs on root
/ns0:myChangeSummary/ns0:items/ns0:item[2]
/ns0:myChangeSummary/ns0:items
/ns0:myChangeSummary - invalid
*/
private void assertYardDeleted(DataObject shipToDO, DataObject yardDO, ChangeSummary cs, boolean nullContainer) {
assertDeleted(yardDO, cs, nullContainer);
assertEquals(3, cs.getOldValues(yardDO).size());
Property sfProp = yardDO.getInstanceProperty("squarefootage");
Property widthProp = yardDO.getInstanceProperty("width");
Property lengthProp = yardDO.getInstanceProperty("length");
ChangeSummary.Setting yardSFsetting = cs.getOldValue(yardDO, sfProp);
assertEquals(yardSFsetting.getValue(), null);
//TODO: uncomment this line. Will fail unless Node Null policy stuff is fixed
//assertEquals(false, yardSFsetting.isSet());
ChangeSummary.Setting yardWidthsetting = cs.getOldValue(yardDO, widthProp);
assertEquals("65", yardWidthsetting.getValue());
assertEquals(true, yardWidthsetting.isSet());
ChangeSummary.Setting yardLengththsetting = cs.getOldValue(yardDO, lengthProp);
assertEquals("45", yardLengththsetting.getValue());
assertEquals(true, yardLengththsetting.isSet());
// shipToDO was not deleted, only check yardDO
assertChildrenUnset(yardDO);
}
private void assertYardDetached(DataObject shipToDO, DataObject yardDO, ChangeSummary cs, boolean nullContainer) {
assertDetached(yardDO, cs, nullContainer);
assertEquals(3, cs.getOldValues(yardDO).size());
Property sfProp = yardDO.getInstanceProperty("squarefootage");
Property widthProp = yardDO.getInstanceProperty("width");
Property lengthProp = yardDO.getInstanceProperty("length");
ChangeSummary.Setting yardSFsetting = cs.getOldValue(yardDO, sfProp);
assertEquals(yardSFsetting.getValue(), null);
//TODO: uncomment this line. Will fail unless Node Null policy stuff is fixed
//assertEquals(false, yardSFsetting.isSet());
ChangeSummary.Setting yardWidthsetting = cs.getOldValue(yardDO, widthProp);
assertEquals("65", yardWidthsetting.getValue());
assertEquals(true, yardWidthsetting.isSet());
ChangeSummary.Setting yardLengththsetting = cs.getOldValue(yardDO, lengthProp);
assertEquals("45", yardLengththsetting.getValue());
assertEquals(true, yardLengththsetting.isSet());
}
}