/******************************************************************************* * Copyright (c) 1998, 2015 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 v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ /* DESCRIPTION Perform copy/equality junit test operations on DataObjects. References: SDO59-DeepCopy.doc SDO_Ref_BiDir_Relationships_DesignSpec.doc http://files.oraclecorp.com/content/MySharedFolders/ST%20Functional%20Specs/AS11gR1/TopLink/SDO/SDO_Ref_BiDir_Relationships_DesignSpec.doc */ package org.eclipse.persistence.testing.sdo.helper; import commonj.sdo.DataObject; import commonj.sdo.Property; import java.util.ArrayList; import java.util.List; import javax.xml.namespace.QName; import org.eclipse.persistence.sdo.SDOConstants; import org.eclipse.persistence.sdo.SDODataObject; import org.eclipse.persistence.sdo.SDOProperty; import org.eclipse.persistence.sdo.SDOType; import org.eclipse.persistence.sdo.helper.SDOTypeHelper; import org.eclipse.persistence.testing.sdo.SDOTestCase; public class SDOCopyEqualityHelperTestCases extends SDOTestCase { protected String rootTypeName = "rootTypeName"; protected String rootTypeUri = "rootTypeTypeUri"; protected String containedTypeName = "containedTypeName"; protected String containedTypeUri = "containedTypeTypeUri"; protected String containedType1Name = "containedType1Name"; protected String containedType1Uri = "containedType1TypeUri"; protected String containedByContainedTypeName = "containedByContainedTypeName"; protected String containedBycontainedType1Uri = "containedBycontainedTypeTypeUri"; protected SDODataObject root; protected SDODataObject root1; protected SDODataObject containedDataObject; protected SDODataObject containedDataObject_1; protected SDODataObject containedDataObject1; protected SDODataObject containedByContainedDataObject; protected SDOType rootType; protected SDOType containedType; protected SDOType containedType_1; protected SDOType containedType1; protected SDOType containedByContainedType; protected SDOProperty rootProperty1; protected SDOProperty rootProperty2; protected SDOProperty rootProperty3; protected SDOProperty rootProperty4; protected SDOProperty containedProperty1; protected SDOProperty containedProperty2; protected SDOProperty containedProperty_ChangeSummary; protected SDOProperty contained1Property1; protected SDOProperty containedByContainedProperty1; protected SDOProperty containedByContainedProperty2; // Data structures for UC02xx (bidirectional property between internal nodes) protected String containedType3Name = "containedType3Name"; protected String containedType3Uri = "containedType3TypeUri"; protected SDOType containedByContainedType3; protected SDODataObject containedByContainedDataObject3; protected String containedByContainedTypeName3 = "containedByContainedTypeName3"; protected String containedBycontainedType3Uri = "containedBycontainedTypeType3Uri"; protected SDOProperty containedByContainedProperty3; protected SDOProperty contained1Property3; protected SDOType containedType3; protected SDOProperty containedProperty3; // UC4 protected SDODataObject rootUC4; protected SDODataObject rootUC4m; protected SDOType rootUC4Type; protected SDOType rootUC4Typem; protected SDOType homeType; protected SDOType homeTypem; protected SDOType workType; protected SDOType workTypem; protected SDOType addressType; protected SDOType addressTypem; protected SDODataObject workObject; protected SDODataObject workObjectm; protected SDODataObject homeObject; protected SDODataObject homeObjectm; protected SDODataObject addressObject; protected SDODataObject addressObjectm; protected SDOProperty homeAddress; protected SDOProperty homeAddressm; protected SDOProperty rootHome; protected SDOProperty rootHomem; protected SDOProperty rootWork; protected SDOProperty rootWorkm; protected SDOProperty workAddress; protected SDOProperty workAddressm; protected SDOProperty addressWork; protected SDOProperty addressWorkm; protected String workObjectName = "workObjectName"; protected String homeObjectName = "homeObjectName"; protected String addressObjectName = "addressObjectName"; protected String workObjectUri = "workObjectUri"; protected String homeObjectUri = "homeObjectUri"; protected String addressObjectUri = "addressObjectUri"; protected String workObjectUrim = "workObjectUrim"; protected String homeObjectUrim = "homeObjectUrim"; protected String addressObjectUrim = "addressObjectUrim"; // property strings protected String rootUC4TypeName = "rootUC4TypeName"; protected String rootUC4TypeUri = "rootUC4TypeTypeUri"; protected String rootUC4TypeUrim = "rootUC4TypeTypeUrim"; protected String rootHomeName = "rootHome"; protected String rootWorkName = "rootWork"; protected String homeAddressName = "homeAddress"; protected String workAddressName = "workAddress"; protected String addressWorkName = "addressWork"; protected String rootHomeUri = "rootHomeUri"; protected String rootHomeUrim = "rootHomeUrim"; protected String rootWorkUri = "rootWorkUri"; protected String rootWorkUrim = "rootWorkUrim"; protected String homeAddressUri = "homeAddressUri"; protected String workAddressUri = "workAddressUri"; protected String addressWorkUri = "addressWorkUri"; protected String homeAddressUrim = "homeAddressUrim"; protected String workAddressUrim = "workAddressUrim"; protected String addressWorkUrim = "addressWorkUrim"; // UCUniOutside protected SDODataObject rootUCUniOutside; protected SDOType rootUCUniOutsideType; protected SDOType homeTypeUCUniOutside; protected SDOType workTypeUCUniOutside; protected SDOType addressTypeUCUniOutside; protected SDODataObject workObjectUCUniOutside; protected SDODataObject homeObjectUCUniOutside; protected SDODataObject addressObjectUCUniOutside; protected SDOProperty homeAddressUCUniOutside; protected SDOProperty rootHomeUCUniOutside; protected SDOProperty rootWorkUCUniOutside; protected SDOProperty workAddressUCUniOutside; protected SDOProperty addressWorkUCUniOutside; protected String workObjectNameUCUniOutside = "workObjectNameUCUniOutside"; protected String homeObjectNameUCUniOutside = "homeObjectNameUCUniOutside"; protected String addressObjectNameUCUniOutside = "addressObjectNameUCUniOutside"; protected String workObjectUriUCUniOutside = "workObjectUriUCUniOutside"; protected String homeObjectUriUCUniOutside = "homeObjectUriUCUniOutside"; protected String addressObjectUriUCUniOutside = "addressObjectUriUCUniOutside"; // property strings protected String rootUCUniOutsideTypeName = "rootUCUniOutsideTypeName"; protected String rootUCUniOutsideTypeUri = "rootUCUniOutsideTypeTypeUri"; protected String rootHomeNameUCUniOutside = "rootHome"; protected String rootWorkNameUCUniOutside = "rootWork"; protected String homeAddressNameUCUniOutside = "homeAddress"; protected String workAddressNameUCUniOutside = "workAddress"; protected String addressWorkNameUCUniOutside = "addressWork"; protected String rootHomeUriUCUniOutside = "rootHomeUri"; protected String rootWorkUriUCUniOutside = "rootWorkUri"; protected String homeAddressUriUCUniOutside = "homeAddressUri"; protected String workAddressUriUCUniOutside = "workAddressUri"; protected String addressWorkUriUCUniOutside = "addressWorkUri"; protected List objects = new ArrayList(); protected List objects1 = new ArrayList(); public SDOCopyEqualityHelperTestCases(String name) { super(name); } /** * Structure: * * root * rootproperty1 --> is DataType; SDOString <---> value: "test" * rootproperty2 --> not DataType <---> value: containedDataObject * root's child: * containedDataObject1 * contained1Property1 --> not DataType; bidirectional <---> value: containedByContainedDataObject * containedDataObject * containedProperty1 --> is DataType; SDOString <---> value: "test1" * containedProperty2 --> not DataType <---> value: containedByContainedDataObject * containedProperty3 --> not DataType <---> value: containedByContainedDataObject3 (bidirectional inside sub-tree copy tree) * containedProperty_ChangeSummary --> not DataType <---> value: chSum(ChangeSummary) * containedDataObject's child: * containedByContainedDataObject * containedByContainedProperty1 --> not DataType; bidirectional <---> value: containedDataObejct1 * * Covered test cases: * Test case 1: copied root's DataType property rootproperty1 has same value * Test Case 2: copied root's not DataType property rootproperty2 has a copied DataObject from containedDataObject * Test case 3: there exists dataobject's bidirectional not containment property has another DataObject as value * Test Case 4: there exists dataobject's unidirectional not containment property has another DataObject as value * Test Case 5: there exists dataobject's non containment property has another DataObject that is not in containment tree as value * Test Case 6: copied containedProperty's ChangeSummary Type property containedProperty_ChangeSummary has a copied ChangeSummary from source's ChangeSummary chSum */ public void setUp() { super.setUp(); SDOType changeSummaryType = (SDOType) aHelperContext.getTypeHelper().getType(SDOConstants.SDO_URL, SDOConstants.CHANGESUMMARY); // first we set up root data object DataObject rootTypeDO = defineType(rootTypeUri, rootTypeName); rootType = (SDOType)typeHelper.define(rootTypeDO); rootProperty1 = new SDOProperty(aHelperContext);// root's property1 rootProperty1.setName("rootproperty1-datatype"); SDOType rootProperty1_type = SDOConstants.SDO_STRING;// string type rootProperty1.setType(rootProperty1_type); rootType.addDeclaredProperty(rootProperty1);// add this property to root type's declared list rootProperty2 = new SDOProperty(aHelperContext);//root's property2 rootProperty2.setName("rootproperty2-notdatatype"); rootProperty2.setContainment(true);// containment property SDOType rootProperty2_type = new SDOType("notDataTypeUri", "notDataType"); QName qname = new QName("notDataTypeUri", "notDataType"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootProperty2_type); rootProperty2.setType(rootProperty2_type); rootType.addDeclaredProperty((Property)rootProperty2); rootProperty3 = new SDOProperty(aHelperContext);// root's property3 rootProperty3.setName("rootproperty3-notdatatype"); rootProperty3.setContainment(true);// containment property DataObject rootProperty3_typeDO = defineType("notDataTypeUri1", "notDataType1"); SDOType rootProperty3_type = (SDOType)typeHelper.define(rootProperty3_typeDO); rootProperty3.setType(rootProperty3_type); rootType.addDeclaredProperty(rootProperty3); rootProperty4 = new SDOProperty(aHelperContext); rootProperty4.setName("rootproperty4-list"); rootProperty4.setContainment(true); rootProperty4.setMany(true); DataObject rootProperty4_typeDO = defineType("listPropertyUri", "listProperty"); SDOType rootProperty4_type = (SDOType)typeHelper.define(rootProperty4_typeDO); rootProperty4.setType(rootProperty4_type); rootType.addDeclaredProperty(rootProperty4); SDOProperty rootProperty_NotContainment = new SDOProperty(aHelperContext); rootProperty_NotContainment.setContainment(false); DataObject rootProperty_NotContainment_typeDO = defineType("rootProperty_NotContainmenturi", "rootProperty_NotContainment"); SDOType rootProperty_NotContainment_type = (SDOType)typeHelper.define(rootProperty_NotContainment_typeDO); rootProperty_NotContainment.setType(rootProperty_NotContainment_type); rootProperty_NotContainment.setName("rootProperty_NotContainment"); rootType.addDeclaredProperty(rootProperty_NotContainment); // 20060913: opposite property 3 (to test bidirectional property inside subtree copy tree) contained1Property3 = new SDOProperty(aHelperContext);// containedDataObject3's property3 contained1Property3.setName("contained1Property3-notdataType"); contained1Property3.setContainment(false);// non-containment property DataObject contained1Property3_typeDO = defineType("contained1Property3Uri", "contained1Property3_notdataType"); SDOType contained1Property3_type = (SDOType)typeHelper.define(contained1Property3_typeDO); contained1Property3.setType(contained1Property3_type); objects = new ArrayList(); SDOType obj1Type = new SDOType("listelm1", "listelm1"); qname = new QName("listelm1", "listelm1"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, obj1Type); SDOProperty obj1Property = new SDOProperty(aHelperContext); obj1Property.setName("obj1Property"); SDOType obj1PropertyType = SDOConstants.SDO_STRING; obj1Property.setType(obj1PropertyType); obj1Property.setContainment(false); obj1Type.addDeclaredProperty(obj1Property); SDODataObject obj1 = (SDODataObject)dataFactory.create(obj1Type); objects.add(obj1); obj1.set(obj1Property, "test"); // second, we create another dataobject contained by root DataObject containedTypeDO = defineType(containedTypeUri, containedTypeName); containedType = (SDOType)typeHelper.define(containedTypeDO); containedProperty1 = new SDOProperty(aHelperContext);// containedDataObject's property1 containedProperty1.setName("containedProperty1-dataType"); SDOType containedProperty1_type = SDOConstants.SDO_STRING;// String Type containedProperty1.setType(containedProperty1_type); containedType.addDeclaredProperty(containedProperty1); containedProperty2 = new SDOProperty(aHelperContext);// containedDataObject's property2 containedProperty2.setName("containedProperty2-notdataType"); containedProperty2.setContainment(true);// containment property SDOType containedProperty2_type = new SDOType(// "containedProperty2Uri", "containedProperty2_notdataType"); qname = new QName("containedProperty2Uri", "containedProperty2_notdataType"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, containedProperty2_type); containedProperty2_type.setDataType(false);// not datatype containedProperty2.setType(containedProperty2_type); containedType.addDeclaredProperty(containedProperty2); // 20060914 new bidirectional hosting node containedProperty3 = new SDOProperty(aHelperContext);// containedDataObject's property2 containedProperty3.setName("containedProperty3-notdataType"); containedProperty3.setContainment(true);// containment property SDOType containedProperty3_type = new SDOType(// "containedProperty3Uri", "containedProperty3_notdataType"); qname = new QName("containedProperty3Uri", "containedProperty3_notdataType"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, containedProperty3_type); containedProperty3_type.setDataType(false);// not datatype containedProperty3.setType(containedProperty3_type); containedType.addDeclaredProperty(containedProperty3); containedProperty_ChangeSummary = new SDOProperty(aHelperContext); containedProperty_ChangeSummary.setContainment(false); containedProperty_ChangeSummary.setType(changeSummaryType); containedProperty_ChangeSummary.setName("containedProperty_ChangeSummary"); containedType.addDeclaredProperty(containedProperty_ChangeSummary); containedDataObject = (SDODataObject)dataFactory.create(containedType); // then, we create one dataobject as root's non containment property' value containedType1 = new SDOType(containedType1Uri, containedType1Name); qname = new QName(containedType1Uri, containedType1Name); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, containedType1); contained1Property1 = new SDOProperty(aHelperContext);// containedDataObject1's property1 contained1Property1.setName("contained1Property1-notdataType"); contained1Property1.setContainment(false);// non containment property SDOType contained1Property1_type = new SDOType(// "contained1Property1Uri", "contained1Property1_notdataType"); qname = new QName("contained1Property1Uri", "contained1Property1_notdataType"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, contained1Property1_type); contained1Property1_type.setDataType(false);// not datatype contained1Property1.setType(contained1Property1_type); // TODO: 20060906 bidirectional // bidirectional to containedByContainedDataObject // Note: the property parameter is null so this set will have no effect until the 2nd set later contained1Property1.setOpposite(containedByContainedProperty1); containedType1.addDeclaredProperty(contained1Property1); containedDataObject1 = (SDODataObject)dataFactory.create(containedType1); // finally, we create a dataobject contained by containedDataObject containedByContainedType = new SDOType(containedBycontainedType1Uri, containedByContainedTypeName); qname = new QName(containedBycontainedType1Uri, containedByContainedTypeName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, containedByContainedType); containedByContainedProperty1 = new SDOProperty(aHelperContext);// containedByContainedDataObject's property1 containedByContainedProperty1.setName("containedByContainedProperty1-notdataType"); containedByContainedProperty1.setContainment(false);// non containment property SDOType containedByContainedProperty1_type = new SDOType(// "containedByContainedProperty1Uri", "containedByContainedProperty1_notdataType"); qname = new QName("containedByContainedProperty1Uri", "containedByContainedProperty1_notdataType"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, containedByContainedProperty1_type); containedByContainedProperty1_type.setDataType(false);// not datatype containedByContainedProperty1.setType(containedByContainedProperty1_type); // TODO: 20060906 bidirectional // bidirectional to containedDataObject1 containedByContainedProperty1.setOpposite(contained1Property1); containedByContainedType.addDeclaredProperty(containedByContainedProperty1); // reset opposite set above when property paramenter used to be null contained1Property1.setOpposite(containedByContainedProperty1); containedByContainedProperty2 = new SDOProperty(aHelperContext);// containedByContainedDataObject's property1 containedByContainedProperty2.setName("containedByContainedProperty2-dataType"); containedByContainedProperty2.setContainment(false);// non containment property SDOType containedByContainedProperty2_type = new SDOType(// "containedByContainedProperty2Uri", "containedByContainedProperty2_notdataType"); qname = new QName("containedByContainedProperty2Uri", "containedByContainedProperty2_notdataType"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, containedByContainedProperty2_type); containedByContainedProperty2_type.setDataType(false);// not datatype containedByContainedProperty2.setType(containedByContainedProperty2_type); containedByContainedType.addDeclaredProperty(containedByContainedProperty2); // opposite property 3 containedByContainedProperty3 = new SDOProperty(aHelperContext);// containedByContainedDataObject2's property3 containedByContainedProperty3.setName("containedByContainedProperty3-notdataType"); containedByContainedProperty3.setContainment(false);// non-containment property SDOType containedByContainedProperty3_type = new SDOType(// "containedByContainedProperty3Uri", "containedByContainedProperty3_notdataType"); qname = new QName("containedByContainedProperty3Uri", "containedByContainedProperty3_notdataType"); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, containedByContainedProperty3_type); containedByContainedProperty3_type.setDataType(false);// non-datatype containedByContainedProperty3.setType(containedByContainedProperty3_type); containedByContainedType.addDeclaredProperty(containedByContainedProperty3); containedByContainedDataObject = (SDODataObject)dataFactory.create(// containedByContainedType); // set up relationship root = (SDODataObject)dataFactory.create(rootType); root.set(rootProperty1, "test"); root.set(rootProperty2, containedDataObject);// child: containedDataObject root.set(rootProperty3, containedDataObject1);// child: containedDataObject1 root.set(rootProperty4, objects); containedDataObject.set(containedProperty1, "test1"); // child: containedByContainedDataObject containedDataObject.set(containedProperty2, containedByContainedDataObject); // set opposite property containedDataObject1.set(contained1Property1, containedByContainedDataObject); // set opposite property containedByContainedDataObject.set(containedByContainedProperty1, containedDataObject1); /* // UC02xx: setup some bidirectional properties that have the same copy root // but are 1 level down from the source root so that copy root != source root // new CBCDO2 off off CDO containedByContainedType3 = new SDOType(containedBycontainedType3Uri, containedByContainedTypeName3); // add property to do //containedByContainedType3.addDeclaredProperty(containedByContainedProperty3); // 20060913 //containedType3 = new SDOType(containedType3Uri, containedType3Name); // add property to do containedByContainedType3.addDeclaredProperty(contained1Property3); // new DO containedByContainedDataObject3 = (SDODataObject)dataFactory.create(// containedByContainedType3); // 2 new opposite properties CBCP2 and C1P2 between CBCDO and CBCDO2 // set opposite property // containedByContainedDataObject3.set(contained1Property3, containedByContainedDataObject); // set opposite property containedByContainedDataObject.set(containedByContainedProperty3, containedByContainedDataObject3); // child: containedByContainedDataObject // containedDataObject.set(containedProperty3, containedByContainedDataObject3); // attach opposite properties between CBCDO and CBCDO2 // bidirectional to containedDataObject1 containedByContainedProperty3.setOpposite(contained1Property3); // reset opposite set above when property paramenter used to be null contained1Property3.setOpposite(containedByContainedProperty3); */ // UC 4: mixed containment=true/containment=false bidirectional opposite set // (work at home relationship) // root -> home -> address // root -> work -> address // home/address -> noncontainment to -> work // work -> containment to -> home/address rootUC4Type = new SDOType(rootUC4TypeUri, rootUC4TypeName);// root's type qname = new QName(rootUC4TypeUri, rootUC4TypeName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootUC4Type); homeType = new SDOType(homeObjectUri, homeObjectName); qname = new QName(homeObjectUri, homeObjectName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, homeType); addressType = new SDOType(addressObjectUri, addressObjectName); qname = new QName(addressObjectUri, addressObjectName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, addressType); workType = new SDOType(workObjectUri, workObjectName); qname = new QName(workObjectUri, workObjectName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, workType); rootHome = new SDOProperty(aHelperContext); rootHome.setName(rootHomeName); rootHome.setContainment(true);// containment property SDOType rootHome_type = new SDOType(rootHomeUri, rootHomeName); qname = new QName(rootHomeUri, rootHomeName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootHome_type); rootHome_type.setDataType(false);// not datatype rootHome.setType(rootHome_type); rootUC4Type.addDeclaredProperty((Property)rootHome); rootWork = new SDOProperty(aHelperContext); rootWork.setName(rootWorkName); // non containment so that a containment opposite can be set to this node rootWork.setContainment(false);//true);// containment property //rootWork.setContainment(true);// containment property SDOType rootWork_type = new SDOType(rootWorkUri, rootWorkName); qname = new QName(rootWorkUri, rootWorkName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootWork_type); rootWork_type.setDataType(false);// not datatype rootWork.setType(rootWork_type); rootUC4Type.addDeclaredProperty((Property)rootWork); homeAddress = new SDOProperty(aHelperContext); homeAddress.setName(homeAddressName); homeAddress.setContainment(true);// containment property SDOType homeAddress_type = new SDOType(homeAddressUri, homeAddressName); qname = new QName(homeAddressUri, homeAddressName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, homeAddress_type); homeAddress_type.setDataType(false);// not datatype homeAddress.setType(homeAddress_type); homeType.addDeclaredProperty((Property)homeAddress); workAddress = new SDOProperty(aHelperContext); workAddress.setName(workAddressName); // one opposite property can be true workAddress.setContainment(false);//true);// containment property //workAddress.setContainment(true);// containment property SDOType workAddress_type = new SDOType(workAddressUri, workAddressName); qname = new QName(workAddressUri, workAddressName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, workAddress_type); workAddress_type.setDataType(false);// not datatype workAddress.setType(workAddress_type); workType.addDeclaredProperty((Property)workAddress); addressWork = new SDOProperty(aHelperContext); addressWork.setName(addressWorkName); // other opposite property must be false addressWork.setContainment(true);// containment property SDOType addressWork_type = new SDOType(addressWorkUri, addressWorkName); qname = new QName(addressWorkUri, addressWorkName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, addressWork_type); addressWork_type.setDataType(false);// not datatype addressWork.setType(addressWork_type); addressType.addDeclaredProperty((Property)addressWork); rootUC4 = (SDODataObject)dataFactory.create(rootUC4Type); addressObject = (SDODataObject)dataFactory.create(addressType); homeObject = (SDODataObject)dataFactory.create(homeType); workObject = (SDODataObject)dataFactory.create(workType); addressWork.setOpposite(workAddress); workAddress.setOpposite(addressWork); rootUC4.set(rootHome, homeObject); rootUC4.set(rootWork, workObject); // child: homeObject.set(homeAddress, addressObject); // set opposite property addressObject.set(addressWork, workObject); // set opposite property workObject.set(workAddress, addressObject); // many case // UC 4: mixed containment=true/containment=false bidirectional opposite set // (work at home relationship) // root -> home -> address // root -> work -> address // home/address -> noncontainment to -> work // work -> containment to -> home/address rootUC4Typem = new SDOType(rootUC4TypeUrim, rootUC4TypeName);// root's type qname = new QName(rootUC4TypeUrim, rootUC4TypeName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootUC4Typem); homeTypem = new SDOType(homeObjectUrim, homeObjectName); qname = new QName(homeObjectUrim, homeObjectName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, homeTypem); addressTypem = new SDOType(addressObjectUrim, addressObjectName); qname = new QName(addressObjectUrim, addressObjectName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, addressTypem); workTypem = new SDOType(workObjectUrim, workObjectName); qname = new QName(workObjectUrim, workObjectName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, workTypem); rootHomem = new SDOProperty(aHelperContext); rootHomem.setName(rootHomeName); rootHomem.setContainment(true);// containment property SDOType rootHome_typem = new SDOType(rootHomeUrim, rootHomeName); qname = new QName(rootHomeUrim, rootHomeName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootHome_typem); rootHome_typem.setDataType(false);// not datatype rootHomem.setType(rootHome_typem); rootUC4Typem.addDeclaredProperty((Property)rootHomem); rootWorkm = new SDOProperty(aHelperContext); rootWorkm.setName(rootWorkName); // non containment so that a containment opposite can be set to this node rootWorkm.setContainment(false);//true);// containment property rootWorkm.setMany(true); SDOType rootWork_typem = new SDOType(rootWorkUrim, rootWorkName); qname = new QName(rootWorkUrim, rootWorkName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootWork_typem); rootWork_typem.setDataType(false);// not datatype rootWorkm.setType(rootWork_typem); rootUC4Typem.addDeclaredProperty((Property)rootWorkm); homeAddressm = new SDOProperty(aHelperContext); homeAddressm.setName(homeAddressName); homeAddressm.setContainment(true);// containment property SDOType homeAddress_typem = new SDOType(homeAddressUrim, homeAddressName); qname = new QName(homeAddressUrim, homeAddressName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, homeAddress_typem); homeAddress_typem.setDataType(false);// not datatype homeAddressm.setType(homeAddress_typem); homeTypem.addDeclaredProperty((Property)homeAddressm); workAddressm = new SDOProperty(aHelperContext); workAddressm.setName(workAddressName); // one opposite property can be true workAddressm.setContainment(false);//true);// containment property //workAddress.setContainment(true);// containment property SDOType workAddress_typem = new SDOType(workAddressUri, workAddressName); qname = new QName(workAddressUri, workAddressName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, workAddress_typem); workAddress_typem.setDataType(false);// not datatype workAddressm.setType(workAddress_typem); workTypem.addDeclaredProperty((Property)workAddressm); addressWorkm = new SDOProperty(aHelperContext); addressWorkm.setName(addressWorkName); // other opposite property must be false addressWorkm.setContainment(false);// containment property addressWorkm.setMany(true); SDOType addressWork_typem = new SDOType(addressWorkUri, addressWorkName); qname = new QName(addressWorkUri, addressWorkName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, addressWork_typem); addressWork_typem.setDataType(false);// not datatype addressWorkm.setType(addressWork_typem); addressTypem.addDeclaredProperty((Property)addressWorkm); rootUC4m = (SDODataObject)dataFactory.create(rootUC4Typem); addressObjectm = (SDODataObject)dataFactory.create(addressTypem); homeObjectm = (SDODataObject)dataFactory.create(homeTypem); workObjectm = (SDODataObject)dataFactory.create(workTypem); addressWorkm.setOpposite(workAddressm); workAddressm.setOpposite(addressWorkm); rootUC4m.set(rootHomem, homeObjectm); ArrayList workList = new ArrayList(); workList.add(workObjectm); rootUC4m.set(rootWorkm, workList); //rootUC4m.set(rootWorkm, workObjectm); // child: homeObjectm.set(homeAddressm, addressObjectm); // set opposite property addressObjectm.set(addressWorkm, workList);//workObjectm); // set opposite property workObjectm.set(workAddressm, addressObjectm); // UC 1b: unidirectional outside the copytree // (work at home relationship) // root -> home -> address // root -> work -> address // home/address -> noncontainment to -> work // rootUCUniOutsideType = new SDOType(rootUCUniOutsideTypeUri, rootUCUniOutsideTypeName);// root's type qname = new QName(rootUCUniOutsideTypeUri, rootUCUniOutsideTypeName); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootUCUniOutsideType); homeTypeUCUniOutside = new SDOType(homeObjectUriUCUniOutside, homeObjectNameUCUniOutside); qname = new QName(homeObjectUriUCUniOutside, homeObjectNameUCUniOutside); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, homeTypeUCUniOutside); addressTypeUCUniOutside = new SDOType(addressObjectUriUCUniOutside, addressObjectNameUCUniOutside); qname = new QName(addressObjectUriUCUniOutside, addressObjectNameUCUniOutside); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, addressTypeUCUniOutside); workTypeUCUniOutside = new SDOType(workObjectUriUCUniOutside, workObjectNameUCUniOutside); qname = new QName(workObjectUriUCUniOutside, workObjectNameUCUniOutside); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, workTypeUCUniOutside); rootHomeUCUniOutside = new SDOProperty(aHelperContext); rootHomeUCUniOutside.setName(rootHomeNameUCUniOutside); rootHomeUCUniOutside.setContainment(true);// containment property SDOType rootHome_typeUCUniOutside = new SDOType(rootHomeUriUCUniOutside, rootHomeNameUCUniOutside); qname = new QName(rootHomeUriUCUniOutside, rootHomeNameUCUniOutside); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootHome_typeUCUniOutside); rootHome_typeUCUniOutside.setDataType(false);// not datatype rootHomeUCUniOutside.setType(rootHome_typeUCUniOutside); rootUCUniOutsideType.addDeclaredProperty((Property)rootHomeUCUniOutside); rootWorkUCUniOutside = new SDOProperty(aHelperContext); rootWorkUCUniOutside.setName(rootWorkNameUCUniOutside); // non containment so that a containment opposite can be set to this node rootWorkUCUniOutside.setContainment(false);//true);// containment property SDOType rootWork_typeUCUniOutside = new SDOType(rootWorkUriUCUniOutside, rootWorkNameUCUniOutside); qname = new QName(rootWorkUriUCUniOutside, rootWorkNameUCUniOutside); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, rootWork_typeUCUniOutside); rootWork_typeUCUniOutside.setDataType(false);// not datatype rootWorkUCUniOutside.setType(rootWork_typeUCUniOutside); rootUCUniOutsideType.addDeclaredProperty((Property)rootWorkUCUniOutside); homeAddressUCUniOutside = new SDOProperty(aHelperContext); homeAddressUCUniOutside.setName(homeAddressNameUCUniOutside); homeAddressUCUniOutside.setContainment(true);// containment property SDOType homeAddress_typeUCUniOutside = new SDOType(homeAddressUriUCUniOutside, homeAddressNameUCUniOutside); qname = new QName(homeAddressUriUCUniOutside, homeAddressNameUCUniOutside); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, homeAddress_typeUCUniOutside); homeAddress_typeUCUniOutside.setDataType(false);// not datatype homeAddressUCUniOutside.setType(homeAddress_typeUCUniOutside); homeTypeUCUniOutside.addDeclaredProperty((Property)homeAddressUCUniOutside); /* workAddressUCUniOutside = new SDOProperty(aHelperContext); workAddressUCUniOutside.setName(workAddressNameUCUniOutside); // one opposite property can be true workAddressUCUniOutside.setContainment(false);//true);// containment property SDOType workAddress_typeUCUniOutside = new SDOType(workAddressUriUCUniOutside, workAddressNameUCUniOutside); workAddress_typeUCUniOutside.setDataType(false);// not datatype workAddressUCUniOutside.setType(workAddress_typeUCUniOutside); workTypeUCUniOutside.addDeclaredProperty((Property)workAddressUCUniOutside); */ addressWorkUCUniOutside = new SDOProperty(aHelperContext); addressWorkUCUniOutside.setName(addressWorkNameUCUniOutside); // other opposite property must be false addressWorkUCUniOutside.setContainment(true);//false);// containment property SDOType addressWork_typeUCUniOutside = new SDOType(addressWorkUriUCUniOutside, addressWorkNameUCUniOutside); qname = new QName(addressWorkUriUCUniOutside, addressWorkNameUCUniOutside); ((SDOTypeHelper)typeHelper).getTypesHashMap().put(qname, addressWork_typeUCUniOutside); addressWork_typeUCUniOutside.setDataType(false);// not datatype addressWorkUCUniOutside.setType(addressWork_typeUCUniOutside); addressTypeUCUniOutside.addDeclaredProperty((Property)addressWorkUCUniOutside); rootUCUniOutside = (SDODataObject)dataFactory.create(rootUCUniOutsideType); addressObjectUCUniOutside = (SDODataObject)dataFactory.create(addressTypeUCUniOutside); homeObjectUCUniOutside = (SDODataObject)dataFactory.create(homeTypeUCUniOutside); workObjectUCUniOutside = (SDODataObject)dataFactory.create(workTypeUCUniOutside); //addressWorkUCUniOutside.setOpposite(workAddressUCUniOutside); //workAddressUCUniOutside.setOpposite(addressWorkUCUniOutside); rootUCUniOutside.set(rootHomeUCUniOutside, homeObjectUCUniOutside); rootUCUniOutside.set(rootWorkUCUniOutside, workObjectUCUniOutside); // child: homeObjectUCUniOutside.set(homeAddressUCUniOutside, addressObjectUCUniOutside); // set opposite property addressObjectUCUniOutside.set(addressWorkUCUniOutside, workObjectUCUniOutside); // set opposite property //workObjectUCUniOutside.set(workAddressUCUniOutside, addressObjectUCUniOutside); containedDataObject.getChangeSummary().beginLogging(); } }