blob: 0cf5359a43f1888ed0aaa13b26c024d6d34aae0b [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.helper.xmlhelper.loadandsave;
import java.util.ArrayList;
import java.util.List;
import commonj.sdo.DataObject;
import commonj.sdo.Property;
import commonj.sdo.Type;
import commonj.sdo.helper.XMLDocument;
import junit.textui.TestRunner;
import org.eclipse.persistence.sdo.SDOConstants;
import org.eclipse.persistence.sdo.SDOProperty;
import org.eclipse.persistence.sdo.SDOType;
public class LoadAndSaveIDRefTestCases extends LoadAndSaveTestCases {
public LoadAndSaveIDRefTestCases(String name) {
super(name);
}
public static void main(String[] args) {
String[] arguments = { "-c", "org.eclipse.persistence.testing.sdo.helper.xmlhelper.loadandsave.LoadAndSaveIDRefTestCases" };
TestRunner.main(arguments);
}
@Override
protected String getNoSchemaControlFileName() {
return "./org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrderWithIDREF.xml";
}
@Override
protected String getControlDataObjectFileName() {
return "./org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrderWithIDREF.xml";
}
@Override
protected String getControlFileName() {
return "./org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrderWithIDREF.xml";
}
@Override
protected String getSchemaName() {
return "org/eclipse/persistence/testing/sdo/schemas/PurchaseOrderWithIDREF.xsd";
}
@Override
protected String getControlRootURI() {
return NON_DEFAULT_URI;
}
@Override
protected String getControlRootName() {
return "company";
}
@Override
protected String getRootInterfaceName() {
return "Company";
}
// Override package generation based on the JAXB 2.0 algorithm in SDOUtil.java
@Override
protected List<String> getPackages() {
List<String> packages = new ArrayList<String>();
packages.add(NON_DEFAULT_JAVA_PACKAGE_DIR);
return packages;
}
private Type registerAddressType() {
/****ADDRESS TYPE*****/
Type stringType = typeHelper.getType("commonj.sdo", "String");
Type decimalType = SDOConstants.SDO_DECIMAL;
DataObject addressType = dataFactory.create("commonj.sdo", "Type");
SDOProperty prop = (SDOProperty)addressType.getType().getProperty("uri");
addressType.set(prop, getControlRootURI());
prop = (SDOProperty)addressType.getType().getProperty("name");
addressType.set(prop, "USAddress");
addProperty(addressType, "name", stringType);
addProperty(addressType, "street", stringType);
addProperty(addressType, "city", stringType);
addProperty(addressType, "state", stringType);
addProperty(addressType, "zip", decimalType);
DataObject newProperty = addProperty(addressType, "country", stringType);
prop = (SDOProperty)newProperty.getType().getProperty("default");
newProperty.set(prop, "US");
return typeHelper.define(addressType);
}
private Type defineAndPostProcessUnidirectional(String containingPropertyLocalName, DataObject typeToDefine, //
String idPropertyName, String containingPropertyName) {
setIDPropForReferenceProperties(typeToDefine, idPropertyName);
// define the current type
Type aType = null;
try {
aType = typeHelper.define(typeToDefine);
} catch (Exception e) {
fail(e.getMessage());
}
return aType;
}
private Type registerItemType() {
Type stringType = typeHelper.getType("commonj.sdo", "String");
DataObject itemType = dataFactory.create("commonj.sdo", "Type");
SDOProperty prop = (SDOProperty)itemType.getType().getProperty("uri");
itemType.set(prop, getControlRootURI());
prop = (SDOProperty)itemType.getType().getProperty("name");
itemType.set(prop, "Item");
//TODO: anyuri type?
addProperty(itemType, "itemID", stringType);
addProperty(itemType, "name", stringType);
String containingPropertyName = "purchaseOrder";
// set unidirectional reference id
Type aType = defineAndPostProcessUnidirectional("Item", itemType, "itemID", containingPropertyName);
return aType;
}
private Type registerCompanyType(Type purchaseOrderType, Type customerType) {
Type stringType = typeHelper.getType("commonj.sdo", "String");
DataObject companyType = dataFactory.create("commonj.sdo", "Type");
SDOProperty prop = (SDOProperty)companyType.getType().getProperty("uri");
companyType.set(prop, getControlRootURI());
prop = (SDOProperty)companyType.getType().getProperty("name");
companyType.set(prop, "Company");
//TODO: anyuri type?
addProperty(companyType, "name", stringType, false, false, false);
addProperty(companyType, "cust", customerType, true, true, true);
addProperty(companyType, "porder", purchaseOrderType,true,true,true);
addProperty(companyType, "item", registerItemType(),true, true, true);
return typeHelper.define(companyType);
}
private DataObject getCustomerTypeDO(DataObject purchaseOrderTypeType) {
Type stringType = typeHelper.getType("commonj.sdo", "String");
DataObject customerType = dataFactory.create("commonj.sdo", "Type");
SDOProperty prop = (SDOProperty)customerType.getType().getProperty("uri");
customerType.set(prop, getControlRootURI());
prop = (SDOProperty)customerType.getType().getProperty("name");
customerType.set(prop, "Customer");
addProperty(customerType, "custName", stringType,false,false,true);
addProperty(customerType, "custID", stringType);
// set unidirectional reference id
setIDPropForReferenceProperties(customerType, "custID");
//Property poProp = addProperty(customerType, "purchaseOrder", purchaseOrderTypeType, false, false, true);
//poProp.set("opposite",oppositeProp);
//addProperty(customerType, "purchaseOrder", purchaseOrderTypeType);
return customerType;
//return typeHelper.define(customerType);
}
@Override
public void registerTypes() {
SDOType propertyType = (SDOType) typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.PROPERTY);
SDOType stringType = (SDOType) typeHelper.getType("commonj.sdo", "String");
SDOType dateType = (SDOType) typeHelper.getType("commonj.sdo", "YearMonthDay");
SDOType addressType = (SDOType) registerAddressType();
SDOType itemType = (SDOType) registerItemType();
DataObject purchaseOrderTypeType = dataFactory.create("commonj.sdo", "Type");
SDOProperty prop = (SDOProperty)purchaseOrderTypeType.getType().getProperty("uri");
purchaseOrderTypeType.set(prop, getControlRootURI());
prop = (SDOProperty)purchaseOrderTypeType.getType().getProperty("name");
purchaseOrderTypeType.set(prop, "PurchaseOrder");
addProperty(purchaseOrderTypeType, "poID", stringType,false, false,true);
DataObject shipToProp = addProperty(purchaseOrderTypeType, "shipTo", addressType,true, false, true);
DataObject billToProp = addProperty(purchaseOrderTypeType, "billTo", addressType,true, false, true);
DataObject itemProp = addProperty(purchaseOrderTypeType, "item", itemType,false,true,true);
addProperty(purchaseOrderTypeType, "comment", stringType);
addProperty(purchaseOrderTypeType, "orderDate", dateType);
// set unidirectional reference id
setIDPropForReferenceProperties(purchaseOrderTypeType, "poID");
DataObject customerTypeDO = getCustomerTypeDO(purchaseOrderTypeType);
DataObject customerProp = addProperty(purchaseOrderTypeType, "customer", customerTypeDO,false, false, false);
DataObject poProp = addProperty(customerTypeDO, "purchaseOrder", purchaseOrderTypeType,false, false, true);
customerProp.set("opposite", poProp);
poProp.set("opposite", customerProp);
Type POType = typeHelper.define(purchaseOrderTypeType);
Type custType = typeHelper.define(customerTypeDO);
Type companyType = registerCompanyType(POType, custType);
DataObject propDO = dataFactory.create(propertyType);
propDO.set("name", getControlRootName());
// propDO.set("type", POType);
propDO.set("type", companyType);
propDO.set("containment", true);
propDO.set(SDOConstants.XMLELEMENT_PROPERTY, true);
typeHelper.defineOpenContentProperty(getControlRootURI(), propDO);
}
@Override
public void verifyAfterLoad(XMLDocument doc)
{
super.verifyAfterLoad(doc);
Type customerType = typeHelper.getType(getControlRootURI(),"Customer");
Type poType = typeHelper.getType(getControlRootURI(),"PurchaseOrder");
assertNotNull(customerType);
assertNotNull(poType);
Property custProp = poType.getProperty("customer");
Property poProp = customerType.getProperty("purchaseOrder");
assertNotNull(custProp);
assertNotNull(poProp);
/*assertNotNull(custProp.getOpposite());
assertNotNull(poProp.getOpposite());
assertTrue(custProp == poProp.getOpposite());
assertTrue(poProp == custProp.getOpposite());*/
}
}