summaryrefslogtreecommitdiffstats
path: root/tags/cpp-stable-20060304/sdo/runtime/core/test
diff options
context:
space:
mode:
authordims <dims@13f79535-47bb-0310-9956-ffa450edef68>2008-06-17 00:23:01 +0000
committerdims <dims@13f79535-47bb-0310-9956-ffa450edef68>2008-06-17 00:23:01 +0000
commitbdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a (patch)
tree38a92061c0793434c4be189f1d70c3458b6bc41d /tags/cpp-stable-20060304/sdo/runtime/core/test
Move Tuscany from Incubator to top level.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'tags/cpp-stable-20060304/sdo/runtime/core/test')
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtbuild59
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtproject15
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/.project19
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs9
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xml2
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xsd15
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/47293Customer.xsd31
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/47293Order.xsd47
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/Catalog.xsd15
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/Customer.xsd28
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/Makefile.am11
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/Order.xsd39
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/StockQuoteService.wsdl157
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/axis.xsd20
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xml8
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xsd54
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/b46693.xsd157
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/company.xsd30
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xml11
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xsd29
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/companyabs.xsd44
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/companyref.xsd47
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/companysubs.xsd44
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xml8
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xsd28
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xml11
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xsd29
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/g3.xsd21
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/graham1.xsd21
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/graham2.xsd20
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/graham3.xsd22
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/include.xsd14
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/include1.xsd18
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/include2.xsd17
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/includeother3.xsd14
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/many.xml14
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/many.xsd1
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/my-core.xsd21
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/my-implementation-local-java.xsd24
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/my.xsd11
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xml13
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xsd33
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xml13
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xsd8
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/partial.xml14
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-sca.xsd22
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-webservice.xsd21
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-ws.xsd22
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-core.xsd214
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-dll.xsd22
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-java.xsd22
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-local-java.xsd24
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-cpp.xsd49
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-java.xsd24
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-wsdl.xsd23
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-java.xsd23
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-xsd.xsd22
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sca.xsd22
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.cpp4028
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.h123
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp3937
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/t2/include3.xsd14
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother.xsd14
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother1.xsd18
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother2.xsd17
-rw-r--r--tags/cpp-stable-20060304/sdo/runtime/core/test/testopen3.xml1
66 files changed, 9928 insertions, 0 deletions
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtbuild b/tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtbuild
new file mode 100644
index 0000000000..17ebd43324
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtbuild
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 3.0.0?>
+
+<ManagedProjectBuildInfo>
+<project id="tuscany_sdo_test.cdt.managedbuild.target.gnu.exe.841259234" name="Executable (Gnu)" projectType="cdt.managedbuild.target.gnu.exe">
+<configuration artifactName="tuscany_sdo_test" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.exe.debug.1698024418" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.953243590" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.907958268" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.829396762" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+<option id="gnu.cpp.compiler.option.preprocessor.def.1484983546" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+<listOptionValue builtIn="false" value="_DEBUG"/>
+</option>
+<option id="gnu.cpp.compiler.option.include.paths.1537573101" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${project_loc}"/>
+<listOptionValue builtIn="false" value="${project_loc}/../src"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1017750405" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.655773583" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+<option id="gnu.cpp.link.option.libs.684950781" superClass="gnu.cpp.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="tuscany_sdo"/>
+<listOptionValue builtIn="false" value="xml2"/>
+</option>
+<option id="gnu.cpp.link.option.paths.507838253" superClass="gnu.cpp.link.option.paths" valueType="stringList">
+<listOptionValue builtIn="false" value="${project_loc}/../src/Debug"/>
+<listOptionValue builtIn="false" value="${LIBXML2_LIB}"/>
+</option>
+</tool>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.exe.debug.680127870" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug"/>
+<macros/>
+</toolChain>
+</configuration>
+<configuration artifactName="tuscany_sdo_test" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.exe.release.1720042110" name="Release" parent="cdt.managedbuild.config.gnu.exe.release">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1008721532" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1386443308" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.666703052" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+<option id="gnu.cpp.compiler.option.include.paths.1488475926" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${project_loc}/../src"/>
+<listOptionValue builtIn="false" value="${project_loc}"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.release.87016949" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.4247100" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+<option id="gnu.cpp.link.option.libs.73989122" superClass="gnu.cpp.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="xml2"/>
+<listOptionValue builtIn="false" value="tuscany_sdo"/>
+</option>
+<option id="gnu.cpp.link.option.paths.984022714" superClass="gnu.cpp.link.option.paths" valueType="stringList">
+<listOptionValue builtIn="false" value="${project_loc}/../src/Debug"/>
+<listOptionValue builtIn="false" value="${LIBXML2_LIB}"/>
+</option>
+</tool>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.exe.release.937369355" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release"/>
+<macros/>
+</toolChain>
+</configuration>
+<macros/>
+</project>
+</ManagedProjectBuildInfo>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtproject b/tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtproject
new file mode 100644
index 0000000000..48a12e6664
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/.cdtproject
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject id="org.eclipse.cdt.managedbuilder.core.managedMake">
+<extension id="org.eclipse.cdt.managedbuilder.core.ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
+<data>
+<item id="org.eclipse.cdt.core.pathentry">
+<pathentry kind="src" path=""/>
+<pathentry kind="out" path=""/>
+<pathentry kind="con" path="org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER"/>
+</item>
+</data>
+</cdtproject>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/.project b/tags/cpp-stable-20060304/sdo/runtime/core/test/.project
new file mode 100644
index 0000000000..32920ef4cf
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tuscany_sdo_test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ </natures>
+</projectDescription>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/tags/cpp-stable-20060304/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000000..0c77f0af0f
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,9 @@
+#Wed Feb 15 16:37:24 GMT 2006
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1698024418=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.release.1720042110=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1698024418=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.release.1720042110=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.exe.debug.1698024418=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="" name\="LIBXML2_LIB" operation\="replace" value\="/usr/lib"/>\n</environment>\n
+environment/project/cdt.managedbuild.config.gnu.exe.release.1720042110=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="" name\="LIBXML2_LIB" operation\="replace" value\="/usr/lib"/>\n</environment>\n
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xml
new file mode 100644
index 0000000000..66b2d3dbca
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<catalog xmlns="catalogNS" xsi:type="CatalogType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><item xmlns="orderNS"><itemId>1</itemId><description>A Partridge in a Pear Tree</description><price>1.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>2</itemId><description>Turtle Doves</description><price>2.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>3</itemId><description>French Hens</description><price>3.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>4</itemId><description>Calling Birds</description><price>4.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>5</itemId><description>Golden Rings</description><price>5.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>6</itemId><description>Geese a-laying</description><price>6.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>7</itemId><description>Swans a-swimming</description><price>7.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>8</itemId><description>Maids a-milking</description><price>8.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>9</itemId><description>Ladies dancing</description><price>9.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>10</itemId><description>Lords a-leaping</description><price>10.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>11</itemId><description>Pipers piping</description><price>11.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>12</itemId><description>Drummers drumming</description><price>12.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item></catalog>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xsd
new file mode 100644
index 0000000000..53fb9bdc0c
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Catalog.xsd
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cat="catalogNS" xmlns:ord="orderNS" targetNamespace="catalogNS">
+
+ <include schemaLocation="Order.xsd"/>
+
+ <element name="catalog" type="cat:CatalogType"/>
+
+ <complexType name="CatalogType">
+ <sequence>
+ <element maxOccurs="unbounded" ref="ord:item"/>
+ </sequence>
+ </complexType>
+
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Customer.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Customer.xsd
new file mode 100644
index 0000000000..9f09b17244
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Customer.xsd
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cust="customerNS" targetNamespace="customerNS">
+ <element name="customer" type="cust:CustomerType">
+ <complexType name="CustomerType">
+ <sequence>
+ <element name="customerId" type="ID"/>
+ <element name="name" type="string"/>
+ <element name="shipping" type="cust:AddressType">
+ <complexType name="AddressType">
+ <element name="street" type="string"/>
+ <element name="city" type="string"/>
+ <element name="state" type="string"/>
+ <element name="zip" type="string"/>
+ </complexType>
+ </element>
+ <element name="payment" ref="cust:payment"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="payment" type="cust:PaymentType">
+ <complexType name="PaymentType">
+ <element name="paymentId" type="ID"/>
+ <element name="accountNo" type="string"/>
+ <element name="bank" type="string"/>
+ <element name="securityCode" type="string"/>
+ <element name="amount" type="string"/>
+ </complexType>
+ </element>
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Order.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Order.xsd
new file mode 100644
index 0000000000..59d48398a8
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/47293Order.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:ord="orderNS" xmlns:cust="customerNS" targetNamespace="orderNS">
+
+ <include schemaLocation="./Customer.xsd"/>
+
+ <element name="orders" type="ord:OrdersType">
+ <complexType name="OrdersType">
+ <sequence>
+ <element name="order" maxOccurs="unbounded" type="ord:OrderType"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="order" type="ord:OrderType">
+ <complexType name="OrderType">
+ <sequence>
+ <element name="orderId" type="ID"/>
+ <element name="status" type="ord:OrderStatus"/>
+ <element name="item" maxOccurs="unbounded" ref="ord:item"/>
+ <element ref="cust:customer"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="item">
+ <complexType>
+ <element name="itemId" type="integer"/>
+ <element name="description" type="string"/>
+ <element name="price" type="string"/>
+ <element name="quantity" type="integer"/>
+ <element name="warehouseId" type="integer"/>
+ </complexType>
+ </element>
+
+ <simpleType name="OrderStatus">
+ <restriction base="string">
+ <enumeration value="NONE"/>
+ <enumeration value="RECEIVED"/>
+ <enumeration value="INVOICED"/>
+ <enumeration value="DISPATCHED"/>
+ <enumeration value="COMPLETED"/>
+ <enumeration value="CANCELLED"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/Catalog.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/Catalog.xsd
new file mode 100644
index 0000000000..6eebebdd70
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/Catalog.xsd
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cat="catalogNS" targetNamespace="catalogNS">
+
+ <include schemaLocation="./Order.xsd"/>
+
+ <element name="catalog" type="cat:CatalogType"/>
+
+ <complexType name="CatalogType">
+ <sequence>
+ <element maxOccurs="unbounded" ref="ord:item"/>
+ </sequence>
+ </complexType>
+
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/Customer.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/Customer.xsd
new file mode 100644
index 0000000000..b3cd832bce
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/Customer.xsd
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cust="customerNS" targetNamespace="customerNS">
+ <element name="customer" type="cust:CustomerType">
+ <complexType name="CustomerType">
+ <sequence>
+ <element name="customerId" type="ID"/>
+ <element name="name" type="string"/>
+ <element name="shipping" type="cust:AddressType">
+ <complexType name="AddressType">
+ <element name="street" type="string"/>
+ <element name="city" type="string"/>
+ <element name="state" type="string"/>
+ <element name="zip" type="string"/>
+ </complexType>
+ </element>
+ <element name="payment" type="cust:PaymentType">
+ <complexType name="PaymentType">
+ <element name="accountNo" type="string"/>
+ <element name="bank" type="string"/>
+ <element name="securityCode" type="string"/>
+ <element name="amount" type="float"/>
+ </complexType>
+ </element>
+ </sequence>
+ </complexType>
+ </element>
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/Makefile.am b/tags/cpp-stable-20060304/sdo/runtime/core/test/Makefile.am
new file mode 100644
index 0000000000..42e672a25e
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/Makefile.am
@@ -0,0 +1,11 @@
+prgbindir=$(prefix)/bin/test
+prgbin_PROGRAMS = tuscany_sdo_test
+SUBDIRS =
+AM_CPPFLAGS = $(CPPFLAGS)
+tuscany_sdo_test_SOURCES = sdotest.cpp sdotest2.cpp
+
+tuscany_sdo_test_LDADD = -ltuscany_sdo \
+ -L$(top_builddir)/runtime/core/src/commonj/sdo -lxml2 -lstdc++
+
+INCLUDES = -I$(top_builddir)/runtime/core/test \
+ -I$(top_builddir)/runtime/core/src
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/Order.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/Order.xsd
new file mode 100644
index 0000000000..1ece31ac0b
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/Order.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:ord="orderNS" xmlns:cust="customerNS" targetNamespace="orderNS">
+
+<include schemaLocation="./Customer.xsd"/>
+
+<element name="order" type="ord:OrderType">
+ <complexType name="OrderType">
+ <sequence>
+ <element name="orderId" type="ID"/>
+ <element name="status" type="ord:OrderStatus"/>
+ <element name="item" maxOccurs="unbounded" ref="ord:item"/>
+ <element ref="cust:customer"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="item">
+ <complexType>
+ <element name="itemId" type="integer"/>
+ <element name="description" type="string"/>
+ <element name="price" type="string"/>
+ <element name="quantity" type="integer"/>
+ <element name="warehouseId" type="integer"/>
+ </complexType>
+ </element>
+
+ <simpleType name="OrderStatus">
+ <restriction base="string">
+ <enumeration value="NONE"/>
+ <enumeration value="RECEIVED"/>
+ <enumeration value="INVOICED"/>
+ <enumeration value="DISPATCHED"/>
+ <enumeration value="COMPLETED"/>
+ <enumeration value="CANCELLED"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/StockQuoteService.wsdl b/tags/cpp-stable-20060304/sdo/runtime/core/test/StockQuoteService.wsdl
new file mode 100644
index 0000000000..4917cde583
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/StockQuoteService.wsdl
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:s="http://www.w3.org/2001/XMLSchema"
+ xmlns:s0="http://swanandmokashi.com"
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
+ xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+ <types>
+ <s:schema elementFormDefault="qualified"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns:s="http://www.w3.org/2001/XMLSchema">
+ <s:element name="GetQuotes">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="QuoteTicker" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuotesResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="GetQuotesResult" type="s0:ArrayOfQuote" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:complexType name="ArrayOfQuote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="unbounded"
+ name="Quote" type="s0:Quote" />
+ </s:sequence>
+ </s:complexType>
+ <s:complexType name="Quote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="CompanyName" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockTicker" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockQuote" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="LastUpdated" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Change"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="OpenPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayHighPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayLowPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Volume"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="MarketCap" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="YearRange" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ <s:element name="ArrayOfQuote" nillable="true"
+ type="s0:ArrayOfQuote" />
+ </s:schema>
+ </types>
+ <message name="GetQuotesSoapIn">
+ <part name="parameters" element="s0:GetQuotes" />
+ </message>
+ <message name="GetQuotesSoapOut">
+ <part name="parameters" element="s0:GetQuotesResponse" />
+ </message>
+ <message name="GetQuotesHttpGetIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpGetOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <message name="GetQuotesHttpPostIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpPostOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <portType name="StockQuotesSoap">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesSoapIn" />
+ <output name="GetQuotes" message="s0:GetQuotesSoapOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpGet">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpGetIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpGetOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpPost">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpPostIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpPostOut" />
+ </operation>
+ </portType>
+ <binding name="StockQuotesSoap" type="s0:StockQuotesSoap">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+ style="document" />
+ <operation name="GetStockQuotes">
+ <soap:operation
+ soapAction="http://swanandmokashi.com/GetQuotes" style="document" />
+ <input name="GetQuotes">
+ <soap:body use="literal" />
+ </input>
+ <output name="GetQuotes">
+ <soap:body use="literal" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpGet" type="s0:StockQuotesHttpGet">
+ <http:binding verb="GET" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <http:urlEncoded />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpPost" type="s0:StockQuotesHttpPost">
+ <http:binding verb="POST" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <mime:content type="application/x-www-form-urlencoded" />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <service name="StockQuotes">
+ <port name="StockQuotesSoap" binding="s0:StockQuotesSoap">
+ <soap:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpGet"
+ binding="s0:StockQuotesHttpGet">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpPost"
+ binding="s0:StockQuotesHttpPost">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ </service>
+</definitions>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/axis.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/axis.xsd
new file mode 100644
index 0000000000..eca2f0cf22
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/axis.xsd
@@ -0,0 +1,20 @@
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="axis" targetNamespace="axis">
+<xsd:element name="ItemSearch" >
+ <xsd:complexType >
+ <xsd:sequence>
+<xsd:element name="SubscriptionId" type="xsd:string" minOccurs="0" />
+<xsd:element name="AssociateTag" type="xsd:string" minOccurs="0" />
+<xsd:element name="XMLEscaping" type="xsd:string" minOccurs="0" />
+<xsd:element name="Validate" type="xsd:string" minOccurs="0" />
+<xsd:element name="Shared" type="tns:ItemSearchRequest" minOccurs="0" />
+<xsd:element name="Request" type="tns:ItemSearchRequest" minOccurs="0" maxOccurs="unbounded" />
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+ <xsd:complexType name="ItemSearchRequest">
+ <xsd:sequence>
+<xsd:element name="Keywords" type="xsd:string" minOccurs="0" />
+<xsd:element name="SearchIndex" type="xsd:string" minOccurs="0" />
+</xsd:sequence>
+</xsd:complexType>
+</xsd:schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xml
new file mode 100644
index 0000000000..823ef80944
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<companyType xmlns="companyNS" xsi:type="CompanyType"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="#/CEO">
+<departments name="Shoe">
+<employees name="Sarah Jones"/>
+</departments>
+<CEO name="Fred Smith"/>
+</companyType>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xsd
new file mode 100644
index 0000000000..7f8e155406
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/b46617b.xsd
@@ -0,0 +1,54 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
+xmlns:tns="companyNS" targetNamespace="companyNS">
+<xsd:element name="employeeType" type="tns:EmployeeType"/>
+<xsd:complexType name="EmployeeType">
+<xsd:sequence>
+<xsd:element name="name" type="xsd:String" minOccurs="0"/>
+<xsd:element name="SN" type="xsd:String" minOccurs="0"/>
+<xsd:element name="manager" type="xsd:boolean" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="departmentType" type="tns:DepartmentType"/>
+<xsd:complexType name="DepartmentType">
+<xsd:sequence><xsd:element name="name" type="xsd:String" minOccurs="0"/>
+<xsd:element name="location" type="xsd:String" minOccurs="0"/>
+<xsd:element name="number" type="xsd:integer" minOccurs="0"/>
+<xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="companyType" type="tns:CompanyType"/>
+<xsd:complexType name="CompanyType" mixed="true">
+<xsd:choice maxOccurs="unbounded">
+<xsd:element name="name" type="xsd:String" minOccurs="0"/>
+<xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="CEO" type="tns:EmployeeType" minOccurs="0"/>
+<xsd:element name="string" type="xsd:String" minOccurs="0"/>
+<xsd:element name="bool" type="xsd:boolean" minOccurs="0"/>
+<xsd:element name="byte" type="xsd:byte" minOccurs="0"/>
+<xsd:element name="bytes" type="xsd:hexBinary" minOccurs="0"/>
+<xsd:element name="char" type="xsd:string" minOccurs="0"/>
+<xsd:element name="date" type="xsd:dateTime" minOccurs="0"/>
+<xsd:element name="double" type="xsd:double" minOccurs="0"/>
+<xsd:element name="float" type="xsd:float" minOccurs="0"/>
+<xsd:element name="int" type="xsd:integer" minOccurs="0"/>
+<xsd:element name="long" type="xsd:long" minOccurs="0"/>
+<xsd:element name="short" type="xsd:short" minOccurs="0"/>
+<xsd:element name="uri" type="xsd:anyURI" minOccurs="0"/>
+<xsd:element name="Mstring" type="xsd:String" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mbool" type="xsd:boolean" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mbyte" type="xsd:byte" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mbytes" type="xsd:hexBinary" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mchar" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mdate" type="xsd:dateTime" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mdouble" type="xsd:double" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mfloat" type="xsd:float" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mint" type="xsd:integer" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mlong" type="xsd:long" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mshort" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Muri" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:choice>
+<xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/>
+<xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:IDREF"/>
+</xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/b46693.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/b46693.xsd
new file mode 100644
index 0000000000..11eb2e964a
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/b46693.xsd
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:s="http://www.w3.org/2001/XMLSchema"
+ xmlns:s0="http://swanandmokashi.com"
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
+ xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+ <types>
+ <s:schema elementFormDefault="qualified"
+ targetNamespace="http://swanandmokashi.com">
+ <s:element name="GetQuotes">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="QuoteTicker" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuotesResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="GetQuotesResult" type="s0:ArrayOfQuote" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:complexType name="ArrayOfQuote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="unbounded"
+ name="Quote" type="s0:Quote" />
+ </s:sequence>
+ </s:complexType>
+ <s:complexType name="Quote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="CompanyName" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockTicker" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockQuote" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="LastUpdated" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Change"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="OpenPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayHighPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayLowPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Volume"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="MarketCap" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="YearRange" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ <s:element name="ArrayOfQuote" nillable="true"
+ type="s0:ArrayOfQuote" />
+ </s:schema>
+ </types>
+ <message name="GetQuotesSoapIn">
+ <part name="parameters" element="s0:GetQuotes" />
+ </message>
+ <message name="GetQuotesSoapOut">
+ <part name="parameters" element="s0:GetQuotesResponse" />
+ </message>
+ <message name="GetQuotesHttpGetIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpGetOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <message name="GetQuotesHttpPostIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpPostOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <portType name="StockQuotesSoap">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesSoapIn" />
+ <output name="GetQuotes" message="s0:GetQuotesSoapOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpGet">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpGetIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpGetOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpPost">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpPostIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpPostOut" />
+ </operation>
+ </portType>
+ <binding name="StockQuotesSoap" type="s0:StockQuotesSoap">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+ style="document" />
+ <operation name="GetStockQuotes">
+ <soap:operation
+ soapAction="http://swanandmokashi.com/GetQuotes" style="document" />
+ <input name="GetQuotes">
+ <soap:body use="literal" />
+ </input>
+ <output name="GetQuotes">
+ <soap:body use="literal" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpGet" type="s0:StockQuotesHttpGet">
+ <http:binding verb="GET" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <http:urlEncoded />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpPost" type="s0:StockQuotesHttpPost">
+ <http:binding verb="POST" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <mime:content type="application/x-www-form-urlencoded" />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <service name="StockQuotes">
+ <port name="StockQuotesSoap" binding="s0:StockQuotesSoap">
+ <soap:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpGet"
+ binding="s0:StockQuotesHttpGet">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpPost"
+ binding="s0:StockQuotesHttpPost">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ </service>
+</definitions>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/company.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/company.xsd
new file mode 100644
index 0000000000..8c5ea4a7c1
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/company.xsd
@@ -0,0 +1,30 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xml
new file mode 100644
index 0000000000..cc6e93e4bb
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+ <!-- This XML has an employee with an SN of nil, which should appear in the SDO as NULL
+ -->
+ <company xmlns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="#/departments.0/employees.1">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees>
+<name>Jane Doe</name>
+<SN xsi:nil="true" />
+</employees>
+</departments>
+</company> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xsd
new file mode 100644
index 0000000000..3738da590f
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/company_with_nillable_SN.xsd
@@ -0,0 +1,29 @@
+<!-- This XSD recasts the properties of employee to elements in order to allow the SN property to be nillable -->
+<xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF"
+sdoxml:propertyType="company:EmployeeType"/> </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="SN" type="xsd:ID" nillable="true"/>
+ <xsd:element name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/companyabs.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/companyabs.xsd
new file mode 100644
index 0000000000..bc47867904
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/companyabs.xsd
@@ -0,0 +1,44 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ <xsd:element name="Publication" type="company:PublicationType" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ <xsd:complexType name="BookType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="author" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="MagazineType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="editor" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="PublicationType" abstract="true" >
+ <xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:element name="Book" type="company:BookType" substitutionGroup="Publication" />
+ <xsd:element name="Magazine" type="company:MagazineType" substitutionGroup="company:Publication" />
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/companyref.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/companyref.xsd
new file mode 100644
index 0000000000..0d4b1240c0
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/companyref.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ elementFormDefault="qualified">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ <xsd:element name="my.Publication" ref="publication" sdo:name="MyPublication" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ <xsd:complexType name="BookType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="author" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="MagazineType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="editor" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="PublicationType">
+ <xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:element name="my.book" sdo:name="MyBook" type="company:BookType" substitutionGroup="Publication" />
+ <xsd:element name="my.magazine" sdo:name="MyMagazine" type="company:MagazineType" substitutionGroup="company:Publication" />
+ <xsd:element name="my.publication" sdo:name="MyPublication" type="company:PublicationType"/>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/companysubs.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/companysubs.xsd
new file mode 100644
index 0000000000..2ffb626e90
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/companysubs.xsd
@@ -0,0 +1,44 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ <xsd:element name="Publication" type="company:PublicationType" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ <xsd:complexType name="BookType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="author" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="MagazineType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="editor" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="PublicationType">
+ <xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:element name="Book" type="company:BookType" substitutionGroup="Publication" />
+ <xsd:element name="Magazine" type="company:MagazineType" substitutionGroup="company:Publication" />
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xml
new file mode 100644
index 0000000000..1397087013
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<company targetNameSpace="hghgh" xmlns="companyNS" name="MegaCorp" employeeOfTheMonth="#/departments.0/employees.1">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="John Jones" SN="E0001" />
+<employees name="Jane Doe" SN="E0003" />
+<employees name="Al Smith" SN="E0004" manager="true" />
+</departments>
+</company> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xsd
new file mode 100644
index 0000000000..ca3583f6df
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/doctest.xsd
@@ -0,0 +1,28 @@
+<xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF"
+sdoxml:propertyType="company:EmployeeType"/> </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xml
new file mode 100644
index 0000000000..cc6e93e4bb
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+ <!-- This XML has an employee with an SN of nil, which should appear in the SDO as NULL
+ -->
+ <company xmlns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="#/departments.0/employees.1">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees>
+<name>Jane Doe</name>
+<SN xsi:nil="true" />
+</employees>
+</departments>
+</company> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xsd
new file mode 100644
index 0000000000..6cc581de35
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/error1.xsd
@@ -0,0 +1,29 @@
+<!-- This XSD recasts the properties of employee to elements in order to allow the SN property to be nillable -->
+<xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF"
+sdoxml:propertyType="company:EmployeeType"/> </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="SN" type="xsd:ID" nillable="true"/>
+ <xsd:element name="manager" type="xsd:boolean"/>
+
+</xsd:schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/g3.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/g3.xsd
new file mode 100644
index 0000000000..77a586f516
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/g3.xsd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ <xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="quote"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="quote">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="phrase"/>
+ <xs:element ref="author"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+</xs:schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/graham1.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/graham1.xsd
new file mode 100644
index 0000000000..c68f1d5b68
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/graham1.xsd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ <xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="quote"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="quote">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="phrase"/>
+ <xs:element ref="author"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+</xs:schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/graham2.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/graham2.xsd
new file mode 100644
index 0000000000..6b4e0dcbb1
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/graham2.xsd
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+xmlns:quotes="quotesNS" targetNamespace="quotesNS">
+<xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="quote"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="quote" >
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/graham3.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/graham3.xsd
new file mode 100644
index 0000000000..61c72577d0
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/graham3.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+>
+<!--
+xmlns:quotes="quotesNS" targetNamespace="quotesNS"
+-->
+<xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="quote" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/include.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/include.xsd
new file mode 100644
index 0000000000..67f3cb5501
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/include.xsd
@@ -0,0 +1,14 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:include schemaLocation = "include1.xsd"/>
+ <xsd:include schemaLocation = "./include2.xsd"/>
+ <xsd:include schemaLocation = "../t2/include3.xsd"/>
+
+
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/include1.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/include1.xsd
new file mode 100644
index 0000000000..98705f6418
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/include1.xsd
@@ -0,0 +1,18 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/include2.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/include2.xsd
new file mode 100644
index 0000000000..66dfca00a8
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/include2.xsd
@@ -0,0 +1,17 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/includeother3.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/includeother3.xsd
new file mode 100644
index 0000000000..a74c94e318
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/includeother3.xsd
@@ -0,0 +1,14 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/many.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/many.xml
new file mode 100644
index 0000000000..72a073cd11
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/many.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" >
+<openlist>Three member</openlist>
+<openlist>Open bytes</openlist>
+<openlist>List is complete</openlist>
+</employees><employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/many.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/many.xsd
new file mode 100644
index 0000000000..a40b21a0da
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/many.xsd
@@ -0,0 +1 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="companyNS" targetNamespace="companyNS"><xsd:element name="companyType" type="tns:CompanyType"/><xsd:complexType name="CompanyType" sdo:aliasName="TheFirm TheBigFirm"><xsd:sequence><xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded" sdo:aliasName="TheDepartments MYDepartments"/></xsd:sequence><xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:anyURI"/></xsd:complexType><xsd:element name="departmentType" type="tns:DepartmentType"/><xsd:complexType name="DepartmentType"><xsd:sequence><xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="location" type="xsd:String"/><xsd:attribute name="number" type="xsd:String"/></xsd:complexType><xsd:element name="employeeType" type="tns:EmployeeType"/><xsd:complexType name="EmployeeType"><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="SN" type="xsd:String"/><xsd:attribute name="manager" type="xsd:boolean"/><xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/><xsd:anyAttribute namespace="##any" processContents="lax"/></xsd:complexType><xsd:element name="openType" type="tns:OpenType"/><xsd:complexType name="OpenType"><xsd:attribute name="name" type="xsd:String"/></xsd:complexType></xsd:schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/my-core.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/my-core.xsd
new file mode 100644
index 0000000000..2d1a84f9fb
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/my-core.xsd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+
+
+ <complexType name="Component">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:implementation"/>
+ </sequence>
+ </complexType>
+
+ <element name="implementation" type="sca:Implementation"/>
+ <complexType name="Implementation"/>
+
+
+
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/my-implementation-local-java.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/my-implementation-local-java.xsd
new file mode 100644
index 0000000000..7501eafd25
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/my-implementation-local-java.xsd
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="my-core.xsd"/>
+
+ <element name="implementation.local.java" type="sca:LocalJavaImplementation" substitutionGroup="sca:implementation" sdo:name="implementationLocalJava"/>
+ <complexType name="LocalJavaImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <attribute name="scope" type="sca:Scope" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/my.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/my.xsd
new file mode 100644
index 0000000000..da66b397bf
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/my.xsd
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/">
+
+ <include schemaLocation="my-core.xsd"/>
+
+ <include schemaLocation="my-implementation-local-java.xsd"/>
+
+
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xml
new file mode 100644
index 0000000000..9af06a8b02
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tp="teapot" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" tp:openstring="Value Of Open String" tp:openboolean="true">
+<tp:openintlist>45</tp:openintlist>
+</employees>
+<employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xsd
new file mode 100644
index 0000000000..98a12eb8c6
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS.xsd
@@ -0,0 +1,33 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
+xmlns:tns="companyNS" targetNamespace="companyNS">
+<xsd:element name="companyType" type="tns:CompanyType"/>
+<xsd:complexType name="CompanyType" sdo:aliasName="TheFirm TheBigFirm">
+<xsd:sequence>
+<xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded" sdo:aliasName="TheDepartments MYDepartments"/>
+</xsd:sequence>
+<xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/>
+<xsd:attribute name="name" type="xsd:String"/>
+<xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:anyURI"/>
+</xsd:complexType><xsd:element name="departmentType" type="tns:DepartmentType"/>
+<xsd:complexType name="DepartmentType">
+<xsd:sequence>
+<xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="name" type="xsd:String"/>
+<xsd:attribute name="location" type="xsd:String"/>
+<xsd:attribute name="number" type="xsd:String"/>
+</xsd:complexType>
+<xsd:element name="employeeType" type="tns:EmployeeType"/>
+<xsd:complexType name="EmployeeType">
+<xsd:attribute name="name" type="xsd:String"/>
+<xsd:attribute name="SN" type="xsd:String"/>
+<xsd:attribute name="manager" type="xsd:boolean"/>
+<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:anyAttribute namespace="##any" processContents="lax"/>
+</xsd:complexType>
+<xsd:element name="openType" type="tns:OpenType"/>
+<xsd:complexType name="OpenType">
+<xsd:attribute name="name" type="xsd:String"/>
+</xsd:complexType>
+</xsd:schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xml
new file mode 100644
index 0000000000..100ff60176
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tp="twilbur" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" tp:openstring="Value Of Open String" tp:openboolean="true">
+<tp:openintlist>45</tp:openintlist>
+</employees>
+<employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xsd
new file mode 100644
index 0000000000..f62ea912b7
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/openloadNS2.xsd
@@ -0,0 +1,8 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
+xmlns:tns="teapot" targetNamespace="teapot">
+<xsd:attribute name="openboolean" type="xsd:boolean"/>
+<xsd:element name="openintlist" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:attribute name="openstring" type="xsd:hexBinary"/>
+</xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/partial.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/partial.xml
new file mode 100644
index 0000000000..49563ecbeb
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/partial.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true">
+<openintlist>45</openintlist>
+<opendataobjectlist xmlns="companyNS" xsi:type="OpenType" name="MyOpenName"/>
+<opendataobject xsi:type="OpenType" name="MyOpenName"/>
+</employees><employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-sca.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-sca.xsd
new file mode 100644
index 0000000000..2097cff917
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-sca.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.sca" type="sca:SCARemoteBinding" substitutionGroup="sca:binding" sdo:name="bindingSca"/>
+ <complexType name="SCARemoteBinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="target" type="anyURI" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-webservice.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-webservice.xsd
new file mode 100644
index 0000000000..39196c48f8
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-webservice.xsd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.ws" type="sca:WebServiceBinding" substitutionGroup="sca:binding"/>
+ <complexType name="WebServiceBinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="port" type="anyURI" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-ws.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-ws.xsd
new file mode 100644
index 0000000000..fd528710c1
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-binding-ws.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.ws" type="sca:WebServiceBinding" substitutionGroup="sca:binding" sdo:name="bindingWs"/>
+ <complexType name="WebServiceBinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="port" type="anyURI" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-core.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-core.xsd
new file mode 100644
index 0000000000..b3c90210ed
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-core.xsd
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-policy.xsd" />
+
+ <element name="componentType" type="sca:ComponentType"/>
+ <complexType name="ComponentType">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="service" type="sca:Service"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="reference" type="sca:Reference"/>
+ <element minOccurs="0" maxOccurs="unbounded" ref="sca:property"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="Service">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="interface" type="sca:Interface"/>
+ <complexType name="Interface"/>
+
+ <complexType name="Reference">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="multiplicity" type="sca:Multiplicity" use="optional" default="1..1"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="property" type="sca:Property"/>
+ <complexType name="Property" abstract="true">
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="many" type="boolean" default="false" use="optional"/>
+ <attribute name="default" type="string" use="optional"/>
+ </complexType>
+
+
+ <element name="moduleFragment" type="sca:ModuleFragment"/>
+ <complexType name="ModuleFragment">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="entryPoint" type="sca:EntryPoint"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="component" type="sca:Component"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="externalService" type="sca:ExternalService"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="wire" type="sca:ModuleWire"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="module" type="sca:ModuleFragment"/>
+
+
+ <complexType name="EntryPoint">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:binding"/>
+ <element minOccurs="1" maxOccurs="1" name="reference" type="anyType"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="overridable" type="boolean" default="true" use="optional"/>
+ <attribute name="multiplicity" type="sca:Multiplicity" use="optional" default="1..1"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+ <!-- a multiplicity 1..1 sample
+ <reference>StockQuoteComponent</reference> - type must be URI
+ a multiplicity 0..n sample
+ <reference>
+ <value>StockQuoteComponent1</value> - type must be URI
+ <value>StockQuoteComponent2</value>
+ </reference>
+ -->
+
+ <element name="binding" type="sca:Binding"/>
+ <complexType name="Binding"/>
+
+
+ <complexType name="Component">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:implementation"/>
+ <element minOccurs="0" maxOccurs="1" name="properties" type="sca:PropertyValues"/>
+ <element minOccurs="0" maxOccurs="1" name="references" type="sca:ReferenceValues"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+ <!-- a multiplicity 1..1 sample
+ <references>
+ <v:stockQuote>StockQuoteComponent</v:stockquote> - type must be URI
+ </references>
+ a multiplicity 0..n sample
+ <references>
+ <v:stockQuote>
+ <value>StockQuoteComponent1</value> - type must be URI
+ <value>StockQuoteComponent2</value>
+ </v:stockquote>
+ </references>
+ -->
+
+ <element name="implementation" type="sca:Implementation"/>
+ <complexType name="Implementation"/>
+
+ <complexType name="PropertyValues">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+ <complexType name="ReferenceValues">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+
+ <complexType name="ExternalService">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:binding"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="overridable" type="boolean" default="true" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+
+ <complexType name="ModuleWire">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:source.uri" sdo:name="sourceUri"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:target.uri" sdo:name="targetUri"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="source.uri" type="anyURI" substitutionGroup="sca:source" sdo:name="sourceUri"/>
+ <element name="target.uri" type="anyURI" substitutionGroup="sca:target" sdo:name="targetUri"/>
+
+
+ <element name="subsystem" type="sca:Subsystem"/>
+ <complexType name="Subsystem">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="entryPoint" type="sca:EntryPoint"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="moduleComponent" type="sca:ModuleComponent"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="externalService" type="sca:ExternalService"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="wire" type="sca:SystemWire"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+ <complexType name="ModuleComponent">
+ <sequence>
+ <element minOccurs="0" maxOccurs="1" name="references" type="sca:ReferenceValues"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="module" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="SystemWire">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:source.uri" sdo:name="sourceUri"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:target.uri" sdo:name="targetUri" />
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+ <element name="source" type="anyType"/>
+ <element name="source.epr" type="anyType" substitutionGroup="sca:source" sdo:name="sourceEpr"/>
+
+ <element name="target" type="anyType"/>
+ <element name="target.epr" type="anyType" substitutionGroup="sca:target" sdo:name="targetEpr"/>
+
+
+ <simpleType name="Multiplicity">
+ <restriction base="string">
+ <enumeration value="0..1"/>
+ <enumeration value="1..1"/>
+ <enumeration value="0..n"/>
+ <enumeration value="1..n"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="Scope">
+ <restriction base="string">
+ <enumeration value="instance"/>
+ <enumeration value="request"/>
+ <enumeration value="session"/>
+ <enumeration value="module"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-dll.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-dll.xsd
new file mode 100644
index 0000000000..da4392b9e7
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-dll.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.dll" type="sca:DLLImplementation" substitutionGroup="sca:implementation" sdo:name="implementationDll"/>
+ <complexType name="DLLImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="dll" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-java.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-java.xsd
new file mode 100644
index 0000000000..5adb548ad4
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-java.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.java" type="sca:JavaImplementation" substitutionGroup="sca:implementation" sdo:name="implementationJava"/>
+ <complexType name="JavaImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-local-java.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-local-java.xsd
new file mode 100644
index 0000000000..13286d728e
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-implementation-local-java.xsd
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.local.java" type="sca:LocalJavaImplementation" substitutionGroup="sca:implementation" sdo:name="implementationLocalJava"/>
+ <complexType name="LocalJavaImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <attribute name="scope" type="sca:Scope" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-cpp.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-cpp.xsd
new file mode 100644
index 0000000000..8ea5b09cd0
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-cpp.xsd
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.cpp" type="sca:CPPInterface" substitutionGroup="sca:interface"
+ sdo:name="interfaceCpp"/>
+ <complexType name="CPPInterface">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <element minOccurs="1" name="operation" type="sca:Operation"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <!-- C++ operation declaration -->
+ <complexType name="Operation">
+ <complexContent>
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" name="return" type="sca:ReturnType"/>
+ <element minOccurs="0" name="parameter" type="sca:ParameterType"/>
+ </sequence>
+ <attribute name="name" type="string" use="required"/>
+ </complexContent>
+ </complexType>
+
+ <simpleType name="ReturnType">
+ <restriction base="string">
+ <enumeration value="float"/>
+ <enumeration value="void"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="ParameterType">
+ <restriction base="string">
+ <enumeration value="float"/>
+ <enumeration value="const char *"/>
+ </restriction>
+ </simpleType>
+
+
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-java.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-java.xsd
new file mode 100644
index 0000000000..160d84f74a
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-java.xsd
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.java" type="sca:JavaInterface" substitutionGroup="sca:interface" sdo:name="interfaceJava"/>
+ <complexType name="JavaInterface">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="interface" type="NCName" use="required"/>
+ <attribute name="callbackInterface" type="NCName" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-wsdl.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-wsdl.xsd
new file mode 100644
index 0000000000..5c84b9a674
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-interface-wsdl.xsd
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.wsdl" type="sca:WSDLPortType" substitutionGroup="sca:interface" sdo:name="interfaceWsdl"/>
+ <complexType name="WSDLPortType">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="interface" type="anyURI" use="required"/>
+ <attribute name="callbackInterface" type="anyURI" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-java.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-java.xsd
new file mode 100644
index 0000000000..21acbeaab6
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-java.xsd
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="property.java" type="sca:JavaProperty" substitutionGroup="sca:property" sdo:name="propertyJava"/>
+ <complexType name="JavaProperty">
+ <complexContent>
+ <extension base="sca:Property">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-xsd.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-xsd.xsd
new file mode 100644
index 0000000000..24b9d00e07
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca-property-xsd.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="property.xsd" type="sca:XSDProperty" substitutionGroup="sca:property" sdo:name="propertyXsd"/>
+ <complexType name="XSDProperty">
+ <complexContent>
+ <extension base="sca:Property">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="type" type="anyURI" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sca.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca.xsd
new file mode 100644
index 0000000000..a0d61568e2
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sca.xsd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <include schemaLocation="sca-interface-wsdl.xsd"/>
+ <include schemaLocation="sca-interface-cpp.xsd"/>
+ <include schemaLocation="sca-interface-java.xsd"/>
+
+ <include schemaLocation="sca-property-xsd.xsd"/>
+
+ <include schemaLocation="sca-implementation-dll.xsd"/>
+
+ <include schemaLocation="sca-implementation-java.xsd"/>
+ <include schemaLocation="sca-implementation-local-java.xsd"/>
+
+ <include schemaLocation="sca-binding-ws.xsd"/>
+
+
+</schema> \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.cpp b/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.cpp
new file mode 100644
index 0000000000..d5e0c0d5c3
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.cpp
@@ -0,0 +1,4028 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:31 $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+using namespace std;
+
+// #include "TypeImpl.h"
+
+#include "sdotest.h"
+
+
+
+using namespace commonj::sdo;
+
+// very basic print of a data graph
+
+typedef struct {
+ //zend_object zo; /* The standard zend_object */
+ DataObjectPtr dop; /* The Hydra DataObject */
+ //zend_object *df; /* The Data Factory */
+} sdo_doimpl_object;
+
+
+void sdotest::rcptest()
+{
+ DataFactoryPtr mdg;
+ sdo_doimpl_object* ptr;
+
+ cout << "RCPtest" << endl;
+
+ mdg = DataFactory::getDataFactory();
+ mdg = 0;
+ mdg = DataFactory::getDataFactory();
+ mdg = NULL;
+ mdg = DataFactory::getDataFactory();
+
+ cout << "RCPtest 2" << endl;
+
+ mdg->addType("myspace","Root");
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+
+ ptr = new sdo_doimpl_object;
+
+
+ ptr->dop = mdg->create((Type&)tcc);
+
+
+ //delete ptr->dop;
+
+
+ ptr->dop = 0; // null ;
+
+}
+
+
+
+void printDataStructure(DataFactory* dd)
+{
+ TypeList tt = dd->getTypes();
+ cout << "Printing Types\n";
+ for (int i = 0; i < tt.size(); ++i)
+ {
+ cout << "Type " << tt[i].getName() << "\n";
+ PropertyList pl = tt[i].getProperties();
+ for (int j = 0; j < pl.size() ; j++)
+ {
+ cout << "Has Property " << pl[j].getName() <<
+ " of type ";
+ cout << pl[j].getType().getName() << "\n";
+ }
+ }
+}
+
+
+void sdotest::changesummarytest()
+{
+ scenario5();
+ scenario1();
+ scenario2();
+ scenario3();
+ scenario4();
+
+}
+
+
+
+
+void sdotest::printOldValues(ChangeSummaryPtr cs, DataObjectPtr dol)
+{
+ cout << "===== Old Property Values Begin=====================================" << endl;
+ SettingList& sl = cs->getOldValues(dol);
+ if (sl.size() == 0)
+ {
+ cout << "No Settings found" << endl;
+ }
+ else
+ {
+ for (int j=0;j< sl.size(); j++)
+ {
+ cout << "Property " << sl[j].getProperty().getName();
+ // this could be a many-valued property, and could be one which is
+ // a data object or a data type...
+ if (sl[j].getProperty().isMany())
+ {
+ cout << "[" << sl[j].getIndex() << "]" ;
+ }
+ if (!sl[j].isSet())
+ {
+ cout << "(UNSET)";
+ }
+ if (sl[j].isNull())
+ {
+ cout << "(ISNULL)";
+ }
+
+ cout << " of type " ;
+ switch (sl[j].getProperty().getTypeEnum())
+ {
+ case Type::BooleanType:
+ cout << "Boolean:" << sl[j].getBooleanValue();
+ break;
+ case Type::ByteType:
+ cout << "Byte:" << sl[j].getByteValue();
+ break;
+ case Type::CharacterType:
+ cout << "Character:" << sl[j].getCharacterValue();
+ break;
+ case Type::IntegerType:
+ cout << "Integer:" << sl[j].getIntegerValue();
+ break;
+ case Type::ShortType:
+ cout << "Short:" << sl[j].getShortValue();
+ break;
+ case Type::DoubleType:
+ cout << "Double:" << sl[j].getDoubleValue();
+ break;
+ case Type::FloatType:
+ cout << "Float:" << sl[j].getFloatValue();
+ break;
+ case Type::LongType:
+ cout << "Long:" << sl[j].getIntegerValue();
+ break;
+ case Type::DateType:
+ cout << "Date:" << sl[j].getDateValue().getTime();
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ cout << "String:" << sl[j].getCStringValue();
+ break;
+ case Type::BytesType:
+ cout << "Bytes:" << sl[j].getCStringValue();
+ break;
+ case Type::OtherTypes:
+ case Type::DataObjectType:
+ case Type::ChangeSummaryType:
+ {
+ cout << "DataObject " ;
+ DataObjectPtr dob = sl[j].getDataObjectValue();
+ if (!dob)
+ {
+ cout << " - object null or unset" ;
+ }
+ else
+ {
+ DataObjectPtr mydo = sl[j].getDataObjectValue();
+ if (cs->isDeleted(mydo))
+ {
+ cout << " - object deleted " << endl;
+ printOldValues(cs,mydo);
+ }
+ else
+ {
+ cout << " object still exists " << endl;
+ //printDataObject(mydo);
+ }
+ }
+ }
+ break;
+ default:
+ {
+ cout << "Unknown object type";
+ }
+ break;
+ }
+ cout << endl;
+ }
+ }
+ cout << "===== Old Property Values End ======================================" << endl;
+}
+
+
+void sdotest::printValue(DataObjectPtr dp, const Property& p)
+{
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ cout << "boolean:" << dp->getBoolean(p);
+ break;
+ case Type::ByteType:
+ cout << "Byte:" << dp->getByte(p);
+ break;
+ case Type::CharacterType:
+ cout << "character:" << dp->getCharacter(p);
+ break;
+ case Type::IntegerType:
+ cout << "integer:" << dp->getInteger(p);
+ break;
+ case Type::ShortType:
+ cout << "short:" << dp->getShort(p);
+ break;
+ case Type::DoubleType:
+ cout << "double:" << dp->getDouble(p);
+ break;
+ case Type::FloatType:
+ cout << "float:" << dp->getFloat(p);
+ break;
+ case Type::LongType:
+ cout << "long:" << "cheat" << dp->getInteger(p);
+ break;
+ case Type::DateType:
+ cout << "date:" << dp->getDate(p).getTime();
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ cout << "string:" << dp->getCString(p);
+ break;
+ case Type::BytesType:
+ cout << "bytes:" << dp->getCString(p);
+ break;
+ case Type::DataObjectType:
+ {
+ cout << "dataObject" ;
+ DataObjectPtr dob = dp->getDataObject(p);
+ if (!dob)
+ {
+ cout << " - null or unset" ;
+ }
+ else
+ {
+ cout << endl;
+ printDataObject(dob);
+ }
+ }
+ break;
+ case Type::OtherTypes:
+ case Type::ChangeSummaryType:
+ default:
+ {
+ cout << "Unknown object type";
+ }
+ break;
+ }
+ cout << endl;
+}
+
+void sdotest::printList(DataObjectPtr dp, const Property& p)
+{
+ DataObjectList& dobl = dp->getList(p);
+ cout << " list ";
+
+ if (dobl.size() ==0) {
+ cout << "(empty)" << endl;
+ return;
+ }
+
+ for (int i=0;i<dobl.size();i++) {
+
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ cout << "boolean[" << i << "]=" << dobl.getBoolean(i);
+ break;
+ case Type::ByteType:
+ cout << "byte[" << i << "]=" << dobl.getByte(i);
+ break;
+ case Type::CharacterType:
+ cout << "character[" << i << "]=" << dobl.getCharacter(i);
+ break;
+ case Type::IntegerType:
+ cout << "integer[" << i << "]=" << dobl.getInteger(i);
+ break;
+ case Type::ShortType:
+ cout << "short[" << i << "]=" << dobl.getShort(i);
+ break;
+ case Type::DoubleType:
+ cout << "double[" << i << "]=" << dobl.getDouble(i);
+ break;
+ case Type::FloatType:
+ cout << "float[" << i << "]=" << dobl.getFloat(i);
+ break;
+ case Type::LongType:
+ cout << "long:" << i << "]=" << "cheat" << dobl.getInteger(i);
+ break;
+ case Type::DateType:
+ cout << "date[" << i << "]=" << dobl.getDate(i).getTime();
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ cout << "string:" << i << "]=" << dobl.getCString(i);
+ break;
+ case Type::BytesType:
+ cout << "bytes[" << i << "]=" << dobl.getCString(i);
+ break;
+ case Type::DataObjectType:
+ {
+ cout << "dataObject["<< i << "]=" ;
+ DataObjectPtr dob = dobl[i];
+ if (!dob)
+ {
+ cout << " null or unset" ;
+ }
+ else
+ {
+ cout << endl;
+ printDataObject(dob);
+ }
+ }
+ break;
+ case Type::OtherTypes:
+ case Type::ChangeSummaryType:
+ default:
+ {
+ cout << "Unknown object type";
+ }
+ break;
+ }
+ cout << endl;
+ }
+}
+
+void sdotest::printDataObject(DataObjectPtr dol)
+{
+ cout << "DataObject Current Values ==========================================" << endl;
+ PropertyList pl = dol->getInstanceProperties();
+
+ for (int j=0;j< pl.size(); j++)
+ {
+ cout << "Property " << pl[j].getName() << " of type ";
+ // this could be a many-valued property, and could be one which is
+ // a data object or a data type...
+ if (pl[j].isMany())
+ {
+ printList(dol,pl[j]);
+ }
+ else {
+ printValue(dol,pl[j]);
+ }
+ }
+ cout << "End DataObject Current Values ======================================" << endl;
+}
+
+
+void sdotest::dumpchangesummary(ChangeSummaryPtr cs)
+{
+ ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+
+ // the changed data object list contains only the objects whose properties have
+ // been changed.
+ // a changed and subsequently deleted object will not appear, but necessarily its
+ // container will appear, so we can rebuild it.
+
+ for (int i=0;i< cdol.size();i++)
+ {
+ if (cs->isCreated(cdol[i]))
+ {
+ cout << "Created object in changed list: " << cdol[i] << endl;
+ // So its in the created list, it must exist in the tree...
+ cout << "The object is " << cdol[i]->getType().getURI()
+ << "#" << cdol[i]->getType().getName() << endl;
+ }
+ if (cs->isModified(cdol[i]))
+ {
+ cout <<"===== Modified Object Starts " << cdol[i] << " ==============================" <<endl;
+ // hack to get to a DAS data object...
+ DataObject* temp = cdol[i];
+ cout << "XPATH:" << ((DataObject*)temp)->objectToXPath() << endl;
+ // end hack
+
+ if (cs->isDeleted(cdol[i]))
+ {
+ cout << "PROBLEM: DELETED OBJECT IN CHANGED LIST: " << cdol[i] << endl;
+ // As the item is in the deleted list - its still present..
+ cout << "The type is " << cdol[i]->getType().getURI()
+ << "#" << cdol[i]->getType().getName() << endl;
+ }
+ else {
+ cout << "The modified objects type is " << cdol[i]->getType().getURI()
+ << "#" << cdol[i]->getType().getName() << endl;
+
+ printOldValues(cs, cdol[i]);
+ //printDataObject(cdol[i]);
+ }
+ cout <<"=====Modified Object Ends " << cdol[i] << " =================================" <<endl;
+ }
+ if (cs->isDeleted(cdol[i]))
+ {
+ cout <<"=====Deleted Object Starts " << cdol[i] << " =================================" <<endl;
+ printOldValues(cs, cdol[i]);
+ cout <<"=====Deleted Object Ends " << cdol[i] << " =================================" <<endl;
+ }
+ }
+}
+
+
+
+
+
+void sdotest::scenario1()
+{
+ // scenario 1
+ // create root type - root has cs
+ // create a company type. and containment ref from root, many valued.
+ // props on comp id, name both strings single v.
+ // create root object
+ // begin logging
+ // create a company obj. name=acme id=123
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","RootOfAllEvil");
+ mdg->addPropertyToType("myspace","RootOfAllEvil","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","RootOfAllEvil","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","RootOfAllEvil");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ dumpchangesummary(cs);
+
+ cs->endLogging();
+
+ //expect cdo:
+ //root - isChanged
+ //comp - isCreated
+
+
+}
+
+
+void sdotest::testui()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","MainType");
+
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tmain = mdg->getType("companyNS","MainType");
+ const Type& tshort = mdg->getType("commonj.sdo","Short");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+
+
+ mdg->addPropertyToType(tmain,"short",tshort,true);
+ mdg->addPropertyToType(tmain,"int",tint, true);
+
+ DataObjectPtr main = mdg->create((Type&)tmain);
+
+ DataObjectList& dol1 = main->getList("short");
+ DataObjectList& dol2 = main->getList("int");
+ DataObjectList& dol3 = main->getList((unsigned int)0);
+ DataObjectList& dol4 = main->getList(1);
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << "Unsigned int failed" << endl << e << endl;
+ }
+}
+
+
+
+void sdotest::scenario5()
+{
+ // scenario 1
+ // create root type - root has cs
+ // create a company type. and containment ref from root, many valued.
+ // props on comp id, name both strings single v.
+ // create root object
+ // begin logging
+ // create a company obj. name=acme id=123
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","RootOfAllEvil");
+ mdg->addPropertyToType("myspace","RootOfAllEvil","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Employee");
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","eotm",
+ "myspace","Employee", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","RootOfAllEvil","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","RootOfAllEvil");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ const Type& te = mdg->getType("myspace","Employee");
+
+ DataObjectPtr emp = mdg->create(te);
+ emp->setCString("name", "Mr Expendible");
+
+ DataObjectList& emps = com->getList("employees");
+
+ emps.append(emp);
+
+ com->setDataObject("eotm",emp);
+
+ cs->beginLogging();
+
+ com->unset("eotm");
+
+ dumpchangesummary(cs);
+
+ cs->endLogging();
+
+ //expect com to have change record, nothing for eotm:
+
+}
+
+void sdotest::scenario2()
+{
+ // create root type - root has cs
+ // create a company type. and containment ref from root, many valued.
+ // 2 props on comp id, name both strings single v.
+ // create root object
+ // create a company obj. name=acme id=123
+ // begin logging()
+ // name="megacorp"
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","RootOfAllEvil");
+ mdg->addPropertyToType("myspace","RootOfAllEvil","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","RootOfAllEvil","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","RootOfAllEvil");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ com->setCString("name","megacorp");
+
+ dumpchangesummary(cs);
+
+ cs->endLogging();
+
+ //expect cdo:
+ //root- nothing
+ // company- isChanged
+ //setting prop=name, value="acme"
+
+}
+
+void sdotest::scenario3()
+{
+
+ //create root type - root has cs
+ //create a company type. and containment ref from root, many valued.
+ //2 props on comp id, name both strings single v.
+ //create root object
+ //create a company obj. name=acme id=123
+ //begin logging()
+ //delete company
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","RootOfAllEvil");
+ mdg->addPropertyToType("myspace","RootOfAllEvil","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","RootOfAllEvil","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","RootOfAllEvil");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ com->detach();
+
+ dumpchangesummary(cs);
+
+ cs->endLogging();
+
+ // expect cdo
+ // root - changed
+ // company - deleted
+
+}
+
+void sdotest::scenario4()
+{
+ //create root type - root has cs
+ //create a company type. and containment ref from root, many valued.
+ //create a dept type. and containment ref from comp, many valued.
+ //create a emp type. and containment ref from dept, many valued.
+ // give name and id properties to comp,dept, emp
+
+ //create root object
+ //create a company obj. name=acme id=123
+ //create a company obj. name=megacorp id=124
+ // give each company 2 depts
+ // give each dept 2 employees
+
+ // begin logging()
+ // add new employee to first dept of acme
+ // delete employee from second dept of acme
+
+ // change name of first employee of first dept megacorp.
+ // delete first dept of megacorp.
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","RootOfAllEvil");
+ mdg->addPropertyToType("myspace","RootOfAllEvil","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addType("myspace","Department");
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addType("myspace","Employee");
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","RootOfAllEvil","companies",
+ "myspace","Company", true, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","RootOfAllEvil");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ DataObjectPtr dep = com->createDataObject("departments");
+ dep->setCString("name","widgets");
+ dep->setCString("id","1");
+
+ DataObjectPtr emp = dep->createDataObject("employees");
+ emp->setCString("name","John O'Watt");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Ida Know");
+ emp->setCString("id","2");
+
+
+ dep = com->createDataObject("departments");
+ dep->setCString("name","gadgets");
+ dep->setCString("id","2");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Ed Memoire");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Phyllis Tyne");
+ emp->setCString("id","2");
+
+
+ DataObjectPtr com2 = dor->createDataObject("companies");
+ com2->setCString("name","megacorp");
+ com2->setCString("id","124");
+
+ dep = com2->createDataObject("departments");
+ dep->setCString("name","windows");
+ dep->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Ivor Payne");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Colin Poisson");
+ emp->setCString("id","2");
+
+ dep = com2->createDataObject("departments");
+ dep->setCString("name","portholes");
+ dep->setCString("id","2");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Graham Angreeneggs");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Helen Highwater");
+ emp->setCString("id","2");
+
+ cout << "-----------------------------------" << endl;
+ cout << com->getCString("name") << endl;
+ DataObjectList& deps = com->getList("departments");
+ cout << "Depts[0]:" << deps[0]->getCString("name") << endl;
+ DataObjectList& emps = deps[0]->getList("employees");
+ cout << "Emps[0]:" << emps[0]->getCString("name") << endl;
+ cout << "Emps[1]:" << emps[1]->getCString("name") << endl;
+ cout << "Depts[1]:" << deps[1]->getCString("name") << endl;
+ DataObjectList& emps2 = deps[1]->getList("employees");
+ cout << "Emps[0]:" << emps2[0]->getCString("name") << endl;
+ cout << "Emps[1]:" << emps2[1]->getCString("name") << endl;
+ cout << "-----------------------------------" << endl;
+ cout << com2->getCString("name") << endl;
+ DataObjectList& deps2 = com2->getList("departments");
+ cout << "Depts[0]:" << deps2[0]->getCString("name") << endl;
+ DataObjectList& emps3 = deps2[0]->getList("employees");
+ cout << "Emps[0]:" << emps3[0]->getCString("name") << endl;
+ cout << "Emps[1]:" << emps3[1]->getCString("name") << endl;
+ cout << "Depts[1]:" << deps2[1]->getCString("name") << endl;
+ DataObjectList& emps4 = deps2[1]->getList("employees");
+ cout << "Emps[0]:" << emps4[0]->getCString("name") << endl;
+ cout << "Emps[1]:" << emps4[1]->getCString("name") << endl;
+ cout << "-----------------------------------" << endl;
+
+ // should be able to get the change summary property, but it
+ // should be zero.
+ // should be able to find out if the type is a change summary type
+
+ if (dor->getType().isChangeSummaryType())
+ {
+ cout << "The root object has a change summary" << endl;
+ }
+ else {
+ cout << "The root object DOESNT HAVE a change summary !!!" << endl;
+ }
+
+ try {
+ DataObjectPtr csptr = dor->getDataObject("whatever");
+
+ if (!csptr) {
+ cout << "CS property was zero - should be invisible!!!!" << endl;
+ }
+ else {
+ cout << "CS property was NOT zero !!" << endl;
+ }
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ cout << "No property shows - this is correct" << endl;
+ }
+
+
+ if (com->getType().isChangeSummaryType())
+ {
+ cout << "The company object has a change summary !!!!" << endl;
+ }
+ else {
+ cout << "The company object is OK" << endl;
+ }
+
+
+
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ DataObjectList& depsout = com->getList("departments");
+
+ emp = depsout[0]->createDataObject("employees");
+ emp->setCString("name","Irma Newby");
+ emp->setCString("id","3");
+
+ DataObjectList& empsout = depsout[1]->getList("employees");
+ empsout.remove(0);
+
+ DataObjectList& depsout2 = com2->getList("departments");
+ DataObjectList& empsout2 = depsout2[0]->getList("employees");
+ empsout2[0]->setCString("name","Ive had my name changed");
+
+ depsout2[0]->detach();
+
+ dumpchangesummary(cs);
+
+ cs->endLogging();
+
+ // expect:
+ // company acme, department widgets changed.
+ // employee 3 of dept widgets of acme (Irma Newby) created.
+ // employee 1 of dept gadgets or acme deleted
+ // no change record for employee 1 of company megacorp, dept windows
+ // deletion for dept windows of megacorp
+ // deletion for emp 1 of windows - showing original value for name (Ivor Payne)
+ // deletion for emp 2 of windows.
+
+
+}
+
+void sdotest::seqtest()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ // company is sequenced.
+ mdg->addType("myspace","Company",true,false);
+
+ mdg->addType("myspace","Department",true,false);
+ // string is many
+
+ mdg->addPropertyToType("myspace","Company","string","commonj.sdo","String",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","departments","myspace","Department",
+ true);
+
+ mdg->addPropertyToType("myspace","Department","name","commonj.sdo","String");
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr dor = mdg->create(tcc);
+ const Property& sprop = dor->getType().getProperty("string");
+ SequencePtr sptr = dor->getSequence();
+
+ printseq(sptr);
+
+ sptr->addCString(sprop,"I am Item 1 of string");
+
+ printseq(sptr);
+
+ sptr->addText("I am the first free text");
+
+ printseq(sptr);
+
+ sptr->addCString(sprop,"I am Item 2 of string");
+
+ printseq(sptr);
+
+ sptr->setCStringValue(1,"I am free text which has been modified");
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+
+ printseq(sptr);
+
+ dep1->setCString("name","department1");
+
+ printseq(sptr);
+
+ DataObjectList& dol = dor->getList("departments");
+
+ const Type& tcd = mdg->getType("myspace","Department");
+ DataObjectPtr dep2 = mdg->create(tcd);
+
+ printseq(sptr);
+
+ dep2->setCString("name","department2");
+
+ printseq(sptr);
+
+ dol.append(dep2);
+
+ printseq(sptr);
+
+}
+
+void sdotest::printseq(SequencePtr sptr)
+{
+ cout << "======================================" <<endl;
+ for (int i=0;i< sptr->size();i++)
+ {
+ try {
+ if (!sptr->isText(i))
+ {
+ const Property& prp = sptr->getProperty(i);
+ if (!strcmp(prp.getType().getName(),"Department"))
+ {
+ DataObjectPtr pdep = sptr->getDataObjectValue(i);
+ if (pdep != 0)
+ {
+ const char * cs = pdep->getCString("name");
+ if (cs != 0)
+ {
+ cout << cs << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ }
+ else
+ {
+ const char* stx = sptr->getCStringValue(i);
+ if (stx != 0)
+ {
+ cout << stx << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ }
+ else
+ {
+ const char* st = sptr->getCStringValue(i);
+ if (st != 0)
+ {
+ cout << st << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << "WRONG - got a property not set exception!!!" << endl;
+ continue;
+ }
+ }
+ cout << "======================================" << endl;
+}
+
+void sdotest::boolbug()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Company");
+ mdg->addPropertyToType("myspace","Company","bool","commonj.sdo","Boolean");
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+ try {
+ bool b = dor->getBoolean("bool");
+ cout << "bool:" << b << endl;
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << "WRONG not set exception" << endl;
+ }
+}
+
+void sdotest::scope1()
+{
+ cout << "SCOPE1 - Data Factory" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+}
+
+void sdotest::scope2()
+{
+ cout << "SCOPE2 - Create Data Object" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Company");
+ mdg->addPropertyToType("myspace","Company","csumm","commonj.sdo","ChangeSummary");
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+}
+
+void sdotest::scope3()
+{
+ cout << "SCOPE3 - Lists" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Main");
+ mdg->addType("myspace","Subs");
+ mdg->addPropertyToType("myspace","Main","name","commonj.sdo","String");
+ mdg->addPropertyToType("myspace","Main","subs","myspace","Subs", true);
+ mdg->addPropertyToType("myspace","Subs","name","commonj.sdo","String");
+
+ const Type& tcc = mdg->getType("myspace","Main");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr sub = dor->createDataObject("subs");
+ sub->setCString("name", "sub1");
+
+ sub = dor->createDataObject("subs");
+ sub->setCString("name", "sub2");
+
+
+}
+
+void sdotest::testGetters(DataObjectPtr dor)
+{
+ testGetter(dor,"boolean");
+ testGetter(dor,"byte");
+ testGetter(dor,"character");
+ testGetter(dor,"short");
+ testGetter(dor,"integer");
+ testGetter(dor,"long");
+ testGetter(dor,"double");
+ testGetter(dor,"float");
+ testGetter(dor,"date");
+ testGetter(dor,"string");
+ testGetter(dor,"bytes");
+ testGetter(dor,"dataobject");
+}
+
+void sdotest::testGetter(DataObjectPtr dor, char* str)
+{
+
+ try {
+ cout << "Boolean from " << str;
+ bool b = dor->getBoolean(str);
+ cout << " was " << b << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "Byte from " << str;
+ char by = dor->getByte(str);
+ cout << " was " << by <<endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "Character from " << str;
+ wchar_t cy = dor->getCharacter(str);
+ cout << " was " << cy << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "Short from " << str;
+ short s = dor->getShort(str);
+ cout << " was " << s << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "Int from " << str;
+ int i = dor->getInteger(str);
+ cout << " was " << i << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "Long from " << str;
+ long l = dor->getLong(str);
+ cout << " was " << l << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "LongLong from " << str;
+ int64_t ll = dor->getLong(str);
+ cout << " was got OK" << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "Float from " << str;
+ float f = dor->getFloat(str);
+ cout << " was " << f << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "Double from " << str;
+ long double d = dor->getDouble(str);
+ cout << " was " << d << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ unsigned int len;
+
+ try {
+ cout << "Length of " << str;
+ len = dor->getLength(str);
+ cout << " was " << len << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ if (len > 0) {
+ try {
+ cout << "String from " << str;
+ wchar_t * buf = new wchar_t[len];
+ unsigned int gotlen = dor->getString(str,buf,len);
+ cout << " size ";
+ cout << gotlen << endl;
+ for (int jj=0;jj<gotlen;jj++)
+ {
+ cout << buf[jj] << ":";
+ }
+ cout << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+ try {
+ cout << "Bytes from " << str;
+ char * cbuf = new char[len];
+ unsigned int gotlen = dor->getBytes(str,cbuf,len);
+ cout << " size " << gotlen << endl;
+ for (int jj=0;jj<gotlen;jj++)
+ {
+ cout << cbuf[jj] << ":";
+ }
+ cout << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+ }
+
+ try {
+ cout << "Date from " << str;
+ SDODate t = dor->getDate(str);
+ cout << " was " << t.getTime() << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << " WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "CString from " << str;
+ const char * string = dor->getCString(str);
+ if ( string != 0) cout << " was " << string << endl;
+ else cout << " was empty " << endl;
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG - unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+ try {
+ cout << "DataObject from " << str;
+ DataObjectPtr dob = dor->getDataObject(str);
+ if (dob != 0)
+ {
+ cout << " was " << dob << endl;
+ }
+ else
+ {
+ cout << " was empty" << endl;
+ }
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ cout << "WRONG unset and undefaulted" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << endl;
+ }
+
+}
+
+void sdotest::conversiontest()
+{
+ cout << "Conversion tests" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Container");
+ mdg->addType("myspace","Contained");
+ mdg->addPropertyToType("myspace","Container","boolean","commonj.sdo","Boolean");
+ mdg->addPropertyToType("myspace","Container","byte","commonj.sdo","Byte");
+ mdg->addPropertyToType("myspace","Container","character","commonj.sdo","Character");
+ mdg->addPropertyToType("myspace","Container","short","commonj.sdo","Short");
+ mdg->addPropertyToType("myspace","Container","integer","commonj.sdo","Integer");
+ mdg->addPropertyToType("myspace","Container","long","commonj.sdo","Long");
+ mdg->addPropertyToType("myspace","Container","float","commonj.sdo","Float");
+ mdg->addPropertyToType("myspace","Container","double","commonj.sdo","Double");
+ mdg->addPropertyToType("myspace","Container","string","commonj.sdo","String");
+ mdg->addPropertyToType("myspace","Container","bytes","commonj.sdo","Bytes");
+ mdg->addPropertyToType("myspace","Container","dataobject","myspace","Contained");
+ mdg->addPropertyToType("myspace","Container","date","commonj.sdo","Date");
+ mdg->addPropertyToType("myspace","Container","bigint","commonj.sdo","BigInteger");
+ mdg->addPropertyToType("myspace","Container","bigdec","commonj.sdo","BigDecimal");
+
+
+ const Type& tcc = mdg->getType("myspace","Container");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ // phase 1 - all unset.......
+
+ cout << "+++++++++++++++PROPERTY VALUES UNSET ++++++++++++++++++" << endl;
+
+ testGetters(dor);
+
+ cout << "+++++++++++++++PROPERTY VALUES SET ++++++++++++++++++++" << endl;
+
+ DataObjectPtr sub = dor->createDataObject("dataobject");
+ dor->setBoolean("boolean", true);
+ dor->setByte("byte",20);
+ dor->setCharacter("character", 1000);
+ dor->setShort("short", (short)12345678);
+ dor->setInteger("integer", 87654321);
+ dor->setLong("long", 0xFFFFFFFFFFFF);
+ dor->setFloat("float", (float)12345.678);
+ dor->setDouble("double", 1234567.891);
+ dor->setDate("date", 37575);
+ wchar_t* chars = new wchar_t[50];
+ for (int i=0;i<50;i++) {chars[i] = 0x7F20 + i ;}
+ dor->setString("string",chars, 50);
+
+ char* tchars = new char[50];
+ for (int ii=0;ii<50;ii++) {tchars[ii] = ii + 32;}
+ dor->setBytes("bytes",tchars, 50);
+
+
+ testGetters(dor);
+
+ cout << "+++++++++++++++END OF TEST ++++++++++++++++++++++++++++" << endl;
+
+ // phase 2 all set.....
+
+}
+
+
+void sdotest::usertest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addType("myspace","UserTest");
+ mdg->addType("myspace","AnObject");
+
+ const Type& tr = mdg->getType("myspace", "Root");
+ const Type& tm = mdg->getType("myspace", "UserTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"unsetboolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"object", "myspace","AnObject");
+ mdg->addPropertyToType(tm,"unsetobject","myspace","AnObject");
+
+ // many valued...
+ mdg->addPropertyToType(tm,"longs", "commonj.sdo","Integer", true);
+ mdg->addPropertyToType(tm,"objects", "myspace","AnObject", true);
+
+ mdg->addPropertyToType(tr,"usertest", "myspace","UserTest");
+
+ DataObjectPtr root = mdg->create((Type&)tr);
+ DataObjectPtr test = root->createDataObject("usertest");
+ DataObjectPtr do1 = test->createDataObject("object");
+ DataObjectPtr do2 = test->createDataObject("objects");
+ DataObjectPtr do3 = test->createDataObject("objects");
+
+ test->setBoolean("boolean", true);
+
+ void* value = (void*)0xFACC0FF;
+
+ test->setUserData(value);
+
+ cout << "I wanted 0xFACC0FF " << test->getUserData() << endl;
+
+ root->setUserData("usertest",value);
+
+ cout << "I wanted 0xFACC0FF and got " << root->getUserData("usertest") << endl;
+
+ root->setUserData((unsigned int)0,(void*)0x20);
+
+ cout << "I wanted 0x20 and got " << root->getUserData((unsigned int)0) << endl;
+
+ const Property& prop = root->getType().getProperty("usertest");
+ root->setUserData(prop,(void*)0x40020);
+
+ cout << "I wanted 0x40020 and got " << root->getUserData(prop) << endl;
+
+ test->setUserData("boolean", (void*)0x120);
+
+ cout << "I wanted (graceful)0 and got " << test->getUserData("boolean") << endl;
+
+ test->setUserData("unsetboolean", (void*)0x340);
+
+ cout << "I wanted (graceful)0 and got " << test->getUserData("boolean") << endl;
+
+ test->setUserData("object", (void*)0x120);
+
+ cout << "I wanted 120 and got " << test->getUserData("object") << endl;
+
+ test->setUserData("unsetobject", (void*)0x540);
+
+ cout << "I wanted (graceful)0 and got " << test->getUserData("unsetobject") << endl;
+
+ test->setUserData("objects", (void*)0x640);
+
+ // TODO might be dodgy - this allows setting of user data on a base of a list
+ cout << "I wanted 640 and got " << test->getUserData("objects") << endl;
+
+ test->setUserData("objects[1]", (void*)0x740);
+
+ cout << "I wanted 0x740 and got " << test->getUserData("objects[1]") << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in user test - unexpected" << endl;
+ }
+
+}
+
+void sdotest::versiontest()
+{
+ cout << "The SDO version is :" << SdoRuntime::getVersion() << endl;
+ cout << "The Major version is: " << SdoRuntime::getMajor() << endl;
+ cout << "The Minor version is: " << SdoRuntime::getMinor() << endl;
+ cout << "The Fix level is: " << SdoRuntime::getFix() << endl;
+}
+
+void sdotest::noncontest()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Employee");
+
+ const Type& tr = mdg->getType("myspace", "Company");
+ const Type& tm = mdg->getType("myspace", "Department");
+ const Type& to = mdg->getType("myspace", "Employee");
+
+ // many...
+ mdg->addPropertyToType(tr,"departments","myspace", "Department",
+ true);
+
+ //mdg->addPropertyToType(to,"name","commonj.sdo", "String");
+
+ mdg->addPropertyToType(tm,"employees","myspace", "Employee", true);
+
+ // single, non containment
+ mdg->addPropertyToType(tr,"eom", "myspace","Employee", false
+ , false, false);
+
+ DataObjectPtr comp = mdg->create((Type&)tr);
+
+ {
+ DataObjectPtr dept = comp->createDataObject("departments");
+ DataObjectPtr emp1 = dept->createDataObject("employees");
+ //emp1->setCString("name", "Will");
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ //emp1->setCString("name", "Bill");
+ DataObjectPtr emp3 = dept->createDataObject("employees");
+ //emp1->setCString("name", "Gill");
+ comp->setDataObject("eom", emp3);
+ }
+
+
+
+}
+
+
+
+
+void sdotest::defaulttest()
+{
+ try{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","DefaultTest");
+ mdg->addType("myspace","AnObject");
+
+ const Type& tm = mdg->getType("myspace", "DefaultTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+
+ mdg->setDefault("myspace","DefaultTest","boolean", true);
+
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+
+ mdg->setDefault("myspace","DefaultTest","byte", (char)'d');
+
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+
+ mdg->setDefault("myspace","DefaultTest","character", (wchar_t)'e');
+
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+
+ mdg->setDefault("myspace","DefaultTest","short", (short)300);
+
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+
+ mdg->setDefault("myspace","DefaultTest","long", (long)400);
+
+ mdg->addPropertyToType(tm,"longs", "commonj.sdo","Integer", true);
+
+ mdg->setDefault("myspace","DefaultTest","longs", (long)800);
+
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+
+ mdg->setDefault("myspace","DefaultTest","longlong", (int64_t)500);
+
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+
+ mdg->setDefault("myspace","DefaultTest","float", (float)600.0);
+
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+
+ mdg->setDefault("myspace","DefaultTest","longdouble", (long double)700.0);
+
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+
+ mdg->setDefault("myspace","DefaultTest","date", (long)900);
+
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+
+ wchar_t* help = new wchar_t[4];
+ help[0] = 'H';
+ help[1] = 'E';
+ help[2] = 'L';
+ help[3] = 'P';
+
+ mdg->setDefault("myspace","DefaultTest","string", help, 4);
+
+ delete help;
+
+ char* help2 = new char[4];
+ help2[0] = 'H';
+ help2[1] = 'E';
+ help2[2] = 'L';
+ help2[3] = 'P';
+
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+
+ mdg->setDefault("myspace","DefaultTest","bytes", help2, 4);
+
+ delete help2;
+
+ mdg->addPropertyToType(tm,"object", "myspace","AnObject");
+
+ DataObjectPtr test = mdg->create((Type&)tm);
+
+ cout << "Boolean default is true: " << test->getBoolean("boolean") << endl;
+
+ cout << "Byte default is d: " << test->getByte("byte") << endl;
+
+ cout << "Character default is e: " << test->getCharacter("character") << endl;
+
+ cout << "Short default is 300: " << test->getShort("short") << endl;
+
+ cout << "Long default is 400: " << test->getInteger("long") << endl;
+
+ try {
+ cout << "Longs default is 800: " << test->getInteger("longs[1]") << endl;
+ }
+ catch (SDOIndexOutOfRangeException ex)
+ {
+ cout << "Expected index out of range OK" << endl;
+ }
+
+ cout << "Float default is 600: " << test->getFloat("float") << endl;
+
+ cout << "LongDouble default is 700: " << test->getDouble("longdouble") << endl;
+
+ cout << "String default is HELP: ";
+ unsigned int lenw = test->getLength("string");
+ if (lenw > 0) {
+ char* tw = new char[lenw];
+ test->getBytes("string",tw,lenw);
+ for (int i=0;i<lenw;i++)
+ {
+ cout << tw[i];
+ }
+ cout << endl;
+ }
+
+ cout << "Bytes default is HELP: ";
+ unsigned int len = test->getLength("bytes");
+ if (len > 0) {
+ char* tc = new char[len];
+ test->getBytes("bytes",tc,len);
+ for (int i=0;i<len;i++)
+ {
+ cout << tc[i];
+ }
+ cout << endl;
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << " in ";
+ cout << e.getFileName() << " at line ";
+ cout << e.getLineNumber() << endl;
+ cout << e.getFunctionName() << " ";
+ cout << e.getMessageText() << endl;
+ }
+
+
+
+}
+
+
+void sdotest::showdefault(const Type& tm)
+{
+ const Property& pboolean = tm.getProperty("boolean");
+ const Property& pbyte = tm.getProperty("byte");
+ const Property& pcharacter = tm.getProperty("character");
+ const Property& pshort = tm.getProperty("short");
+ const Property& plong = tm.getProperty("long");
+ const Property& plongs = tm.getProperty("longs");
+ const Property& plonglong = tm.getProperty("longlong");
+ const Property& pfloat = tm.getProperty("float");
+ const Property& plongdouble = tm.getProperty("longdouble");
+ const Property& pdate = tm.getProperty("date");
+ const Property& pstring = tm.getProperty("string");
+ const Property& pbytes = tm.getProperty("bytes");
+ const Property& pobject = tm.getProperty("object");
+
+ // first see what we get for the default when there is none
+
+ bool bb = pboolean.getBooleanDefault();
+ cout << "Boolean default is : " << bb << endl;
+
+ char cc = pbyte.getByteDefault();
+ cout << "Byte default is : " << cc << endl;
+
+ wchar_t wc = pcharacter.getCharacterDefault();
+ cout << "Character default is : " << wc << endl;
+
+ short ss = pshort.getShortDefault();
+ cout << "Short default is : " << ss << endl;
+
+ long ll = plong.getIntegerDefault();
+ cout << "Integer default is : " << ll << endl;
+ long ll2 = plongs.getLongDefault();
+ cout << "Integer many default is : " << ll2 << endl;
+
+ int64_t llll = plonglong.getLongDefault();
+ cout << "Long default is : " << (long)llll << endl;
+
+ float ff = pfloat.getFloatDefault();
+ cout << "Float default is : " << ff << endl;
+
+ long double dd = plongdouble.getDoubleDefault();
+ cout << "Double default is : " << dd << endl;
+
+ const SDODate& sd = pdate.getDateDefault();
+ cout << "Date default is : " << sd.getTime() << endl;
+
+ unsigned int l = pstring.getDefaultLength();
+ if (l > 0)
+ {
+ wchar_t * buf = new wchar_t[l+1];
+ l = pstring.getStringDefault(buf,l);
+ cout << "String default length is" << l << endl;
+ for (int i=0;i<l;i++)
+ {
+ cout << buf[i];
+ }
+ cout << endl;
+ delete buf;
+ }
+ else
+ {
+ cout << "String default is zero length" << endl;
+ }
+
+ l = pbytes.getDefaultLength();
+ if (l > 0)
+ {
+ char * buf = new char[l+1];
+ l = pbytes.getBytesDefault(buf,l);
+ cout << "Bytes default length is" << l << endl;
+ for (int i=0;i<l;i++)
+ {
+ cout << buf[i];
+ }
+ cout << endl;
+ delete buf;
+ }
+ else
+ {
+ cout << "Bytes default is zero length" << endl;
+ }
+}
+
+
+void sdotest::propdefaulttest()
+{
+ try{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","DefaultTest");
+ mdg->addType("myspace","AnObject");
+
+ const Type& tm = mdg->getType("myspace", "DefaultTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+ mdg->addPropertyToType(tm,"longs", "commonj.sdo","Integer", true);
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+ mdg->addPropertyToType(tm,"object" , "myspace","AnObject");
+
+ cout << "Testing unset defaults....." << endl;
+
+ showdefault(tm);
+
+
+ //now set all the defaults....
+
+ mdg->setDefault("myspace","DefaultTest","boolean", true);
+ mdg->setDefault("myspace","DefaultTest","byte", (char)'d');
+ mdg->setDefault("myspace","DefaultTest","character", (wchar_t)'e');
+ mdg->setDefault("myspace","DefaultTest","short", (short)300);
+ mdg->setDefault("myspace","DefaultTest","long", (long)400);
+ mdg->setDefault("myspace","DefaultTest","longs", (long)800);
+ mdg->setDefault("myspace","DefaultTest","longlong", (int64_t)500);
+ mdg->setDefault("myspace","DefaultTest","float", (float)600.0);
+ mdg->setDefault("myspace","DefaultTest","longdouble", (long double)700.0);
+ mdg->setDefault("myspace","DefaultTest","date", (long)900);
+
+
+ wchar_t* help = new wchar_t[4];
+ help[0] = 'H';
+ help[1] = 'E';
+ help[2] = 'L';
+ help[3] = 'P';
+
+ mdg->setDefault("myspace","DefaultTest","string", help, 4);
+
+ delete help;
+
+ char* help2 = new char[4];
+ help2[0] = 'H';
+ help2[1] = 'E';
+ help2[2] = 'L';
+ help2[3] = 'P';
+
+
+ mdg->setDefault("myspace","DefaultTest","bytes", help2, 4);
+
+ delete help2;
+
+ // and have another go at getting them....
+
+ cout << "Testing set defaults....." << endl;
+
+ showdefault(tm);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << " in ";
+ cout << e.getFileName() << " at line ";
+ cout << e.getLineNumber() << endl;
+ cout << e.getFunctionName() << " ";
+ cout << e.getMessageText() << endl;
+ }
+
+}
+
+void sdotest::nulltest()
+{
+ int i;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","NullTest",true, false); // sequenced
+ mdg->addType("myspace","AnObject");
+
+ const Type& tm = mdg->getType("myspace", "NullTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+ mdg->addPropertyToType(tm,"object", "myspace","AnObject");
+
+
+ mdg->addPropertyToType(tm,"cs", "commonj.sdo","ChangeSummary");
+
+ DataObjectPtr test = mdg->create((Type&)tm);
+ DataObjectPtr ob = mdg->create((Type&)to);
+ DataObjectPtr ob2 = mdg->create((Type&)to);
+ DataObjectPtr ob3 = mdg->create((Type&)to);
+
+ // first check all props are unset
+
+ ChangeSummaryPtr cs = test->getChangeSummary();
+
+ cs->beginLogging();
+
+ PropertyList pl = test->getInstanceProperties();
+
+ cout << "Initially - all properties unset, and default values..." << endl;
+ for (i=0;i<pl.size(); i++)
+ {
+ if (pl[i].isMany())continue;
+ try {
+ if (pl[i].getType().isDataType()) {
+ cout << pl[i].getName() << " set:" << test->isSet(pl[i]) << " value:";
+ const char *xx = test->getCString(pl[i]);
+ if (xx != 0)
+ {
+ cout << xx << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ else {
+ cout << pl[i].getName() << " set:" << test->isSet(pl[i]) << " value:";
+ DataObjectPtr xy = test->getDataObject(pl[i]);
+ if (xy != 0)
+ {
+ cout << xy << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << " WRONG - got not set exception!!!";
+ continue;
+ }
+ }
+ test->setBoolean("boolean", false);
+ test->setByte("byte",0);
+ test->setCharacter("character",0);
+ test->setShort("short",0);
+ test->setInteger("long",0);
+ test->setLong("longlong",0 );
+ test->setFloat("float",0);
+ test->setDouble("longdouble",0 );
+ test->setDate("date",0 );
+ test->setString("string",0,0);
+ test->setBytes("bytes","",0) ;
+ test->setDataObject("object",0) ;
+
+
+
+ cout << "Should now have all properties set, and zero values..." << endl;
+ for (i=0;i<pl.size(); i++)
+ {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ cout << pl[i].getName() << " set:" << test->isSet(pl[i]) << " value:" << test->getCString(pl[i]) << endl;
+ }
+ else {
+ cout << pl[i].getName() <<" set:" << test->isSet(pl[i]) << " value:" << test->getDataObject(pl[i]) << endl;
+ }
+
+ }
+
+ for (i=0;i<pl.size(); i++)
+ {
+ test->unset(pl[i]);
+ }
+ cout << "Should be back to having properties unset, and default values..." << endl;
+ for (i=0;i<pl.size(); i++)
+ {
+
+ try {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ cout << pl[i].getName() << " set:" << test->isSet(pl[i]) << " value:";
+ const char *xx = test->getCString(pl[i]);
+ if (xx != 0)
+ {
+ cout << xx << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ else {
+ cout << pl[i].getName() << " set:" << test->isSet(pl[i]) << " value:";
+ DataObjectPtr dp = test->getDataObject(pl[i]);
+ if (dp != 0)
+ {
+ cout << dp << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << "WRONG - not set exception" << endl;
+ continue;
+ }
+ }
+
+ SequencePtr s = test->getSequence();
+
+ s->addBoolean(test->getType().getProperty("boolean")/*"boolean"*/, false);
+ s->addByte(1/*"byte"*/,0);
+ s->addCharacter(2/*"character"*/,0);
+ s->addShort(3/*"short"*/,0);
+ s->addInteger(4/*"long"*/,0);
+ s->addLong(5/*"longlong"*/,0 );
+ s->addFloat(6/*"float"*/,0);
+ s->addDouble(7/*"longdouble"*/,0 );
+ // bug ...s->setDate(8/*"date"*/,0 );
+ s->addString(9/*"string"*/,0,0);
+ s->addBytes(10/*"bytes"*/,"",0) ;
+ s->addDataObject(11/*"object"*/,0) ;
+
+ for (i=0;i<pl.size(); i++)
+ {
+ try {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ cout << pl[i].getName() << " set:" << test->isSet(pl[i]) << " value:";
+ const char* xx = test->getCString(pl[i]);
+ if ( xx != 0)
+ {
+ cout << xx << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ else {
+ cout << pl[i].getName() << " set:" << test->isSet(pl[i]) << " value:";
+ DataObjectPtr db = test->getDataObject(pl[i]);
+ if (db != 0)
+ {
+ cout << db << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << "WRONG - not set exception " << endl;
+ continue;
+ }
+ }
+ ChangedDataObjectList& cl = cs->getChangedDataObjects();
+ for ( i =0; i< cl.size() ; i++)
+ {
+ if (cs->isCreated(cl[i])) {
+ cout << "Created:" << cl[i] << endl;
+ }
+ if (cs->isDeleted(cl[i])) {
+ cout << "Deleted:" << cl[i] << endl;
+ }
+ if (cs->isModified(cl[i])) {
+ cout << "Modified:" << cl[i] << endl;
+ }
+ }
+
+ // now unset all the properties...
+ for (i=0;i<pl.size(); i++)
+ {
+ test->unset(pl[i]);
+ }
+
+ for (i=0;i<pl.size(); i++)
+ {
+ if (!pl[i].isMany() )
+ {
+ test->setNull(i);
+ }
+ }
+
+ cout << "Should all be null, and default values..." << endl;
+ for (i=0;i<pl.size(); i++)
+ {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ // check for a null first!!
+ cout << pl[i].getName() << "isNull:" << test->isNull(i) <<" set:" << test->isSet(pl[i]) << " value:";
+ if (test->getCString(pl[i]) == 0) cout << endl;
+ else cout << test->getCString(pl[i]) << endl;
+ }
+ else {
+ cout << pl[i].getName() << "isNull:" << test->isNull(i) <<" set:" << test->isSet(pl[i]) << " value:";
+ if (test->getDataObject(pl[i]) == 0) cout << endl;
+ else cout << test->getDataObject(pl[i]) << endl;
+ }
+ }
+
+ s->addBoolean(test->getType().getProperty("boolean")/*"boolean"*/, true);
+ s->addByte(1/*"byte"*/,1);
+ s->addCharacter(2/*"character"*/,1);
+ s->addShort(3/*"short"*/,1);
+ s->addInteger(4/*"long"*/,1);
+ s->addLong(5/*"longlong"*/,1 );
+ s->addFloat(6/*"float"*/,1.0);
+ s->addDouble(7/*"longdouble"*/,1.0 );
+ // bug ...s->setDate(8/*"date"*/,0 );
+ wchar_t* chs = new wchar_t[5];
+ chs[0] = 'h';
+ chs[1] = 'e';
+ chs[2] = 'l';
+ chs[3] = 'l';
+ chs[4] = 'o';
+ s->addString(9/*"string"*/,chs,5);
+ delete chs;
+ s->addBytes(10/*"bytes"*/,"hello",5) ;
+ s->addDataObject(11/*"object"*/,ob) ;
+
+ cout << "Should all have values, and not be null.." << endl;
+ for (i=0;i<pl.size(); i++)
+ {
+
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ cout << pl[i].getName() << "isNull:" << test->isNull(i) <<" set:" << test->isSet(pl[i]) << " value:";
+ if (test->getCString(pl[i]) == 0) cout << endl;
+ else cout << test->getCString(pl[i]) << endl;
+
+ }
+ else {
+ cout << pl[i].getName() << "isNull:" << test->isNull(i) <<" set:" << test->isSet(pl[i]) << " value:";
+ if (test->getDataObject(pl[i]) == 0) cout << endl;
+ else cout << test->getDataObject(pl[i]) << endl;
+ }
+ }
+
+ for (i=0;i<pl.size(); i++)
+ {
+ if (!pl[i].isMany() )
+ {
+ test->setNull(pl[i]);
+ }
+ }
+
+ cout << "Should all be null, and default values..." << endl;
+ for (i=0;i<pl.size(); i++)
+ {
+
+ try {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ cout << pl[i].getName() << "isNull:" << test->isNull(i) <<" set:" << test->isSet(pl[i]) << " value:";
+ if (test->getCString(pl[i]) == 0) cout << endl;
+ else cout << test->getCString(pl[i]) << endl;
+
+ }
+ else {
+ cout << pl[i].getName() << "isNull:" << test->isNull(i) <<" set:" << test->isSet(pl[i]) << " value:";
+ if (test->getDataObject(pl[i]) == 0) cout << endl;
+ else cout << test->getDataObject(pl[i]) << endl;
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << " WRONG - not set exception" << endl;
+ continue;
+ }
+ }
+
+ cs->endLogging();
+}
+
+int sdotest::main(int argc, char** argv)
+{
+
+ int i;
+
+ printf("Test Program starting to create types ...\n");
+
+ /* First create a DataFactory , then add some types and props...*/
+
+ /* This is dms creation of metadata */
+
+ try {
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ // manager is a sequenced type...
+ mdg->addType("myspace","Manager", true, false);
+
+ mdg->addType("myspace","Employee");
+
+ // tests of base types
+
+ // note - base type of a seq type must be seq...
+ mdg->addType("myspace","Person", true, false);
+
+ mdg->addType("myspace","DerivedString");
+ mdg->addType("myspace","SubDepartment");
+
+ /* Now add the properties to the types...*/
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& ts = mdg->getType("commonj.sdo","String");
+ const Type& ti = mdg->getType("commonj.sdo","Integer");
+ const Type& tf = mdg->getType("commonj.sdo","Float");
+ const Type& tm = mdg->getType("myspace","Manager");
+
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+ const Type& tp = mdg->getType("myspace","Person");
+ const Type& tds= mdg->getType("myspace","DerivedString");
+ const Type& tsd= mdg->getType("myspace","SubDepartment");
+
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+
+
+
+
+
+ /* By type, with a type */
+ mdg->addPropertyToType(tc,"name",ts);
+
+ /* by name/uri with a type */
+ mdg->addPropertyToType("myspace","Company","address",ts);
+
+ /* by type with name/uri */
+ mdg->addPropertyToType(tc,"departments", "myspace","Department",
+ true);
+
+
+ // add a reference to employee of the month
+ mdg->addPropertyToType(tc,"employee of the month", "myspace","Employee",
+ false, false, false);
+
+
+
+ /* A list of floats */
+
+ mdg->addPropertyToType(tc,"floatlist", tf,true);
+
+ mdg->addPropertyToType(tc,"pdg", tm);
+
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+
+ mdg->addPropertyToType(td,"name", ts);
+
+ mdg->addPropertyToType(td,"id", ti);
+
+ mdg->addPropertyToType(td,"manager", tm);
+
+ mdg->addPropertyToType(tm,"name", ts);
+
+
+ mdg->addPropertyToType(te,"name",ts);
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+
+
+ // emps and managers are both people (in theory).
+ mdg->setBaseType(te,tp);
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+ mdg->setBaseType(tm,tp);
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+ mdg->addPropertyToType(tp,"haircolour", ts);
+ mdg->addPropertyToType(tp,"name", ts);
+ mdg->addPropertyToType(tm,"officeid", ts);
+ mdg->addPropertyToType(te,"cubelocation", ts);
+
+ mdg->addPropertyToType(tc,"shareholder", tp);
+
+ //derived string - derived from string - cannot have properties!!!
+ mdg->setBaseType(tds,ts);
+
+ // subdept derived from dept
+ mdg->setBaseType(tsd,td);
+ mdg->addPropertyToType(tsd,"subname",ts);
+
+ mdg->addPropertyToType(tc, "substring",tds);
+
+ /* by type with name/uri */
+ mdg->addPropertyToType(tc,"subdepartments", "myspace","SubDepartment",
+ true);
+
+ /* This is the data structure */
+
+
+
+ /* company
+ ----shareholder (Person)
+ ----substring (DerivedString)
+ * ----name (String)
+ * ----pdg (Manager)
+ (inherits haircolour from person,
+ has name as duplicate property - should use person.name
+ has officeid)
+ * ----name(String)
+ ----haircolour(String)
+ ----officeid(String)
+ *
+ * ----depts[] (Department)
+ * ----name (String)
+ * ----id (Integer)
+ * ----manager (Manager).
+ * ----name(String)
+ ----haircolour(String) from Person
+ * ----employees[] (Employee)
+ * ----name(String)
+ ----haircolour(String) - from Person
+ ----cubelocation(String)
+ --subdepartments[] (SubDepartment)
+ ----name (String) from Department
+ ----id (String) from Department
+ ----manager (Manager) from Department
+ ----employees (from department)
+ */
+
+ /* Now add a primitive type test to the manager */
+ mdg->addPropertyToType(tm,"string",ts);
+
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+ // dead mdg->addPropertyToType(tm,"charptr", "commonj.sdo","Bytes");
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+
+
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+
+ // create a few aliases
+
+ mdg->setAlias("myspace","Company","TheFirm");
+ mdg->setAlias("myspace","Company","departments","TheDepartments");
+ mdg->setAlias("myspace","Company","TheBigFirm");
+ mdg->setAlias("myspace","Company","TheLittleFirm");
+
+ const Type& tlf = mdg->getType("myspace","TheBigFirm");
+
+ cout << "I hope this says Company :" << tlf.getName() << endl;
+
+ cout << "I hope this says 3 : " << tlf.getAliasCount() << endl;
+
+ for (int ai = 0; ai < tlf.getAliasCount(); ai++)
+ {
+ cout << "AKA : " << tlf.getAlias(ai) << endl;
+ }
+
+ // just for a laugh - how about finding the TheDepartments?
+
+
+
+
+ /*
+ * create an empty datagraph with a type system starting from
+ * company
+ */
+
+ /*
+ *
+ * start of dms getting datagraph
+ */
+
+ // Change summary test begins
+ mdg->addPropertyToType(tc,"csumm","commonj.sdo","ChangeSummary");
+ // should log an error - but not fail
+ mdg->addPropertyToType(td,"csumm","commonj.sdo","ChangeSummary");
+
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+
+ cout << "BEFORE RESOLUTION" << endl;
+ printDataStructure(mdg);
+
+ /* Now create some objects in the dg */
+
+// DataObjectPtr dor;
+
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ cout << "AFTER RESOLUTION" << endl;
+ printDataStructure(mdg);
+
+ cout << "Manager is sequenced?" << tm.isSequencedType() << endl;
+
+ dor->setCString("substring","This is the sub string - its primitive, but not a string");
+
+ const char* subby = dor->getCString("substring");
+
+ cout << subby << endl;
+
+ dor->setCString("name","acmecorp");
+ const char* chnam = dor->getCString("name");
+ cout << chnam << endl;
+
+ dor->unset("name");
+
+ dor->setCString("name","acmecorp");
+
+ // Set up the two departments before logging starts
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+ dep1->setCString("name","Developement");
+
+ DataObjectPtr dep2= dor->createDataObject("departments");
+ dep2->setCString("name","Marketing");
+
+ // add a couple of floats to the floatlist
+ DataObjectList& dolist = dor->getList("floatlist");
+ dolist.append((float)1.4);
+ dolist.append((float)1.5);
+
+ //TODO - change summaries should live on the DataObject
+ // interface - can this be done?
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ const char* sname = dor->getCString("name");
+
+ cout << sname << endl;
+
+ // This should put a created entry in the cs.
+
+ // This should be equivalent to the alternative below.........
+ const Type& tcd = mdg->getType("myspace","Manager");
+ DataObjectPtr pdg = mdg->create((Type&)tcd);
+
+ // This set should put the entry into the change summary.
+ // both in the creations and in the changes.
+ dor->setDataObject("pdg",pdg);
+
+
+ // try getting the boolean as a string - should be defalted to false:
+ const char *bol;
+ try{
+ bol = pdg->getCString("boolean");
+ if (bol != 0)
+ {
+ cout << "Expected default boolean (false) : " << bol << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << "WRONG handled notset exception " << endl;
+ }
+
+ pdg->setBoolean("boolean", true);
+ bol = pdg->getCString("boolean");
+ cout << "Expected boolean (true) : " << bol << endl;
+
+ // and the widechars?
+ const char* wdc;
+ try {
+ wdc = pdg->getCString("string");
+ if (wdc != 0)
+ {
+ cout << "Expected default string (0) : " << bol << endl;
+ }
+ else
+ {
+ cout << " is empty " << endl;
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ cout << "WRONG handled notset exception" << endl;
+ }
+
+
+ // this should get a valid sequence..
+
+ SequencePtr sq = pdg->getSequence();
+
+
+ // The alternative.............................................
+ // Here the create should put the entry into the change summary
+ //DataObject* pdg = dor->createDataObject("pdg");
+
+ // This should do nothing to the cs, as its in a created object
+ pdg->setCString("name","Jacques LePlace");
+
+ // This should modify the property, and add an item to the sequence.
+ sq->addCString("name", "Jacques LeWrongPlace");
+
+
+ // The creation entry should be removed from the change summary
+ // The entry should no longer exist and the pointer is invalid
+ pdg->detach();
+
+ pdg = dor->getDataObject("pdg");
+
+
+ cout << " A deleted data object should be zero: " << pdg << endl;
+
+ pdg = mdg->create((Type&)tcd);
+
+ // A new creation in the change summary
+ dor->setDataObject("pdg",pdg);
+
+ // No modification as the object is created
+ pdg->setCString("name", "Mr Horace the snail");
+
+ sq = pdg->getSequence();
+
+ try {
+ // element 0 is the first setting - which we just deleted!
+ sq->setCStringValue(0,"Eric the half a bee");
+ }
+ catch (SDOIndexOutOfRangeException)
+ {
+ // thats OK
+ sq->addCString("name","Eric the quarter bee");
+ }
+
+
+ sq->addText(" - only a quarter was expected \r\n");
+
+ for (int ii=0;ii<sq->size();ii++)
+ {
+ cout << sq->getCStringValue(ii);
+ }
+
+ try {
+ const char* n = pdg->getCString("name");
+ cout << " Name from deleted item: " << n << endl;
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ // thats ok
+ cout << "caught prop not found" << endl;
+ }
+
+
+ // This should put a change in the cs.
+ dor->setCString("name","mega-new-acmecorp");
+
+
+ // At this point, we should know that pdg was empty and is now
+ // a created object. And that the old string for company name
+ // was "acmecorp"
+
+ // cs->DebugPrint();
+
+
+ /* Now set up the primitive type test on PDG */
+
+ pdg->setCString("string","Hello I am a string");
+ pdg->setBoolean("boolean",true);
+ pdg->setByte("byte",23);
+ pdg->setCharacter("character",45);
+ pdg->setShort("short",34);
+ pdg->setLong("long", 56);
+ pdg->setDouble("longdouble",89.0);
+ pdg->setFloat("float",90.0);
+ pdg->setDate("date",(time_t)200);
+
+
+ pdg->setLong("longlong",0xFFFFFFFFFFFFFFFF);
+
+ // try reading the longlong as a string
+ const char *lls = pdg->getCString("longlong");
+ cout << "0xffffffffffffffff = : " << lls << endl;
+
+ pdg->setLong("longlong",0x7FFFFFFFFFFFFFFF);
+
+ lls = pdg->getCString("longlong");
+ cout << "0x7fffffffffffffff = " << lls << endl;
+
+ pdg->setLong("longlong",0x7FFFFFFF);
+ lls = pdg->getCString("longlong");
+ cout << "0x7fffffff = " << lls << endl;
+
+ pdg->setLong("longlong",0x80000000);
+ lls = pdg->getCString("longlong");
+ cout << "0x80000000 = " << lls << endl;
+
+ pdg->setLong("longlong",78);
+
+ // pdg->setCharPtr("charptr","Hello I am a char star");
+
+ wchar_t* wide = new wchar_t[4];
+ wide[0] = 'W';
+ wide[1] = 'i';
+ wide[2] = 'd';
+ wide[3] = 'e';
+
+ pdg->setString("string",wide,4);
+
+ // and as a string?
+ wdc = pdg->getCString("string");
+ cout << " Expected Wide (fat chance) - got : " << wdc << endl;
+
+ delete wide;
+
+ char* thin = new char[4];
+ thin[0] = 'T';
+ thin[1] = 'h';
+ thin[2] = 'i';
+ thin[3] = 'n';
+
+ pdg->setBytes("bytes",thin,4);
+
+ delete thin;
+
+
+ const char* ps = pdg->getCString("string");
+ cout << "Expecting string, got " << ps << endl;
+
+ bool pb = pdg->getBoolean("boolean");
+ cout << "Expected bool true, got " << pb << endl;
+
+ char pc = pdg->getByte("byte");
+ cout << "Expected char 23, got " << pc << endl;
+
+ wchar_t pw = pdg->getCharacter("character");
+ cout << "expected wchar 45, got " << pw << endl;
+
+ short pss = pdg->getShort("short");
+ cout << "Expected short 34, got " << pss << endl;
+
+ long pl = pdg->getLong("long");
+ cout << "Expected long 56 , got " <<pl << endl;
+
+ int64_t pi = pdg->getLong("longlong");
+ cout << "Expected long long 78, got " << (long)pi << endl;
+
+ long double ld = pdg->getDouble("longdouble");
+ cout << "Expected long double 89, got " << ld << endl;
+
+ float pf = pdg->getFloat("float");
+ cout << "Expected float 90, got " << pf << endl;
+
+ SDODate pt = pdg->getDate("date");
+ cout << "Expected time_t 200, got " << pt.getTime() << endl;
+
+ //const char * pcs = pdg->getCharPtr("charptr");
+ //cout <<"Expected charptr, got " << pcs << endl;
+
+ wchar_t* result;
+ // get the length to allocate:
+ unsigned int widelen = pdg->getString("string",0,0);
+ if (widelen > 0) {
+ result = new wchar_t[widelen];
+ widelen = pdg->getString("string",result,widelen);
+ for ( i=0;i<widelen;i++)
+ {
+ cout << "Wide[" << i << "]=" << result[i] << endl;
+ }
+ delete result;
+ }
+
+
+ char* thinresult;
+
+ unsigned int thinlen = pdg->getBytes("bytes",0,0);
+ if (thinlen > 0) {
+ thinresult = new char[thinlen];
+ thinlen = pdg->getBytes("bytes",thinresult,thinlen);
+ for ( i=0;i<thinlen;i++)
+ {
+ cout << "Thin[" << i << "]=" << thinresult[i] << endl;
+ }
+ delete thinresult;
+ }
+
+
+ //cout <<"Expected charptr, got " << pcs << endl;
+
+ // add two more departments - the first should provoke the
+ // saving of a list in a chanaeg summary
+
+ DataObjectPtr dep3 = dor->createDataObject("departments");
+ dep3->setCString("name","Architecture");
+
+ // The second should do no logging in the change summary
+
+ DataObjectPtr dep4= dor->createDataObject("departments");
+ dep4->setCString("name","Pyrotechnics");
+
+
+ // create another one using tha alias
+ DataObjectPtr dep5= dor->createDataObject("TheDepartments");
+ dep5->setCString("name","WibbleSmodging");
+
+ DataObjectPtr emp1 = dep1->createDataObject("employees");
+ emp1->setCString("name","Eric");
+
+
+ DataObjectPtr emp2 = dep1->createDataObject("employees");
+ emp2->setCString("name","Bill");
+
+ // now lets make eric employee of the month
+ dor->setDataObject("employee of the month",emp1);
+
+ // no - actually it was bill
+ dor->setDataObject("employee of the month",emp2);
+
+
+
+ // Now add to the list of floats, hopefully the two old
+ // values will get change summarised.
+
+ dolist = dor->getList("floatlist");
+ //float f = dolist[0]->getFloat("");
+ float f = dolist.getFloat(0);
+
+ cout << f;
+
+ dolist.setFloat(0,(float)567.7);
+
+ f = dolist.getFloat(0);
+
+ cout << f;
+
+ dolist.insert(0,(float)34.56);
+
+
+
+
+ // cs->DebugPrint();
+
+// const char* ch = dor->getString("departments[1]/employees[2]/name");
+
+ DataObjectPtr ddd = dor->getDataObject("departments[1]/employees[2]");
+
+ const char* ch = ddd->getCString("name");
+
+ cout << "Are you Bill?:" << ch << endl;
+
+ // just for a laugh - how about finding the TheDepartments?
+
+ DataObjectPtr ddd2 = dor->getDataObject("TheDepartments[1]/employees[2]");
+
+ const char* ch2 = ddd2->getCString("name");
+
+ cout << "Are you still Bill?:" << ch2 << endl;
+
+
+
+ DataObjectPtr dempofm = dor->getDataObject("employee of the month");
+
+ const char* chh = dempofm->getCString("name");
+
+ cout << "The employee of the month is " << chh << endl;
+
+ // Suppose we delete bill - I wonder what happens?
+
+ // doesnt work - why not??dor->unSet("departments[1]/employees[2]");
+ DataObjectList& dlo = dor->getList("departments[1]/employees");
+ DataObjectPtr fred = dlo.remove(1);
+ //delete fred;
+
+ dempofm = dor->getDataObject("employee of the month");
+
+ cout << "Hopefully emp of month is now zero : " << dempofm << endl;
+
+ /* "The client would create a data mediator and get graph which
+ would return the root data object " says colin*/
+
+ const char* boss = dor->getCString("pdg/name");
+
+ cout << boss << endl;
+
+ DataObjectPtr mypdg = dor->getDataObject("pdg");
+
+ Type::Types t = mypdg->getTypeEnum();
+
+ if (t != Type::OtherTypes) {
+ cout << "MY pdg is not something!" << endl;
+ }
+
+ const char* boss2 = mypdg->getCString("name");
+
+ cout << boss2 << endl;
+
+ /* TODO1 ref or pointer to dol.
+ Manip done by methods of the
+ list, reflected directly in the dg
+ need methods to create /insert dataobjects in lists*/
+
+
+ /* getPrimitiveArrayListVectorThingy() */
+
+ DataObjectList& deps = dor->getList("departments");
+
+ cout << "size of list " << deps.size() << endl;
+
+ DataObjectPtr dout = deps[0];
+
+ dout->setCString("name","Research And Development");
+
+ const char* snew = dout->getCString("name");
+
+ cout << snew << endl;
+
+ string snew2 = dor->getCString("departments[1 ] /name");
+
+ cout << snew2 << endl;
+
+ for (int lx = 0; lx < deps.size(); lx++)
+ {
+ cout << "Department: " << deps[lx]->getCString("name") << endl;
+ }
+
+ cs->endLogging();
+
+
+ try {
+ // should fail - if localtype not setstd::
+ dor->setCString("departments","department label");
+ const char* slabel = dor->getCString("departments");
+ cout << "String in list type:" << slabel << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Normal expected exception in test case" << endl;
+ }
+
+ try
+ {
+ // The exception for path is caught by the SDO library - perhaps we should
+ // pass it up?
+ const char* snew3 = dor->getCString(" ]awep50wi4,0qw9q]45]# q2345 -t -v3lt6o -56o 56=-o7nl ewv/;sdl f[vxddglh]px dfju/ g#k./jh#.k./");
+ cout << snew3 << endl;
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ cout << "Normal Invalid path exception" << endl;
+ }
+
+ try
+ {
+
+ // catch a and a property not found
+ const Property& pp = dor->getType().getProperty("notaproperty");
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ cout << "Normal SDOPropertyNotFound exception" << endl;
+ }
+
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << " in ";
+ cout << e.getFileName() << " at line ";
+ cout << e.getLineNumber() << endl;
+ cout << e.getFunctionName() << " ";
+ cout << e.getSeverity() << " ";
+ cout << e.getMessageText() << endl;
+ }
+
+
+ return 0;
+}
+
+void sdotest::getproptest()
+{
+ // should be able to get a property by xpath...
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ // manager is a sequenced type...
+ mdg->addType("myspace","Manager", true, false);
+ mdg->addType("myspace","Employee");
+
+
+ /* Now add the properties to the types...*/
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& ts = mdg->getType("commonj.sdo","String");
+ const Type& ti = mdg->getType("commonj.sdo","Integer");
+ const Type& tf = mdg->getType("commonj.sdo","Float");
+ const Type& tm = mdg->getType("myspace","Manager");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+
+ mdg->addPropertyToType(tc,"name",ts);
+
+ mdg->addPropertyToType(tc,"address",ts);
+
+ mdg->addPropertyToType(tc,"departments", td,true);
+
+ // add a reference to employee of the month
+ mdg->addPropertyToType(tc,"employee of the month", te, false, false, false);
+
+ /* A list of floats */
+ mdg->addPropertyToType(tc,"floatlist", tf,true);
+ mdg->addPropertyToType(tc,"director", tm);
+
+ mdg->addPropertyToType(td,"name", ts);
+ mdg->addPropertyToType(td,"id", ti);
+
+ mdg->addPropertyToType(td,"manager", tm);
+ mdg->addPropertyToType(tm,"name", ts);
+
+ mdg->addPropertyToType(te,"name",ts);
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+ //company/departments/employees.
+ // company - name, address, floatlist
+ // department name, id, manager
+ // employee name
+
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ try
+ {
+
+ const Property& p = dor->getType().getProperty("name");
+ cout << "Companys name property is:" << p.getName() << endl;
+
+ const Property& p1 = dor->getType().getProperty("departments");
+ cout << "Companys dept property is:" << p1.getName() << endl;
+
+ // now try some xpaths...
+
+ const Property& p2 = dor->getType().getProperty("departments/employees");
+ cout << "Departments empl property is:" << p2.getName() << endl;
+
+ const Property& p3 = dor->getType().getProperty("departments[456]/employees[123]");
+ cout << "Departments empl property is:" << p3.getName() << endl;
+
+ const Property& p4 = dor->getType().getProperty("departments.34/employees.123/name");
+ cout << "Employees name property is:" << p4.getName() << endl;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout <<"Exceptions - xpath didnt work" << endl;
+ }
+ try {
+ cout << "before p5" << endl;
+ const Property& p5 = dor->getType().getProperty("departments.34/[]/name");
+ cout << "after p5" << endl;
+ cout << "Employees name property is:" << p5.getName() << endl;
+ cout << "Expected error - didnt get one" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ try {
+ const Property& p6 = dor->getType().getProperty("deptartments");
+ cout << "Deptartments property is:" << p6.getName() << endl;
+ cout << "Expected error - didnt get one" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ try {
+ const Property& p7 = dor->getType().getProperty("../company");
+ cout << "Company property is:" << p7.getName() << endl;
+ cout << "Expected error - didnt get one" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+}
+
+void sdotest::querytest()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ // manager is a sequenced type...
+ mdg->addType("myspace","Manager", true, false);
+ mdg->addType("myspace","Employee");
+
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool= mdg->getType("commonj.sdo","Boolean");
+ const Type& tbyte= mdg->getType("commonj.sdo","Byte");
+ const Type& tchar= mdg->getType("commonj.sdo","Character");
+ const Type& tint= mdg->getType("commonj.sdo","Integer");
+ const Type& tlong= mdg->getType("commonj.sdo","Long");
+ const Type& tfloat= mdg->getType("commonj.sdo","Float");
+ const Type& tbytes = mdg->getType("commonj.sdo","Bytes");
+ const Type& tdouble= mdg->getType("commonj.sdo","Double");
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& tm = mdg->getType("myspace","Manager");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+
+ mdg->addPropertyToType(tc,"name",tstring);
+
+ mdg->addPropertyToType(tc,"departments", td,true);
+
+ // add a reference to employee of the month
+ mdg->addPropertyToType(tc,"employee of the month", te, false, false, false);
+
+ mdg->addPropertyToType(tc,"director", tm);
+
+ mdg->addPropertyToType(td,"name", tstring);
+
+ mdg->addPropertyToType(td,"manager", tm);
+
+ mdg->addPropertyToType(tm,"name", tstring);
+
+
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+ mdg->addPropertyToType(te,"bool",tbool);
+ mdg->addPropertyToType(te,"byte",tbyte);
+ mdg->addPropertyToType(te,"char",tchar);
+ mdg->addPropertyToType(te,"int",tint);
+ mdg->addPropertyToType(te,"float",tfloat);
+ mdg->addPropertyToType(te,"long",tlong);
+ mdg->addPropertyToType(te,"double",tdouble);
+ mdg->addPropertyToType(te,"bytes",tbytes);
+ mdg->addPropertyToType(te,"string",tstring);
+ mdg->addPropertyToType(te,"name",tstring);
+
+ //company/departments/employees.
+ // company - name, address, floatlist
+ // department name, id, manager
+ // employee name
+
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr dept = dor->createDataObject("departments");
+
+ DataObjectPtr emp1 = dept->createDataObject("employees");
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ DataObjectPtr emp3 = dept->createDataObject("employees");
+
+ emp1->setCString("name","Employee1");
+ emp2->setCString("name","Employee2");
+ emp3->setCString("name","Employee3");
+
+
+ emp1->setBoolean("bool",true);
+ emp1->setByte("byte",'1');
+ emp1->setCharacter("char",'1');
+ emp1->setInteger("int",1);
+ emp1->setFloat("float",1.0);
+ emp1->setLong("long",1);
+ emp1->setDouble("double",1.0);
+
+ char* bytes = new char[6];
+ bytes[0] = 'h';
+ bytes[1] = 'e';
+ bytes[2] = 'l';
+ bytes[3] = 'l';
+ bytes[4] = 'o';
+
+ emp1->setBytes("bytes",bytes,5);
+
+ wchar_t* mbytes = new wchar_t[6];
+ mbytes[0] = 'h';
+ mbytes[1] = 'e';
+ mbytes[2] = 'l';
+ mbytes[3] = 'l';
+ mbytes[4] = 'o';
+
+ emp1->setString("string",mbytes,5);
+
+
+ emp2->setBoolean("bool",true);
+ emp2->setByte("byte",'2');
+ emp2->setCharacter("char",'2');
+ emp2->setInteger("int",200);
+ emp2->setFloat("float",200.0);
+ emp2->setLong("long",200);
+ emp2->setDouble("double",200.0);
+
+ char* bytes2 = new char[6];
+ bytes2[0] = 'h';
+ bytes2[1] = 'e';
+ bytes2[2] = 'l';
+ bytes2[3] = 'p';
+ bytes2[4] = '!';
+
+ emp2->setBytes("bytes",bytes2,5);
+
+ wchar_t* mbytes2 = new wchar_t[6];
+ mbytes2[0] = 'h';
+ mbytes2[1] = 'e';
+ mbytes2[2] = 'l';
+ mbytes2[3] = 'p';
+ mbytes2[4] = '!';
+
+ emp2->setString("string",mbytes2,5);
+
+ emp3->setBoolean("bool",false);
+ emp3->setByte("byte",'4');
+ emp3->setCharacter("char",'4');
+ emp3->setInteger("int",400);
+ emp3->setFloat("float",400.0);
+ emp3->setLong("long",400);
+ emp3->setDouble("double",400.0);
+
+ char* bytes3 = new char[6];
+ bytes3[0] = 'w';
+ bytes3[1] = 'o';
+ bytes3[2] = 'm';
+ bytes3[3] = 'p';
+ bytes3[4] = '!';
+
+ emp3->setBytes("bytes",bytes3,5);
+
+ wchar_t* mbytes3 = new wchar_t[6];
+ mbytes3[0] = 'w';
+ mbytes3[1] = 'o';
+ mbytes3[2] = 'm';
+ mbytes3[3] = 'p';
+ mbytes3[4] = '!';
+
+ emp3->setString("string",mbytes3,5);
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[bool=false]");
+ cout << "Expected employee3: got " << dob1->getCString("name") << endl;
+
+ DataObjectPtr dob2 = dor->getDataObject("departments[1]/employees[bool=true]");
+ cout << "Expected employee1: got " << dob2->getCString("name") << endl;
+
+ DataObjectPtr dob3 = dor->getDataObject("departments[1]/employees[byte=2]");
+ cout << "Expected employee2: got " << dob3->getCString("name") << endl;
+
+ DataObjectPtr dob4 = dor->getDataObject("departments[1]/employees[byte=1]");
+ cout << "Expected employee1: got " << dob4->getCString("name") << endl;
+
+ DataObjectPtr dob5 = dor->getDataObject("departments[1]/employees[bytes=hello]");
+ cout << "Expected employee1: got " << dob5->getCString("name") << endl;
+
+ DataObjectPtr dob5a = dor->getDataObject("departments[1]/employees[bytes=\"hello\"]");
+ cout << "Expected employee1: got " << dob5a->getCString("name") << endl;
+
+ DataObjectPtr dob5b = dor->getDataObject("departments[1]/employees[bytes='hello']");
+ cout << "Expected employee1: got " << dob5b->getCString("name") << endl;
+
+ DataObjectPtr dob6 = dor->getDataObject("departments[1]/employees[bytes=womp!]");
+ cout << "Expected employee3: got " << dob6->getCString("name") << endl;
+
+ DataObjectPtr dob7 = dor->getDataObject("departments[1]/employees[double=200.0]");
+ cout << "Expected employee2: got " << dob7->getCString("name") << endl;
+
+ DataObjectPtr dob8 = dor->getDataObject("departments[1]/employees[string=help!]");
+ cout << "Expected employee2: got " << dob8->getCString("name") << endl;
+
+ DataObjectPtr dob8a = dor->getDataObject("departments[1]/employees[string=\"help!\"]");
+ cout << "Expected employee2: got " << dob8a->getCString("name") << endl;
+
+ DataObjectPtr dob8b = dor->getDataObject("departments[1]/employees[string= 'help!']");
+ cout << "Expected employee2: got " << dob8b->getCString("name") << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << " in ";
+ cout << e.getFileName() << " at line ";
+ cout << e.getLineNumber() << endl;
+ cout << e.getFunctionName() << " ";
+ cout << e.getMessageText() << endl;
+ }
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[bool=doughnut]");
+ cout << "Expected to fail!" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[4]/employees[bool=true]");
+ cout << "Expected to fail!" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[bytes=whoomp!]");
+ cout << "Expected to fail!" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/blmployees[bool=true]");
+ cout << "Expected to fail!" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[teapot]/employees[bool=true]");
+ cout << "Expected to fail!" << endl;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ }
+
+ delete bytes;
+ delete bytes2;
+ delete bytes3;
+ delete mbytes;
+ delete mbytes2;
+ delete mbytes3;
+}
+
+void sdotest::setmany()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","School");
+ mdg->addType("myspace","Class");
+ mdg->addType("myspace","Teacher");
+ mdg->addType("myspace","Child");
+ mdg->addType("myspace","Address");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& ts = mdg->getType("myspace","School");
+ const Type& tc = mdg->getType("myspace","Class");
+ const Type& tch = mdg->getType("myspace","Child");
+ const Type& tt = mdg->getType("myspace","Teacher");
+ const Type& ta = mdg->getType("myspace","Address");
+
+ mdg->addPropertyToType(tc,"name",tstring);
+ mdg->addPropertyToType(ts,"name",tstring);
+ mdg->addPropertyToType(tch,"name",tstring);
+ mdg->addPropertyToType(tt,"name",tstring);
+
+ mdg->addPropertyToType(tc,"number",tint);
+ mdg->addPropertyToType(ts,"number",tint);
+ mdg->addPropertyToType(tch,"number",tint);
+ mdg->addPropertyToType(tt,"number",tint);
+
+ mdg->addPropertyToType(ts,"classes", tc,true);
+ mdg->addPropertyToType(tc,"children", tch,true);
+ mdg->addPropertyToType(tc,"teacher", tt);
+
+ mdg->addPropertyToType(tch,"address", ta);
+ mdg->addPropertyToType(ts,"address", ta);
+ mdg->addPropertyToType(tt,"address", ta);
+
+ mdg->addPropertyToType(ta,"lines", tstring, true);
+
+ DataObjectPtr school = mdg->create((Type&)ts);
+
+ DataObjectPtr class1 = school->createDataObject("classes");
+ DataObjectPtr class2 = school->createDataObject("classes");
+
+ DataObjectPtr teach1 = class1->createDataObject("teacher");
+
+ DataObjectPtr kid1 = class1->createDataObject("children");
+ DataObjectPtr kid2 = class1->createDataObject("children");
+ DataObjectPtr kid3 = class1->createDataObject("children");
+
+ DataObjectPtr teach2 = class2->createDataObject("teacher");
+
+ DataObjectPtr kid4 = class2->createDataObject("children");
+ DataObjectPtr kid5 = class2->createDataObject("children");
+ DataObjectPtr kid6 = class2->createDataObject("children");
+
+ school->setCString("name","King Norberts");
+ school->createDataObject("address");
+ school->setCString("address/lines.0","The Place");
+ school->setCString("address/lines.1","1 The Avenue");
+ school->setCString("address/lines.2","Murchester");
+ school->setCString("address/lines.3","England");
+
+ class1->setCString("name","Primary");
+ class2->setCString("name","Secondary");
+
+ class1->setCString("teacher/name","Mr Philbert Chloroform");
+ class2->setCString("teacher/name","Mr Brian Onastick");
+
+ kid1->setCString("name", "Witherspoon Jnr");
+ kid2->setCString("name", "Snape");
+ kid3->setCString("name", "Thannet");
+ kid4->setCString("name", "Grimbling");
+ kid5->setCString("name", "Snagget Minor");
+ kid6->setCString("name", "Van Den Bograt");
+
+ kid1->setInteger("number", 1);
+ kid2->setInteger("number", 2);
+ kid3->setInteger("number", 3);
+ kid4->setInteger("number", 4);
+ kid5->setInteger("number", 5);
+ kid6->setInteger("number", 6);
+
+ cout <<" School :" << school->getCString("name") << endl;
+
+ cout <<" Address1:" << school->getCString("address/lines.0") << endl;
+ cout <<" Address2:" << school->getCString("address/lines.1") << endl;
+ cout <<" Address3:" << school->getCString("address/lines.2") << endl;
+ cout <<" Address4:" << school->getCString("address/lines.3") << endl;
+
+ cout <<" Class :" << class1->getCString("name") << endl;
+ cout <<" Teacher :" << class1->getCString("teacher/name") << endl;
+ cout <<" Pupil1 :" << class1->getCString("children.0/name") << endl;
+ cout <<" Pupil2 :" << class1->getCString("children[number=2]/name") << endl;
+ cout <<" Pupil3 :" << class1->getCString("children[3]/name") << endl;
+
+ cout <<" Class :" << class2->getCString("name") << endl;
+ cout <<" Teacher :" << class2->getCString("teacher/name") << endl;
+ cout <<" Pupil1 :" << class2->getCString("children[1]/name") << endl;
+ cout <<" Pupil2 :" << class2->getCString("children.1/name") << endl;
+ cout <<" Pupil3 :" << class2->getCString("children[number=6]/name") << endl;
+
+ try {
+ cout <<" Pupil3 :" << class2->getCString("children[4]/name") << endl;
+ cout << "That should have failed with a path not found" << endl;
+ }
+ catch (SDOPathNotFoundException e)
+ {
+
+ }
+ if (XpathHelper::isIndexed("abc[2]")) {
+ cout << "Indexed as expected" << endl;
+ }
+ else {
+ cout << "Bad - not indexed" << endl;
+ }
+
+ if (XpathHelper::isIndexed("wibble/[2]")) {
+ cout << "Indexed as expected" << endl;
+ }
+ else {
+ cout << "Bad - not indexed" << endl;
+ }
+
+ if (XpathHelper::isIndexed("wibble/wobble[2]")) {
+ cout << "Indexed as expected" << endl;
+ }
+ else {
+ cout << "Bad - not indexed" << endl;
+ }
+
+ if (XpathHelper::isIndexed("wibble/wobble.2")) {
+ cout << "Indexed as expected" << endl;
+ }
+ else {
+ cout << "Bad - not indexed" << endl;
+ }
+
+ if (XpathHelper::isIndexed("wibble/wobble.2")) {
+ cout << "Indexed as expected" << endl;
+ }
+ else {
+ cout << "Bad - not indexed" << endl;
+ }
+
+ try {
+ cout <<" Address5 :" << school->getCString("address/lines[5]") << endl;
+ cout << "Address5 should have failed with an index out of range" << endl;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+
+ }
+
+ try {
+ school->setCString("address/lines[6]","PostCode");
+ cout << "Debatable behaviour - appended" << endl;
+ cout <<" Address4 :" << school->getCString("address/lines[5]") << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout <<"Unexpected exception"<< endl;
+ }
+
+
+}
+
+void sdotest::carotest2()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ const Type& troot = mdg->getType("myspace","root");
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+
+}
+
+void sdotest::adddeletetest()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","bill");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","root","bill",
+ "myspace","bill");
+
+ const Type& troot = mdg->getType("myspace","root");
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+
+ ChangeSummaryPtr cs = root->getChangeSummary();
+ cs->beginLogging();
+ DataObjectPtr dob = root->createDataObject("bill");
+ root->unset("bill");
+
+}
+
+void sdotest::carotest()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+ mdg->addType("myspace","department");
+ mdg->addType("myspace","employee");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","employee","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","companies",
+ "myspace","company", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","departments",
+ "myspace","department", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","eotm",
+ "myspace","employee", false, false, false);
+
+ mdg->addPropertyToType("myspace","department","employees",
+ "myspace","employee", true, false, true);
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+ ChangeSummaryPtr cs = root->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr comp = root->createDataObject("companies");
+
+ comp->setCString("name","Acme");
+
+ cout << "name of the company is " << comp->getCString("name") << endl;
+ try {
+ root->unset("companies[0]");
+ }
+ catch (SDOUnsupportedOperationException e)
+ {
+ cout << "Normal unsupported operation for unset of many valued item" << endl;
+ }
+}
+
+
+void sdotest::bug2()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","companies",
+ "myspace","company", true, false, true);
+
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+
+ ChangeSummaryPtr cs = root->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr comp = root->createDataObject("companies");
+
+ comp->setCString("name","Acme");
+
+ dumpproperties(root);
+
+ DataObjectList& dl = root->getList("companies");
+ dl.remove(0);
+
+ dumpproperties(root);
+
+
+ cout << "Change summary should have no entries..." << endl;
+
+ dumpchangesummary(cs);
+
+ dumpproperties(root);
+
+ cout << "Change summary should have no entries..." << endl;
+
+ dumpchangesummary(cs);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << " in ";
+ cout << e.getFileName() << " at line ";
+ cout << e.getLineNumber() << endl;
+ cout << e.getFunctionName() << " ";
+ cout << e.getMessageText() << endl;
+ }
+}
+
+
+void sdotest::dumpproperties(DataObjectPtr root)
+{
+ PropertyList pl = root->getInstanceProperties();
+ for (int i=0;i<pl.size();i++)
+ {
+ if (pl[i].isMany())
+ {
+ DataObjectList& dl = root->getList(pl[i]);
+ if (pl[i].getType().isDataType())
+ {
+ char buf[10];
+ for (int j=0;j<dl.size();j++)
+ {
+
+ sprintf(buf,"%02d",j);
+ cout << "MProperty:" << pl[i].getName() << "[" << buf << "]:" << dl.getCString(j) << endl;
+ }
+ }
+ else
+ {
+ cout << "MObject Property" << pl[i].getName() << endl;
+ for (int j=0;j<dl.size();j++)
+ {
+ if (dl[j] != 0)
+ {
+ dumpproperties(dl[j]);
+ }
+ }
+ cout << "End of MObject Property " << pl[i].getName() << endl;
+ }
+ }
+
+ else
+ {
+ if (pl[i].getType().isDataType())
+ {
+ cout << "Property:" << pl[i].getName() << ":" << root->getCString(pl[i]) << endl;
+ }
+ else
+ {
+ cout << "Object Property:" << pl[i].getName() << endl;
+ DataObjectPtr d = root->getDataObject(pl[i]);
+ if (d != 0)
+ {
+ dumpproperties(d);
+ }
+ else
+ {
+ cout << " Value was not set or null" << endl;
+ }
+ cout << "End of Object Property " << pl[i].getName() << endl;
+ }
+ }
+ }
+}
+
+
+void sdotest::datetest()
+{
+
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","startupdate",
+ "commonj.sdo","Date", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","reviewdates",
+ "commonj.sdo","Date", true, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","company",
+ "myspace","company", false, false, true);
+
+
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+ ChangeSummaryPtr cs = root->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr comp = root->createDataObject("company");
+
+
+ comp->setCString("name","DateTest");
+
+ cout << "name of the company is " << comp->getCString("name") << endl;
+
+ // cannot get undefaulted properties
+ //cout << "unset start of the company is " << comp->getDate("startupdate").getTime() << endl;
+
+ comp->setDate("startupdate",SDODate( 1000 ));
+
+ cout << "set start of the company is " << comp->getDate("startupdate").getTime() << endl;
+
+ DataObjectList& dol = comp->getList("reviewdates");
+
+
+ dol.append(SDODate(2000));
+ dol.append(SDODate(4000));
+
+ for (int i=0;i < dol.size(); i++)
+ {
+ cout << "Review number:" << i << " was:" << dol.getDate(i).getTime() << endl;
+ cout << "Formatted:" << i << " was:" << dol.getDate(i).ascTime() << endl;
+ }
+
+ cs->endLogging();
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << " in ";
+ cout << e.getFileName() << " at line ";
+ cout << e.getLineNumber() << endl;
+ cout << e.getFunctionName() << " ";
+ cout << e.getMessageText() << endl;
+ }
+
+}
+
+void sdotest::matttest1()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+ mdg->addType("myspace","department");
+ mdg->addType("myspace","employee");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","employee","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","companies",
+ "myspace","company", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","departments",
+ "myspace","department", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","eotm",
+ "myspace","employee", false, false, false);
+
+ mdg->addPropertyToType("myspace","department","employees",
+ "myspace","employee", true, false, true);
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+
+ DataObjectPtr comp = root->createDataObject("companies");
+
+ comp->setCString("name","Acme");
+
+ DataObjectPtr dept1 = comp->createDataObject("departments");
+
+ dept1->setCString("name","Shoe");
+
+ DataObjectPtr dept2 = comp->createDataObject("departments");
+
+ dept2->setCString("name","IT");
+
+ DataObjectPtr sue = dept1->createDataObject("employees");
+
+ sue->setCString("name","Sue");
+
+ DataObjectPtr billy = dept2->createDataObject("employees");
+
+ billy->setCString("name","Billy");
+
+ // Want to swap Sue and Billy so, while holding them in variables, should be
+ //able to unset from department then reinsert
+
+ // method 1 - clear the lists...
+ dept1->unset("employees");
+ dept2->unset("employees");
+
+ DataObjectPtr cont = billy->getContainer();
+
+ if (cont != 0)
+ {
+ cout << "Container of Billy should be zero, but is :" << cont->getCString("name") << endl;
+ }
+ else {
+ cout << "OK, - Billy is not contained." << endl;
+ }
+
+ DataObjectList& li1 = dept1->getList("employees");
+ DataObjectList& li2 = dept2->getList("employees");
+ li1.append(billy);
+ li2.append(sue);
+
+ DataObjectPtr cont2 = billy->getContainer();
+
+ if (cont2 != 0)
+ {
+ cout << "Container of Billy should be dept1, and is :" << cont2->getCString("name") << endl;
+ }
+ else {
+ cout << "Problem - Billy is not contained." << endl;
+ }
+
+ li1.remove(0);
+ li2.remove(0);
+
+ DataObjectPtr cont3 = billy->getContainer();
+
+ if (cont3 != 0)
+ {
+ cout << "Container of Billy should be zero, but is :" << cont3->getCString("name") << endl;
+ }
+ else {
+ cout << "OK, - Billy is not contained." << endl;
+ }
+
+
+ li1.append(sue);
+ li2.append(billy);
+
+ DataObjectPtr cont4 = billy->getContainer();
+
+ if (cont4 != 0)
+ {
+ cout << "Container of Billy should be dept2, and is :" << cont4->getCString("name") << endl;
+ }
+ else {
+ cout << "Problem - Billy is not contained." << endl;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e.getEClassName() << " in ";
+ cout << e.getFileName() << " at line ";
+ cout << e.getLineNumber() << endl;
+ cout << e.getFunctionName() << " ";
+ cout << e.getMessageText() << endl;
+ }
+}
+
+void sdotest::carotest3()
+{
+ // sequence new APIs
+ // data object list, new getLength(unsigned int)
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ // company is sequenced.
+ mdg->addType("myspace","Company",true,false);
+
+ mdg->addType("myspace","Department",true,false);
+ // string is many
+
+ mdg->addPropertyToType("myspace","Company","string","commonj.sdo","String",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","departments","myspace","Department",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","strings","commonj.sdo","String",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","integers","commonj.sdo","Integer",
+ true);
+
+
+ mdg->addPropertyToType("myspace","Department","name","commonj.sdo","String");
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr dor = mdg->create(tcc);
+ const Property& sprop = dor->getType().getProperty("string");
+
+ SequencePtr sptr = dor->getSequence();
+
+ printseq(sptr);
+
+ sptr->addCString(sprop,"I am Item 1 of string");
+
+ printseq(sptr);
+
+ sptr->addText("I am the first free text");
+
+ printseq(sptr);
+
+ sptr->addCString(sprop,"I am Item 2 of string");
+
+ printseq(sptr);
+
+ sptr->setText(1,"I am free text which has been modified");
+
+ printseq(sptr);
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+
+ printseq(sptr);
+
+ dep1->setCString("name","department1");
+
+ printseq(sptr);
+
+ DataObjectList& dol = dor->getList("departments");
+
+ unsigned int ii = dol.getLength(0);
+
+ cout << "Length of a data object should be zero:" << ii << endl;
+
+ DataObjectList& strl = dor->getList("strings");
+
+ wchar_t * buf = new wchar_t[5];
+ buf[0] = 'a';
+ buf[1] = 'b';
+ buf[2] = 'c';
+ buf[3] = 'd';
+ buf[4] = 'e';
+
+ strl.append(buf,1);
+ strl.append(buf,2);
+ strl.append(buf,3);
+ strl.append(buf,4);
+ strl.append(buf,5);
+
+ cout << "Element zero, length 1: " << strl.getLength(0) << endl;
+ cout << "Element one, length 2: " << strl.getLength(1) << endl;
+ cout << "Element two, length 3: " << strl.getLength(2) << endl;
+ cout << "Element three,length 4: " << strl.getLength(3) << endl;
+ cout << "Element four, length 5: " << strl.getLength(4) << endl;
+
+ try {
+ cout << "Element five doesnt exist: " << strl.getLength(5);
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal out of range exception in test" << endl;
+ }
+
+ DataObjectList& numl = dor->getList("integers");
+
+ try {
+ cout << "On an empty list? " << numl.getLength(0);
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal out of range exception in test" << endl;
+ }
+}
+
+
+int main (int argc, char** argv)
+{
+ Logger::setLogging(20);
+
+ sdotest::b47293();
+
+
+ sdotest::propdefaulttest();
+ sdotest::graham5();
+ sdotest::graham4();
+
+ sdotest::detachtest();
+ sdotest::includetest();
+ sdotest::testLoad();
+ sdotest::leak();
+ sdotest::twolists();
+ sdotest::b46633();
+
+ sdotest::testUtil();
+
+ sdotest::clonetest();
+
+ sdotest::b46693();
+ Logger::setLogging(0);
+// sdotest::b46734();
+ sdotest::notfound();
+ sdotest::testErrors();
+
+ sdotest::b46634();
+ sdotest::loadManyOpen();
+
+ sdotest::doctest();
+ sdotest::b46617b();
+ sdotest::b46617();
+ sdotest::b46613();
+
+ sdotest::graham3();
+ sdotest::graham1();
+ sdotest::graham2();
+
+
+ sdotest::merle1();
+ sdotest::loadOpenNS();
+
+ sdotest::saveOpen();
+ sdotest::loadOpen();
+ sdotest::testui();
+ sdotest::testOpen();
+ sdotest::testSCA();
+ sdotest::testabstract();
+
+ sdotest::testsubsload();
+ sdotest::testsubs();
+ sdotest::bug45933();
+ sdotest::setnull();
+ sdotest::bug2();
+ sdotest::cssave2();
+ sdotest::csload2();
+ sdotest::cssave();
+ sdotest::csload();
+ sdotest::eqhelpertest();
+ sdotest::cohelpertest();
+ sdotest::datetest();
+ sdotest::carotest3();
+ sdotest::matttest1();
+ sdotest::adddeletetest();
+ sdotest::carotest2();
+ sdotest::carotest();
+ sdotest::setmany();
+ sdotest::noncontest();
+ sdotest::versiontest();
+ sdotest::defaulttest();
+ sdotest::nulltest();
+ sdotest::usertest();
+ sdotest::querytest();
+ sdotest::getproptest();
+ sdotest::rcptest();
+ sdotest::seqtest();
+ sdotest::changesummarytest();
+ sdotest::conversiontest();
+ sdotest::boolbug();
+ sdotest::scope1();
+ sdotest::scope2();
+ sdotest::scope3();
+ return sdotest::main(argc, argv);
+ /* All objects freed ? */
+return 0;
+}
+
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.h b/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.h
new file mode 100644
index 0000000000..6f1b63de1b
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest.h
@@ -0,0 +1,123 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:31 $ */
+
+#include "commonj/sdo/SDO.h"
+using namespace commonj::sdo;
+
+class sdotest {
+ public:
+
+
+ static void changeSummaryHeader(ChangeSummaryPtr cs);
+ static void changeSummaryFooter();
+ static void changeSummaryChange(int level, ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void changeSummaryDeletedObject(int indent, const char* name, ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void changeSummaryElements(int indent, ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void changeSummarySetting(Setting& s);
+ static bool changeSummaryAttributes(ChangeSummaryPtr cs, DataObjectPtr dol);
+
+ static void b47293();
+ static void propdefaulttest();
+ static void showdefault(const Type& tm);
+ static void graham5();
+ static void graham4();
+ static void leak();
+ static void twolists();
+ static void printset(ChangeSummaryPtr cs);
+ static void detachtest();
+ static void includetest();
+ static void testLoad();
+ static void b46633();
+ static void clonetest();
+ static void testUtil();
+ static void testErrors();
+ static void b46734();
+ static void b46693();
+ static void b46634();
+ static void b46613();
+ static void b46617();
+ static void b46617b();
+ static void doctest();
+ static void notfound();
+
+
+ static void serializeChangeSummary(ChangeSummaryPtr cs);
+ static void cssave();
+ static void csload();
+ static void cssave2();
+ static void csload2();
+ static void bug2();
+ static void setnull();
+ static void bug45933();
+ static void testsubsload();
+ static void testabstract();
+ static void testsubs();
+ static void testSCA();
+ static void testOpen();
+ static void saveOpen();
+ static void loadOpen();
+ static void testui();
+ static void merle1();
+ static void graham1();
+ static void graham2();
+ static void graham3();
+ static void loadManyOpen();
+ static void loadOpenNS();
+
+
+ static void eqhelpertest();
+ static void cohelpertest();
+ static void datetest();
+ static void matttest1();
+ static void adddeletetest();
+ static void carotest3();
+ static void carotest2();
+ static void carotest();
+ static void setmany();
+ static void noncontest();
+ static void versiontest();
+ static void defaulttest();
+ static void querytest();
+ static void getproptest();
+ static void nulltest();
+ static void usertest();
+ static void rcptest();
+ static void boolbug();
+ static void scope1();
+ static void scope2();
+ static void scope3();
+ static void conversiontest();
+ static void changesummarytest();
+ static void scenario1();
+ static void scenario2();
+ static void scenario3();
+ static void scenario4();
+ static void scenario5();
+ static void printseq(SequencePtr sptr);
+ static void seqtest();
+ static void printDataObject(DataObjectPtr dol);
+ static void printValue(DataObjectPtr dob, const Property& prop);
+ static void printList(DataObjectPtr dob, const Property& prop);
+ static void printOldValues(ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void dumpchangesummary(ChangeSummaryPtr cs);
+ static void dumpproperties(DataObjectPtr root);
+ static void testGetters(DataObjectPtr dor);
+ static void testGetter(DataObjectPtr dor, char* str);
+ static int main(int argc, char** argv);
+}; \ No newline at end of file
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp b/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp
new file mode 100644
index 0000000000..9f547af4eb
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp
@@ -0,0 +1,3937 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:31 $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+using namespace std;
+
+// #include "TypeImpl.h"
+
+#include "sdotest.h"
+
+
+
+using namespace commonj::sdo;
+
+void sdotest::eqhelpertest()
+{
+
+ // copy and equality helpers
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Assembly");
+ mdg->addType("myspace","SubAssembly");
+ mdg->addType("myspace","Part");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tassy = mdg->getType("myspace","Assembly");
+ const Type& tsubassy = mdg->getType("myspace","SubAssembly");
+ const Type& tpart = mdg->getType("myspace","Part");
+
+
+ mdg->addPropertyToType(tassy,"name",tstring);
+ mdg->addPropertyToType(tsubassy,"name",tstring);
+ mdg->addPropertyToType(tpart,"name",tstring);
+
+ mdg->addPropertyToType(tassy,"number",tint);
+ mdg->addPropertyToType(tsubassy,"number",tint);
+ mdg->addPropertyToType(tpart,"number",tint);
+
+ mdg->addPropertyToType(tassy,"subassemblies", tsubassy,true);
+ mdg->addPropertyToType(tsubassy,"parts", tpart,true);
+
+
+ // assy 1
+
+ DataObjectPtr assy1 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy1 = assy1->createDataObject("subassemblies");
+ DataObjectPtr subassy2 = assy1->createDataObject("subassemblies");
+
+ DataObjectPtr part1 = subassy1->createDataObject("parts");
+ DataObjectPtr part2 = subassy1->createDataObject("parts");
+ DataObjectPtr part3 = subassy1->createDataObject("parts");
+
+ DataObjectPtr part4 = subassy2->createDataObject("parts");
+ DataObjectPtr part5 = subassy2->createDataObject("parts");
+ DataObjectPtr part6 = subassy2->createDataObject("parts");
+
+
+ assy1->setCString("name","MicroFrame");
+ assy1->setInteger("number",32768);
+
+ subassy1->setCString("name","Legs");
+ subassy2->setCString("name","Body");
+ subassy1->setInteger("number",1);
+ subassy2->setInteger("number",2);
+
+ part1->setCString("name","Leg1");
+ part2->setCString("name","Leg2");
+ part3->setCString("name","Leg3");
+ part1->setInteger("number",10001);
+ part2->setInteger("number",10002);
+ part3->setInteger("number",10003);
+
+
+ part4->setCString("name","MainStrut");
+ part5->setCString("name","Brace1");
+ part6->setCString("name","Brace2");
+ part4->setInteger("number",20001);
+ part5->setInteger("number",20002);
+ part6->setInteger("number",20003);
+
+ // assy2 - shallow equal to assy, but not deep equal
+
+ DataObjectPtr assy2 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy3 = assy2->createDataObject("subassemblies");
+ DataObjectPtr subassy4 = assy2->createDataObject("subassemblies");
+
+ DataObjectPtr part7 = subassy3->createDataObject("parts");
+ DataObjectPtr part8 = subassy3->createDataObject("parts");
+ DataObjectPtr part9 = subassy3->createDataObject("parts");
+
+ DataObjectPtr part10 = subassy4->createDataObject("parts");
+ DataObjectPtr part11 = subassy4->createDataObject("parts");
+ DataObjectPtr part12 = subassy4->createDataObject("parts");
+
+
+ assy2->setCString("name","MicroFrame");
+ assy2->setInteger("number",32768);
+
+ subassy3->setCString("name","Legs");
+ subassy4->setCString("name","Body");
+ subassy3->setInteger("number",1);
+ subassy4->setInteger("number",2);
+
+ part7->setCString("name","Leg1");
+ part8->setCString("name","Leg2");
+ part9->setCString("name","Leg3");
+ part7->setInteger("number",10001);
+ part8->setInteger("number",10002);
+ part9->setInteger("number",10003);
+
+
+ part10->setCString("name","MainStrut");
+ part11->setCString("name","Brace1");
+ part12->setCString("name","OddBrace2");
+ part10->setInteger("number",20001);
+ part11->setInteger("number",20002);
+ part12->setInteger("number",20003);
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at first test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 1 passed" << endl;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at second test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 2 passed" << endl;
+ }
+
+ // Now alter assy2 to be deep equal...
+
+
+ part12->setCString("name","Brace2");
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at third test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 3 passed" << endl;
+ }
+ if (!EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at fourth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 4 passed" << endl;
+ }
+
+ // now add a part, so its not deep equal again
+ DataObjectPtr part13 = subassy4->createDataObject("parts");
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at fifth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 5 passed" << endl;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at sixth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 6 passed" << endl;
+ }
+
+ // now remove that part again...
+ DataObjectList& dl = subassy4->getList("parts");
+ dl.remove(3);
+
+ // should be deep equal again...
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at seventh test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 7 passed" << endl;
+ }
+ if (!EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at eighth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 8 passed" << endl;
+ }
+ // now make them not shallow equal
+ assy2->setInteger("number",32767);
+
+ if (EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at nineth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 9 passed" << endl;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at tenth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 10 passed" << endl;
+ }
+
+}
+
+void sdotest::cohelpertest()
+{
+
+ // copy and equality helpers
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Assembly");
+ mdg->addType("myspace","SubAssembly");
+ mdg->addType("myspace","Part");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tassy = mdg->getType("myspace","Assembly");
+ const Type& tsubassy = mdg->getType("myspace","SubAssembly");
+ const Type& tpart = mdg->getType("myspace","Part");
+
+
+ mdg->addPropertyToType(tassy,"name",tstring);
+ mdg->addPropertyToType(tsubassy,"name",tstring);
+ mdg->addPropertyToType(tpart,"name",tstring);
+
+ mdg->addPropertyToType(tassy,"number",tint);
+ mdg->addPropertyToType(tsubassy,"number",tint);
+ mdg->addPropertyToType(tpart,"number",tint);
+
+ mdg->addPropertyToType(tassy,"subassemblies", tsubassy,true);
+ mdg->addPropertyToType(tsubassy,"parts", tpart,true);
+
+
+ // assy 1
+
+ DataObjectPtr assy1 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy1 = assy1->createDataObject("subassemblies");
+ DataObjectPtr subassy2 = assy1->createDataObject("subassemblies");
+
+ DataObjectPtr part1 = subassy1->createDataObject("parts");
+ DataObjectPtr part2 = subassy1->createDataObject("parts");
+ DataObjectPtr part3 = subassy1->createDataObject("parts");
+
+ DataObjectPtr part4 = subassy2->createDataObject("parts");
+ DataObjectPtr part5 = subassy2->createDataObject("parts");
+ DataObjectPtr part6 = subassy2->createDataObject("parts");
+
+
+ assy1->setCString("name","MicroFrame");
+ assy1->setInteger("number",32768);
+
+ subassy1->setCString("name","Legs");
+ subassy2->setCString("name","Body");
+ subassy1->setInteger("number",1);
+ subassy2->setInteger("number",2);
+
+ part1->setCString("name","Leg1");
+ part2->setCString("name","Leg2");
+ part3->setCString("name","Leg3");
+ part1->setInteger("number",10001);
+ part2->setInteger("number",10002);
+ part3->setInteger("number",10003);
+
+
+ part4->setCString("name","MainStrut");
+ part5->setCString("name","Brace1");
+ part6->setCString("name","Brace2");
+ part4->setInteger("number",20001);
+ part5->setInteger("number",20002);
+ part6->setInteger("number",20003);
+
+ // first lets shallow copy assy1:
+
+ DataObjectPtr assy2 = CopyHelper::copyShallow(assy1);
+
+ if (strcmp(assy2->getCString("name"),"MicroFrame"))
+ {
+ cout << "COPYHELPER shallow copy failed(1)" << endl;
+ }
+ else if (assy2->getInteger("number") != 32768)
+ {
+ cout << "COPYHELPER shallow copy 1 failed(2)" << endl;
+ }
+ else if (assy2->getList("subassemblies").size() != 0)
+ {
+ cout << "COPYHELPER shallow copy 1 failed(3)" << endl;
+ }
+ else if (assy2->getContainer() != 0)
+ {
+ cout << "COPYHELPER shallow copy failed(4)" << endl;
+ }
+ else
+ {
+ cout << "CopyHelper test1 passed" << endl;
+ }
+
+ // now deep copy it
+
+ DataObjectPtr assy3 = CopyHelper::copy(assy1);
+
+ if (!EqualityHelper::equal(assy1, assy3))
+ {
+ cout << "COPYHELPER deep copy failed(1)" << endl;
+ }
+ else if (assy3->getContainer() != 0)
+ {
+ cout << "COPYHELPER deep copy failed(2)" << endl;
+ }
+ else
+ {
+ cout << "CopyHelper test 2 passed" << endl;
+ }
+
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+///test code for serialization...........
+/////////////////////////////////////////////////////////////////////////////
+//
+//bool sdotest::serializeOldSingleValues(int indent, ChangeSummaryPtr cs, DataObjectPtr dol)
+//{
+// bool onlySingle = true;
+// SettingList& sl = cs->getOldValues(dol);
+// if (sl.size() == 0)
+// {
+// return onlySingle;
+// }
+//
+// for (int k=0;k<indent;k++)cout << " ";
+//
+// for (int j=0;j< sl.size(); j++)
+// {
+// if (sl[j].getProperty().isMany())
+// {
+// onlySingle = false;
+// continue;
+// }
+//
+// cout << " " << sl[j].getProperty().getName() << "=";
+//
+// switch (sl[j].getProperty().getTypeEnum())
+// {
+// case Type::BooleanType:
+// cout << "\"" << sl[j].getBooleanValue() << "\"";
+// break;
+// case Type::ByteType:
+// cout << "\"" << sl[j].getByteValue() << "\"";
+// break;
+// case Type::CharacterType:
+// cout << "\"" << sl[j].getCharacterValue() << "\"";
+// break;
+// case Type::IntegerType:
+// cout << "\"" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::ShortType:
+// cout << "\"" << sl[j].getShortValue() << "\"";
+// break;
+// case Type::DoubleType:
+// cout << "\"" << sl[j].getDoubleValue() << "\"";
+// break;
+// case Type::FloatType:
+// cout << "\"" << sl[j].getFloatValue() << "\"";
+// break;
+// case Type::LongType:
+// cout << "\"!" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::DateType:
+// cout << "\"" << sl[j].getDateValue().ascTime() << "\"";
+// break;
+// case Type::BigDecimalType:
+// case Type::BigIntegerType:
+// case Type::StringType:
+// case Type::UriType:
+// cout << "\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::BytesType:
+// cout << "\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::OtherTypes:
+// case Type::DataObjectType:
+// case Type::ChangeSummaryType:
+// {
+// DataObjectPtr dob = sl[j].getDataObjectValue();
+// if (!dob)
+// {
+// cout << "";
+// }
+// else
+// {
+// if (cs->isDeleted(dob))
+// {
+// cout << "\"" << cs->getOldXpath(dob) << "\"";
+// }
+// else
+// {
+// cout << "\"" << dob->objectToXPath() << "\"";
+// }
+// }
+// }
+// break;
+// default:
+// {
+// }
+// break;
+// }
+// }
+// return onlySingle;
+//}
+//
+//
+//
+//
+//void sdotest::serializeOldManyValues(int indent, ChangeSummaryPtr cs, DataObjectPtr dol)
+//{
+// SettingList& sl = cs->getOldValues(dol);
+// if (sl.size() == 0)
+// {
+// return;
+// }
+// for (int j=0;j< sl.size(); j++)
+// {
+// if (!sl[j].getProperty().isMany()) continue;
+//
+// for (int k=0;k<indent;k++)cout << " ";
+//
+// cout << "<" ;
+// cout << sl[j].getProperty().getName() << " ";
+//
+// switch (sl[j].getProperty().getTypeEnum())
+// {
+// case Type::BooleanType:
+// cout << " value=\"" << sl[j].getBooleanValue() << "\"";
+// break;
+// case Type::ByteType:
+// cout << " value=\"" << sl[j].getByteValue() << "\"";
+// break;
+// case Type::CharacterType:
+// cout << " value=\"" << sl[j].getCharacterValue() << "\"";
+// break;
+// case Type::IntegerType:
+// cout << " value=\"" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::ShortType:
+// cout << " value=\"" << sl[j].getShortValue() << "\"";
+// break;
+// case Type::DoubleType:
+// cout << " value=\"" << sl[j].getDoubleValue() << "\"";
+// break;
+// case Type::FloatType:
+// cout << " value=\"" << sl[j].getFloatValue() << "\"";
+// break;
+// case Type::LongType:
+// cout << " value=\"" << "!" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::DateType:
+// cout << " value=\"" << sl[j].getDateValue().getTime() << "\"";
+// break;
+// case Type::BigDecimalType:
+// case Type::BigIntegerType:
+// case Type::StringType:
+// case Type::UriType:
+// cout << " value=\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::BytesType:
+// cout << " value=\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::OtherTypes:
+// case Type::DataObjectType:
+// case Type::ChangeSummaryType:
+// {
+// DataObjectPtr dob = sl[j].getDataObjectValue();
+// if (!dob)
+// {
+// // what to do?;
+// }
+// else
+// {
+// if (cs->isDeleted(dob))
+// {
+// // TODO
+// cout << " sdo:ref=\"" << "deleted" << "\"";
+// }
+// else
+// {
+// cout << " sdo:ref=\"" << dob->objectToXPath() << "\"";
+// }
+// }
+// }
+// break;
+// default:
+// {
+// }
+// break;
+// } // switch
+// cout << "/>" << endl;
+// } // for
+//}
+//
+//
+//
+//void sdotest::serializechangesummary(ChangeSummaryPtr cs)
+//{
+// changeSummaryHeader(cs);
+//
+// ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+//
+// for (i=0;i< cdol.size();i++)
+// {
+// if (cs->isModified(cdol[i]))
+// {
+// changeSummaryChange(cs,cdol[i]);
+// }
+// }
+//
+// changeSummaryFooter();
+//
+//}
+//
+///////////////////////////////////////////////////////////////////////////////
+/////end code for serialization...........
+///////////////////////////////////////////////////////////////////////////////
+//
+//
+
+
+bool sdotest::changeSummaryAttributes(ChangeSummaryPtr cs, DataObjectPtr dol)
+{
+ bool onlySingle = true;
+ SettingList& sl = cs->getOldValues(dol);
+ if (sl.size() == 0)
+ {
+ return onlySingle;
+ }
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ if (sl[j].getProperty().isMany())
+ {
+ onlySingle = false;
+ continue;
+ }
+
+ cout << " " << sl[j].getProperty().getName() << "=\"";
+
+ if (sl[j].getProperty().getType().isDataType())
+ {
+ changeSummarySetting(sl[j]);
+ }
+ else
+ {
+ DataObjectPtr dob = sl[j].getDataObjectValue();
+ if (dob)
+ {
+ if (cs->isDeleted(dob))
+ {
+ cout << cs->getOldXpath(dob);
+ }
+ else
+ {
+ cout << dob->objectToXPath();
+ }
+ }
+ }
+ cout << "\" ";
+ }
+ return onlySingle;
+}
+
+
+void sdotest::changeSummarySetting(Setting& s)
+{
+
+ switch (s.getProperty().getTypeEnum())
+ {
+ case Type::BooleanType:
+ cout << s.getCStringValue();
+ break;
+ case Type::ByteType:
+ cout << s.getByteValue();
+ break;
+ case Type::CharacterType:
+ cout << s.getCharacterValue();
+ break;
+ case Type::IntegerType:
+ cout << s.getIntegerValue();
+ break;
+ case Type::ShortType:
+ cout << s.getShortValue();
+ break;
+ case Type::DoubleType:
+ cout << s.getDoubleValue();
+ break;
+ case Type::FloatType:
+ cout << s.getFloatValue();
+ break;
+ case Type::LongType:
+ cout << s.getIntegerValue();
+ break;
+ case Type::DateType:
+ cout << s.getDateValue().getTime();
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ cout << s.getCStringValue();
+ break;
+ case Type::BytesType:
+ cout << s.getCStringValue();
+ break;
+ default:
+ break;
+ } // switch
+}
+
+
+void sdotest::changeSummaryElements(int indent, ChangeSummaryPtr cs, DataObjectPtr dob)
+{
+ SettingList& sl = cs->getOldValues(dob);
+
+ if (sl.size() == 0)
+ {
+ // there are no setting for this element.
+ return;
+ }
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ // single values will have been covered by the attributes.
+ if (!sl[j].getProperty().isMany()) continue;
+
+ if (sl[j].getProperty().getType().isDataType())
+ {
+
+ // indent the line
+ for (int k=0;k<indent;k++)cout << " ";
+
+ cout << "<" << sl[j].getProperty().getName() << ">\"";
+
+ changeSummarySetting(sl[j]);
+
+ cout << "\"</" << sl[j].getProperty().getName() << ">" << endl;
+ } // if datatype
+ else
+ {
+ DataObjectPtr dob2 = sl[j].getDataObjectValue();
+ if (!dob2)
+ {
+ return;
+ }
+ if (cs->isDeleted(dob2))
+ {
+ changeSummaryDeletedObject(indent,sl[j].getProperty().getName(), cs,dob2);
+ }
+ else
+ {
+ // indent the line
+ for (int k=0;k<indent;k++)cout << " ";
+ cout << "<" << sl[j].getProperty().getName();
+ cout << " sdo:ref=\"" << dob2->objectToXPath() << "\"/>" << endl;
+ }
+ }
+ } // for
+}
+
+
+
+void sdotest::changeSummaryDeletedObject(int indent, const char* name, ChangeSummaryPtr cs, DataObjectPtr dob)
+{
+
+ bool elements = false; // are there any elements to process?
+ int ind;
+
+ // indent the line
+ for (ind=0;ind<indent;ind++)cout << " ";
+
+ cout << "<" << name;
+
+ SettingList& sl = cs->getOldValues(dob);
+
+ if (sl.size() == 0)
+ {
+ // there are no setting for this element.
+ cout << "/>";
+ return;
+ }
+
+ cout << " ";
+
+ // print single valued datatypes as attributes
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ // single values will have been covered by the attributes.
+ if ( sl[j].getProperty().isMany())
+ {
+ elements = true;
+ continue;
+ }
+ if (!sl[j].getProperty().getType().isDataType())
+ {
+ elements = true;
+ continue;
+ }
+
+ cout << sl[j].getProperty().getName() << "=\"";
+
+ changeSummarySetting(sl[j]);
+
+ cout << "\" ";
+ } // for attributes
+
+ if (!elements)
+ {
+ cout << "/>" << endl;
+ return;
+ }
+
+ // now we are onto the many-values, and dataobject single values.
+ for (int k=0;k< sl.size(); k++)
+ {
+ if ( !sl[k].getProperty().getType().isDataType())
+ {
+ // its a dataobject type
+ DataObjectPtr dob2 = sl[k].getDataObjectValue();
+ if (!dob2) continue;
+ if (!cs->isDeleted(dob2)) continue;
+ changeSummaryDeletedObject(indent+1,sl[k].getProperty().getName(),cs,dob2);
+ }
+ else
+ {
+ // could only be many valued data type
+
+ for (ind=0;ind<indent;ind++)cout << " ";
+ cout << "<" << sl[k].getProperty().getName() << ">\"";
+
+ changeSummarySetting(sl[k]);
+
+ cout << "</" << sl[k].getProperty().getName() << ">" << endl;
+ }
+ } // for attributes
+
+ // indent the line
+ for (ind=0;ind<indent;ind++)cout << " ";
+ cout << "</" << name << ">" << endl;
+}
+
+
+
+void sdotest::changeSummaryHeader(ChangeSummaryPtr cs)
+{
+ int i;
+
+ ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+
+ cout << "<changeSummary ";
+
+ if (cs->isLogging())
+ {
+ cout << " logging=\"true\" ";
+ }
+
+ cout << ">" << endl;
+
+
+ for (i=0;i< cdol.size();i++)
+ {
+ if (cs->isCreated(cdol[i]) && cdol.getType(i) == ChangedDataObjectList::Change)
+ {
+ cout << " <create>";
+ // TODO is there an IDREF for this created/deleted object?
+ DataObject* temp = cdol[i];
+ cout << ((DataObject*)temp)->objectToXPath();
+ cout << "</create>" << endl;
+ }
+ if (cs->isDeleted(cdol[i]) && cdol.getType(i) == ChangedDataObjectList::Delete)
+ {
+ cout << " <delete>";
+ // TODO is there an IDREF for this created/deleted object?
+ const char* path = cs->getOldXpath(cdol[i]);
+ if (path != 0)
+ {
+ cout << path;
+ }
+ cout << "</delete>" << endl;
+ }
+ }
+}
+
+void sdotest::changeSummaryFooter()
+{
+ cout << "</changeSummary>" << endl;
+}
+
+
+void sdotest::changeSummaryChange(int level, ChangeSummaryPtr cs, DataObjectPtr dob)
+{
+ DataObject* temp = dob;
+
+ // indent by level.
+ for (int l=0;l<level;l++)cout << " ";
+
+ cout << "<";
+
+ try
+ {
+ cout << temp->getContainmentProperty().getName();
+ }
+ catch (SDORuntimeException e)
+ {
+ // the object which was changed has no name,
+ // so its the root object of a data object tree.
+ cout << "root";
+ }
+
+ cout << " ";
+
+ try
+ {
+ cout << "sdo:ref=\"" << temp->objectToXPath() << "\" ";
+ }
+ catch (SDORuntimeException e)
+ {
+ // TODO there was no xpath - thats not good
+ }
+
+ // returns true if there were only single values - attributes only.
+ if (changeSummaryAttributes(cs, temp))
+ {
+ cout << "/>" << endl;
+ return;
+ }
+
+ // there are some elements
+ cout << ">" << endl;
+
+
+ changeSummaryElements(level+1, cs, temp);
+
+
+ // indent by level.
+
+ for (int m=0;m<level;m++)cout << " ";
+ cout << "</";
+
+ try
+ {
+ cout << temp->getContainmentProperty().getName();
+ }
+ catch (SDORuntimeException e)
+ {
+ // the object which was changed has no name,
+ // so its the root object of a data object tree.
+ cout << "root";
+ }
+
+ cout << ">" << endl;
+
+}
+
+
+
+void sdotest::serializeChangeSummary(ChangeSummaryPtr cs)
+{
+ changeSummaryHeader(cs);
+
+ ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+
+ for (int i=0;i< cdol.size();i++)
+ {
+ if (cs->isModified(cdol[i]))
+ {
+ changeSummaryChange(1, cs,cdol[i]);
+ }
+ }
+
+ changeSummaryFooter();
+}
+
+
+void sdotest::cssave()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ //mdg->addType("companyNS","CompanyType");
+ //mdg->addType("companyNS","EmployeeType");
+ //mdg->addType("companyNS","DepartmentType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ //mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ //mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ //mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ //mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ //mdg->addPropertyToType(tdept,"name",tstring);
+ //mdg->addPropertyToType(tdept,"location",tstring);
+ //mdg->addPropertyToType(tdept,"number",tstring);
+ //mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ //mdg->addPropertyToType(temp, "name",tstring);
+ //mdg->addPropertyToType(temp, "SN", tstring);
+ //mdg->addPropertyToType(temp, "manager", tbool);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","John Jones");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Mary Smith");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Jane Doe");
+ emp3->setCString("SN","E0003");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr emp4 = mdg->create(temp);
+ emp4->setCString("name","Al Smith");
+ emp4->setCString("SN","E0004");
+ emp4->setBoolean("manager",true);
+
+ // first change - create employee 4
+ dol2.append(emp4);
+
+ dol2.remove(1); // element 1 is Mary
+
+ DataObjectPtr emp5 = mdg->create(temp);
+ emp5->setCString("name","Bill Withers");
+ emp5->setCString("SN","E0005");
+
+ dol2.append(emp5);
+
+
+ comp->setCString("name","MegaCorp");
+ comp->setDataObject("employeeOfTheMonth",emp4);
+
+ // silly test - add mary back again
+ dol2.append(emp2);
+
+ // and why not delete her again?
+ //dol2.remove(4);
+
+
+
+ cs->endLogging();
+
+ //serializeChangeSummary(cs);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"cssave-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "CSSAVE FAILED" << e << endl;
+ }
+}
+
+void sdotest::cssave2()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Eastleigh Borough Council");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Waste Disposal");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+ DataObjectPtr emp4 = mdg->create(temp);
+ DataObjectPtr emp5 = mdg->create(temp);
+
+ emp1->setCString("name","Alphonse Dodet");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Bridget Jones");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Colin Thorne");
+ emp3->setCString("SN","E0003");
+
+ emp4->setCString("name","Donald Trump");
+ emp4->setCString("SN","E0004");
+
+ emp5->setCString("name","Eddy the eagle");
+ emp5->setCString("SN","E0005");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+ dol2.append(emp4);
+ dol2.append(emp5);
+
+ //comp->setDataObject("employeeOfTheMonth",emp2);
+
+ DataObjectPtr dept2 = mdg->create((Type&)tdept);
+ dol.append(dept2);
+
+ dept2->setCString("name","Tax Collection");
+ dept2->setCString("location","Winchester");
+ dept2->setCString("number","666");
+
+ DataObjectPtr empb1 = mdg->create(temp);
+ DataObjectPtr empb2 = mdg->create(temp);
+ DataObjectPtr empb3 = mdg->create(temp);
+ DataObjectPtr empb4 = mdg->create(temp);
+ DataObjectPtr empb5 = mdg->create(temp);
+
+ empb1->setCString("name","Arch Meanie");
+ empb1->setCString("SN","D0001");
+
+ empb2->setCString("name","Boris the Spider");
+ empb2->setCString("SN","D0002");
+ empb2->setBoolean("manager",true);
+
+ empb3->setCString("name","Cash Hoarder");
+ empb3->setCString("SN","D0003");
+
+ empb4->setCString("name","Dean Giyatoss");
+ empb4->setCString("SN","D0004");
+
+ empb5->setCString("name","Ebenezer Scrooge");
+ empb5->setCString("SN","D0005");
+
+ DataObjectList& dol3 = dept2->getList("employees");
+ dol3.append(empb1);
+ dol3.append(empb2);
+ dol3.append(empb3);
+ dol3.append(empb4);
+ dol3.append(empb5);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ // start by deleting a few employees from dept 1
+
+ dol2.remove(1); // B
+ dol2.remove(1); // C
+ dol2.remove(1); // D
+
+ // Now delete the tax collectors as a whole
+
+ dol.remove(1);
+
+ // now perhaps add back one of the employees
+
+ dol2.append(emp3); // C
+
+ comp->setCString("name","MegaCorp");
+
+ try {
+ comp->setDataObject("employeeOfTheMonth",emp4);
+ cout << "THIS ISNT RIGHT - emp4 was nolt in the tree" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ comp->setDataObject("employeeOfTheMonth",emp5);
+
+ cs->endLogging();
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"cssave2-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "CSSAVE FAILED" << e << endl;
+ }
+}
+
+void sdotest::bug45933()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","WombatType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& twom = mdg->getType("companyNS","WombatType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"bools",tbool, true);
+ mdg->addPropertyToType(tcomp,"woms",twom, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Bug45933");
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectList& dol = comp->getList("bools");
+ dol.append(false);
+ dol.remove(0);
+ DataObjectPtr awom = mdg->create((Type&)twom);
+ DataObjectList& dol2 = comp->getList("woms");
+ dol2.append(awom);
+ dol2.remove(0);
+
+ cs->endLogging();
+
+ dumpchangesummary(cs);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"bug45933-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "BUG45933 FAILED" << endl << e << endl;
+ }
+}
+
+void sdotest::b46617()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ //XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ //xsh->defineFile("b46617.xsd");
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","DepartmentType");
+ mdg->addType("companyNS","EmployeeType");
+
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"departments",tdept,true,false,true);
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp,false,false,false);
+ mdg->addPropertyToType(tcomp,"CEO",temp,false,false,true);
+
+ mdg->addPropertyToType(tdept,"employees",temp,true,false,true);
+ mdg->addPropertyToType(tdept,"name",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"location",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"number",tstring,false,false,true);
+
+ mdg->addPropertyToType(temp,"name",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"SN",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"manager",tbool,false,false,true);
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Eastleigh Borough Council");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Waste Disposal");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","Alphonse Dodet");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Bridget Jones");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl Marx");
+ emp3->setCString("SN","E0003");
+
+ comp->setDataObject("CEO",emp2);
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ //dol2.append(emp2);
+ dol2.append(emp3);
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ XSDHelperPtr xmd = HelperProvider::getXSDHelper(mdg);
+ xmd->generateFile(mdg->getTypes(),
+ "b46617.xsd","companyNS");
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"b46617.xml");
+
+ // now try loading the xml, using the same schema, and see if we get the
+ // same answer
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46617.xml", "companyNS");
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+ cout << "EOMS name is "
+ << newdob->getDataObject("employeeOfTheMonth")->getCString("name")
+ << endl;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46617 failed" << e << endl;
+ }
+}
+
+void sdotest::b46617b()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("b46617b.xsd");
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46617b.xml", "companyNS");
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+ cout << "EOMS name is "
+ << newdob->getDataObject("employeeOfTheMonth")->getCString("name")
+ << endl;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46617b failed" << e << endl;
+ }
+}
+
+void sdotest::notfound()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ try {
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("not_present.xsd");
+ }
+ catch (SDOFileNotFoundException e)
+ {
+ cout << "NotFound threw correct exception " << endl;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << "NOTFOUND THREW THE WRONG EXCEPTION" << e << endl;
+ }
+
+ try {
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("not-present.xml", "companyNS");
+
+ }
+ catch (SDOFileNotFoundException ee)
+ {
+ cout << "NotFound threw the correct exception" << endl;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << "NOTFOUND THREW THE WRONG EXCEPTION" << e << endl;
+ }
+}
+
+void sdotest::csload()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+
+ TypeList tl = mdg->getTypes();
+ for (int i=0;i< tl.size(); i++)
+ {
+ cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ }
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("cssave-output.xml", "companyNS");
+ //myXMLDocument->setRootElementName("company");
+ //myXMLHelper->save(myXMLDocument,"csload-output.xml");
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "csload-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "CSLOAD FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::testsubsload()
+{
+ cout << "TEST: TestSubsLoad ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companysubs.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANYSUBS XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ // so now we should be able to put book or a magazine into
+ // the publication under company...
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+ // inherted from publication
+ book1->setCString("title","Nowhere Man");
+
+ DataObjectPtr mag1 = mdg->create(mag);
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+
+
+ // publication should accept any of them...
+
+ comp->setDataObject("Publication",pub1);
+ const Type& tpub1 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub1.getName() << endl;
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub2.getName() << endl;
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub3.getName() << endl;
+
+ // should be able to address publication as book or magazine
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ cout << "Book is of type " << tpub4.getName() << endl;
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ cout << "Magazine is of type " << tpub5.getName() << endl;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in TeseSubsLoad" << e << endl;
+ }
+ cout << "END TEST: TestSubsLoad ======================================" << endl;
+}
+
+void sdotest::testSCA()
+{
+ cout << "TEST: TestSCA ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("sca.xsd");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in TeseSCA" << e << endl;
+ }
+ cout << "END TEST: TestSCA ======================================" << endl;
+}
+
+void sdotest::testabstract()
+{
+ cout << "TEST: TestAbstract ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companyabs.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANYABS XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ // so now we should be able to put book or a magazine into
+ // the publication under company...
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+ // should be allowed...
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+ // inherted from publication
+ book1->setCString("title","Nowhere Man");
+
+ DataObjectPtr mag1 = mdg->create(mag);
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+ try {
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+ }
+ catch (SDOUnsupportedOperationException e)
+ {
+ cout << "Normal unsupportedoperation for creation of abstract type" << endl;
+ }
+
+
+ // publication should accept books and magazines...
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub2.getName() << endl;
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub3.getName() << endl;
+
+ // should be able to address publication as book or magazine
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ cout << "Book is of type " << tpub4.getName() << endl;
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ cout << "Magazine is of type " << tpub5.getName() << endl;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in TestAbstract" << e << endl;
+ }
+ cout << "END TEST: TestAbstract ======================================" << endl;
+}
+
+void sdotest::testOpen()
+{
+ cout << "TEST: TestOpen ==========================================" << endl;
+ //try
+ //{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ // now we should be able to add extra properties to employees,
+ // and get them back again...
+
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ cout << "Open Type string value: " << c << endl;
+
+ bool b = emp1->getBoolean("openboolean");
+
+ cout << "Open Type boolean value: " << b << endl;
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("opentypelist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive
+
+ // we should now have instance properties
+ PropertyList pl = emp1->getType().getProperties();
+
+ for (i=0;i<pl.size();i++)
+ {
+ cout << "EMP1 type property: " << pl[i].getName() << "( many? " <<
+ pl[i].isMany() << ")" << " of type " <<
+ pl[i].getType().getName() << endl;
+ }
+
+ PropertyList pli = emp1->getInstanceProperties();
+
+ for (i=0;i<pli.size();i++)
+ {
+ cout << "EMP1 inst property: " << pli[i].getName() << "( many? " <<
+ pli[i].isMany() << ")" << " of type " <<
+ pli[i].getType().getName() << endl;
+ }
+
+ // now unset them and see them disappear - what happens to the indices?
+
+ emp1->unset("openstring");
+
+ PropertyList plk = emp1->getInstanceProperties();
+
+ for (i=0;i<plk.size();i++)
+ {
+ cout << "EMP1 inst property: " << plk[i].getName() << "( many? " <<
+ plk[i].isMany() << ")" << " of type " <<
+ plk[i].getType().getName() << endl;
+ }
+
+ emp1->unset("openboolean");
+
+ dl.remove(0); // so is this list gone, or empty - I vote for still there.
+
+ PropertyList pll = emp1->getInstanceProperties();
+ for (i=0;i<pll.size();i++)
+ {
+ cout << "EMP1 inst property: " << pll[i].getName() << "( many? " <<
+ pll[i].isMany() << ")" << " of type " <<
+ pll[i].getType().getName() << endl;
+ }
+
+ emp1->unset("opentypelist");
+
+ // now I vote for gone...
+
+ PropertyList plm = emp1->getInstanceProperties();
+ for (i=0;i<plm.size();i++)
+ {
+ cout << "EMP1 inst property: " << plm[i].getName() << "( many? " <<
+ plm[i].isMany() << ")" << " of type " <<
+ plm[i].getType().getName() << endl;
+ }
+
+ //}
+ //catch (SDORuntimeException e)
+ //{
+ // cout << "ERROR in TestOpen" << e << endl;
+ //}
+ cout << "END TEST: TestOpen ======================================" << endl;
+}
+
+void sdotest::saveOpen()
+{
+ cout << "TEST: SaveOpen ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ mdg->addType("companyNS","OpenType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+ const Type& topen = mdg->getType("companyNS","OpenType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+ mdg->setAlias("companyNS","CompanyType","TheFirm");
+ mdg->setAlias("companyNS","CompanyType","departments","TheDepartments");
+ mdg->setAlias("companyNS","CompanyType","departments","MYDepartments");
+ mdg->setAlias("companyNS","CompanyType","TheBigFirm");
+
+ mdg->addPropertyToType(topen,"name",tstring);
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectList& emps = dept->getList("employees");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emps.append(emp1);
+ emps.append(emp2);
+ emps.append(emp3);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ // now we should be able to add extra properties to employees,
+ // and get them back again...
+
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ cout << "Open Type string value: " << c << endl;
+
+ bool b = emp1->getBoolean("openboolean");
+
+ cout << "Open Type boolean value: " << b << endl;
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("openintlist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive and short!!
+
+ // unknown list type at present..
+ DataObjectList& dl2 = emp1->getList("opendataobjectlist");
+
+ DataObjectPtr myopen = mdg->create("companyNS","OpenType");
+ myopen->setCString("name","MyOpenName");
+ dl2.append(myopen); // now the list must be of data objects
+
+
+ // now a single valued data object - should have an xsi:type
+ emp1->setDataObject("opendataobject", myopen);
+
+
+ cs->endLogging();
+
+ dumpchangesummary(cs);
+
+ XSDHelperPtr xdh = HelperProvider::getXSDHelper(mdg);
+
+ xdh->generateFile(mdg->getTypes(),
+ "saveopen-output.xsd","companyNS");
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"saveopen-output.xml");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in SaveOpen" << e << endl;
+ }
+ cout << "END TEST: SaveOpen ======================================" << endl;
+}
+
+void sdotest::loadOpen()
+{
+ cout << "TEST: LoadOpen ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("saveopen-output.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("partial.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+ if (strcmp(emp->getProperty("openboolean").getType().getName(),
+ "Boolean"))
+ {
+ cout << "OpenLoad failure - bool property not boolean" << endl;
+
+ }
+ if (emp->getBoolean("openboolean") != true)
+ {
+ cout << "OpenLoad failure - bool property not true" << endl;
+ }
+
+ if (strcmp(emp->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoad failure - bytes property not bytes" << endl;
+
+ }
+ if (strcmp(emp->getCString("openstring"),"Value Of Open String"))
+ {
+ cout << "OpenLoad failure - string value is" <<
+ emp->getCString("openstring") << endl;
+ }
+
+
+ DataObjectList& dl3 = emp->getList("openintlist");
+
+ if (strcmp(emp->getProperty("openintlist").getType().getName(),
+ "Short"))
+ {
+ cout << "OpenLoad failure - IntegerList not Short " <<
+ emp->getProperty("openintlist").getType().getName() << endl;
+ }
+
+ if (dl3.getInteger(0) != 45)
+ {
+ cout << "OpenLoad failure - Integer value is" <<
+ dl.getInteger(0) << endl;
+ }
+
+ if (strcmp(emp->getProperty("opendataobjectlist").getType().getName(),
+ "OpenType"))
+ {
+ cout << "OpenLoad failure - OpenTypeList not OpenType" << endl;
+ }
+
+ DataObjectList& dl4 = emp->getList("opendataobjectlist");
+
+ if (strcmp(dl4[0]->getCString("name"),"MyOpenName"))
+ {
+ cout << "OpenLoad failure - list element name is " <<
+ dl4[0]->getCString("name") << endl;
+ }
+
+ if (strcmp(emp->getProperty("opendataobject").getType().getName(),
+ "OpenType"))
+ {
+ cout << "OpenLoad failure - OpenType not OpenType" << endl;
+ }
+
+ DataObjectPtr dob2 = emp->getDataObject("opendataobject");
+
+ if (strcmp(dob2->getCString("name"),"MyOpenName"))
+ {
+ cout << "OpenLoad failure - open value name is " <<
+ dob2->getCString("name") << endl;
+ }
+
+
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "loadload-output.xml");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "LoadOpen FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::loadOpenNS()
+{
+ cout << "TEST: LoadOpenNS ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("openloadNS.xsd");
+ xsh->defineFile("openloadNS2.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("openloadNS.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+ if (strcmp(emp->getProperty("openboolean").getType().getName(),
+ "Boolean"))
+ {
+ cout << "OpenLoadNS failure - bool property not boolean" << endl;
+
+ }
+ if (emp->getBoolean("openboolean") != true)
+ {
+ cout << "OpenLoadNS failure - bool property not true" << endl;
+ }
+
+ if (strcmp(emp->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS failure - bytes property not bytes" << endl;
+
+ }
+ if (strcmp(emp->getCString("openstring"),"Value Of Open String"))
+ {
+ cout << "OpenLoadNS failure - string value is" <<
+ emp->getCString("openstring") << endl;
+ }
+
+
+ DataObjectList& dl3 = emp->getList("openintlist");
+
+ if (strcmp(emp->getProperty("openintlist").getType().getName(),
+ "Short"))
+ {
+ cout << "OpenLoadNS failure - IntegerList not Short " <<
+ emp->getProperty("openintlist").getType().getName() << endl;
+ }
+
+ if (dl3.getInteger(0) != 45)
+ {
+ cout << "OpenLoadNS failure - Integer value is" <<
+ dl.getInteger(0) << endl;
+ }
+
+
+
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "openloadNSout.xml");
+
+
+ // now try exactly the same, but with NS which doesnt exist
+ XMLDocumentPtr myXMLDocument2 = myXMLHelper->loadFile("openloadNS2.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp2 = myXMLDocument2->getRootDataObject();
+ DataObjectList& dld = comp2->getList("departments");
+ DataObjectPtr dept2 = dld[0];
+ DataObjectList& dl22 = dept2->getList("employees");
+ DataObjectPtr emp2 = dl22[0];
+
+ if (strcmp(emp2->getProperty("openboolean").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS2 failure - bool property not bytes" << endl;
+
+ }
+ if (emp2->getBoolean("openboolean") != true)
+ {
+ cout << "OpenLoadNS2 failure - bool property not true" << endl;
+ }
+
+ if (strcmp(emp2->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS2 failure - bytes property not bytes" << endl;
+
+ }
+ if (strcmp(emp2->getCString("openstring"),"Value Of Open String"))
+ {
+ cout << "OpenLoadNS failure - string value is" <<
+ emp2->getCString("openstring") << endl;
+ }
+
+
+ DataObjectList& dl32 = emp2->getList("openintlist");
+
+ if (strcmp(emp2->getProperty("openintlist").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS2 failure - IntegerList not Bytes " <<
+ emp2->getProperty("openintlist").getType().getName() << endl;
+ }
+
+ if (dl32.getInteger(0) != 45)
+ {
+ cout << "OpenLoadNS2 failure - Integer value is" <<
+ dl32.getInteger(0) << endl;
+ }
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "LoadOpenNS FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::loadManyOpen()
+{
+ cout << "TEST: LoadManyOpen ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("many.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("many.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+
+ DataObjectList& dl3 = emp->getList("openlist");
+
+ if (strcmp(emp->getProperty("openlist").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenManyLoad failure - BytesList not Bytes " <<
+ emp->getProperty("openlist").getType().getName() << endl;
+ }
+
+ if (dl3.size() != 3)
+ {
+ cout << "OpenManyLoad failure - size is " <<
+ dl3.size() << endl;
+ }
+
+ for (int i=0;i< dl3.size();i++)
+ {
+ cout << "Value:" <<
+ dl3.getCString(i) << endl;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "LoadOpen FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::csload2()
+{
+ cout << "TEST: CSLoad2 ===============================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("cssave2-output.xml", "companyNS");
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "csload2-output.xml");
+ XMLDocumentPtr myXMLDocument2 = myXMLHelper->loadFile("csload2-output.xml", "companyNS");
+ myXMLHelper->save(myXMLDocument2->getRootDataObject(),
+ 0, "company", "csload3-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in CsLoad2" << e << endl;
+ }
+ cout << "END TEST: CSLoad2 ===========================================" << endl;
+
+}
+
+
+
+void sdotest::setnull()
+{
+
+// try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("NullNS","NullMainType");
+ mdg->addType("NullNS","NullSubType");
+
+ /* Now add the properties to the types...*/
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tmain = mdg->getType("NullNS","NullMainType");
+ const Type& tsub = mdg->getType("NullNS","NullSubType");
+
+
+ mdg->addPropertyToType(tmain,"name",tstring);
+ mdg->addPropertyToType(tmain,"subs",tsub, true); // many
+ mdg->addPropertyToType(tmain,"asub",tsub, false); // single
+ mdg->addPropertyToType(tmain,"bsub",tsub, false); // single
+
+ mdg->addPropertyToType(tmain,"cs",tcs); // change summary
+
+ mdg->addPropertyToType(tsub,"name",tstring);
+ mdg->addPropertyToType(tsub,"number",tint);
+ mdg->addPropertyToType(tsub,"bool",tbool);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr main1 = mdg->create((Type&)tmain);
+ main1->setCString("name","MainObject");
+
+ // asub is initially set
+ DataObjectPtr sub0 = main1->createDataObject("asub");
+ // bsub is not set.
+
+ DataObjectPtr sub1 = mdg->create((Type&)tsub);
+ DataObjectPtr sub2 = mdg->create((Type&)tsub);
+ DataObjectPtr sub3 = mdg->create((Type&)tsub);
+
+ DataObjectList& dol = main1->getList("subs");
+
+ dol.append(sub1);
+ dol.append(sub2);
+ dol.append(sub3);
+
+ // sub1 has all values set initially
+
+ sub1->setCString("name","All Initially set");
+ sub1->setInteger("number",100);
+ sub1->setBoolean("bool",false);
+
+ // sub2 has no values set at all
+
+
+ // sub3 has all values set to null
+ sub3->setNull("name");
+ sub3->setNull("number");
+ sub3->setNull("bool");
+
+
+ // report
+
+ cout << "is ASUB null? (0 expected) " <<
+ main1->isNull("asub") << endl;
+
+ cout << "is ASUB set? (1 expected) " <<
+ main1->isSet("asub") << endl;
+
+ cout << "is BSUB null? (0 expected) " <<
+ main1->isNull("bsub") << endl;
+
+ cout << "is BSUB set? (0 expected) " <<
+ main1->isSet("bsub") << endl;
+
+// dol0 is set, not null
+
+ cout << "dol[0] name is null? (0 expected) " <<
+ dol[0]->isNull("name") << endl;
+
+ cout << "dol[0] number is null? (0 expected) " <<
+ dol[0]->isNull("number") << endl;
+
+ cout << "dol[0] bool is null? (0 expected) " <<
+ dol[0]->isNull("bool") << endl;
+
+ cout << "dol[0] name is set? (1 expected) " <<
+ dol[0]->isSet("name") << endl;
+
+ cout << "dol[0] number is set? (1 expected) " <<
+ dol[0]->isSet("number") << endl;
+
+ cout << "dol[0] bool is set? (1 expected) " <<
+ dol[0]->isSet("bool") << endl;
+
+// dol1 is all unset , so no nulls
+
+ cout << "dol[1] name is null? (0 expected) " <<
+ dol[1]->isNull("name") << endl;
+
+ cout << "dol[1] number is null? (0 expected) " <<
+ dol[1]->isNull("number") << endl;
+
+ cout << "dol[1] bool is null? (0 expected) " <<
+ dol[1]->isNull("bool") << endl;
+
+ cout << "dol[1] name is set? (0 expected) " <<
+ dol[1]->isSet("name") << endl;
+
+ cout << "dol[1] number is set? (0 expected) " <<
+ dol[1]->isSet("number") << endl;
+
+ cout << "dol[1] bool is set? (0 expected) " <<
+ dol[1]->isSet("bool") << endl;
+
+// dol2 is all nulls, so all set
+
+ cout << "dol[2] name is null? (1 expected) " <<
+ dol[2]->isNull("name") << endl;
+
+ cout << "dol[2] number is null? (1 expected) " <<
+ dol[2]->isNull("number") << endl;
+
+ cout << "dol[2] bool is null? (1 expected) " <<
+ dol[2]->isNull("bool") << endl;
+
+ cout << "dol[2] name is set? (1 expected) " <<
+ dol[2]->isSet("name") << endl;
+
+ cout << "dol[2] number is set? (1 expected) " <<
+ dol[2]->isSet("number") << endl;
+
+ cout << "dol[2] bool is set? (1 expected) " <<
+ dol[2]->isSet("bool") << endl;
+
+ ChangeSummaryPtr cs = main1->getChangeSummary();
+
+ cs->beginLogging();
+
+ main1->setNull("asub");
+ main1->setNull("bsub");
+
+ dol[0]->setNull("name");
+ dol[0]->setNull("number");
+ dol[0]->setNull("bool");
+
+ dol[1]->setNull("bool");
+
+ dol[2]->setCString("name","NewName");
+ dol[2]->setInteger("number",100);
+ dol[2]->setBoolean("bool",true);
+
+
+ cs->endLogging();
+
+ // what would we expect from the change summary?
+
+ cout << "==============Expected in Change Summary=================" << endl;
+ cout << "change to main1 - object asub set to null, oldvalue asub (set)" << endl;
+ cout << "change to main1 - object bsub set to null, oldvalue null (unset)" << endl;
+ cout << "change to sub1 - name asub set to null, oldvalue \"All Initially Set\" (set)" << endl;
+ cout << "change to sub1 - number asub set to null, oldvalue 100 (set)" << endl;
+ cout << "change to sub1 - bool asub set to null, oldvalue false (set)" << endl;
+ cout << "change to sub2 - bool asub set to null, oldvalue false (unset)" << endl;
+ cout << "change to sub3 - name asub set to \"NewName\", oldvalue null, set" << endl;
+ cout << "change to sub3 - number asub set to 100, oldvalue null, set" << endl;
+ cout << "change to sub3 - bool asub set to true, oldvalue null, set" << endl;
+ cout << "==============End Expected in Change Summary=============" << endl;
+
+
+ dumpchangesummary(cs);
+
+ // report
+
+ cout << "is ASUB null? (1 expected) " <<
+ main1->isNull("asub") << endl;
+
+ cout << "is ASUB set? (1 expected) " <<
+ main1->isSet("asub") << endl;
+
+ cout << "is BSUB null? (1 expected) " <<
+ main1->isNull("bsub") << endl;
+
+ cout << "is BSUB set? (1 expected) " <<
+ main1->isSet("bsub") << endl;
+
+// dol0 is set to null
+
+ cout << "dol[0] name is null? (1 expected) " <<
+ dol[0]->isNull("name") << endl;
+
+ cout << "dol[0] number is null? (1 expected) " <<
+ dol[0]->isNull("number") << endl;
+
+ cout << "dol[0] bool is null? (1 expected) " <<
+ dol[0]->isNull("bool") << endl;
+
+ cout << "dol[0] name is set? (1 expected) " <<
+ dol[0]->isSet("name") << endl;
+
+ cout << "dol[0] number is set? (1 expected) " <<
+ dol[0]->isSet("number") << endl;
+
+ cout << "dol[0] bool is set? (1 expected) " <<
+ dol[0]->isSet("bool") << endl;
+
+// dol1 is all unset except bool which is null
+
+ cout << "dol[1] name is null? (0 expected) " <<
+ dol[1]->isNull("name") << endl;
+
+ cout << "dol[1] number is null? (0 expected) " <<
+ dol[1]->isNull("number") << endl;
+
+ cout << "dol[1] bool is null? (1 expected) " <<
+ dol[1]->isNull("bool") << endl;
+
+ cout << "dol[1] name is set? (0 expected) " <<
+ dol[1]->isSet("name") << endl;
+
+ cout << "dol[1] number is set? (0 expected) " <<
+ dol[1]->isSet("number") << endl;
+
+ cout << "dol[1] bool is set? (1 expected) " <<
+ dol[1]->isSet("bool") << endl;
+
+// dol2 is all set non-null, so all set
+
+ cout << "dol[2] name is null? (0 expected) " <<
+ dol[2]->isNull("name") << endl;
+
+ cout << "dol[2] number is null? (0 expected) " <<
+ dol[2]->isNull("number") << endl;
+
+ cout << "dol[2] bool is null? (0 expected) " <<
+ dol[2]->isNull("bool") << endl;
+
+ cout << "dol[2] name is set? (1 expected) " <<
+ dol[2]->isSet("name") << endl;
+
+ cout << "dol[2] number is set? (1 expected) " <<
+ dol[2]->isSet("number") << endl;
+
+ cout << "dol[2] bool is set? (1 expected) " <<
+ dol[2]->isSet("bool") << endl;
+
+
+ // what would we expect from the change summary?
+// }
+// catch (SDORuntimeException e)
+// {
+// cout << "Exception in setnull" << endl;
+// cout << e;
+// }
+
+}
+
+void sdotest::testsubs()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","MainType");
+
+ mdg->addType("companyNS","SubType");
+ mdg->addType("companyNS","SuperType");
+ mdg->addType("companyNS","SubstituteType");
+ mdg->addType("companyNS","UnrelatedType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tmain = mdg->getType("companyNS","MainType");
+ const Type& sub = mdg->getType("companyNS","SubType");
+ const Type& super = mdg->getType("companyNS","SuperType");
+ const Type& subst = mdg->getType("companyNS","SubstituteType");
+ const Type& unrel = mdg->getType("companyNS","UnrelatedType");
+
+
+ mdg->addPropertyToType(tmain,"name",tstring);
+ mdg->addPropertyToType(tmain,"sub",super, false);
+ mdg->addPropertyToType(tmain,"subs",super, true);
+
+
+ mdg->setPropertySubstitute(tmain, "sub","wilbur", subst);
+ mdg->setPropertySubstitute(tmain, "subs","wilburs", subst);
+
+ mdg->setBaseType(sub,super);
+
+ //now sub and subs should accept all the three types
+
+ DataObjectPtr main = mdg->create((Type&)tmain);
+ main->setCString("name","SubstituteTest");
+
+ DataObjectList& dol = main->getList("subs");
+
+ DataObjectPtr sub1 = mdg->create(sub);
+ DataObjectPtr super1 = mdg->create(super);
+ DataObjectPtr subst1 = mdg->create(subst);
+ DataObjectPtr unrel1 = mdg->create(unrel);
+
+ dol.append(sub1);
+ dol.append(super1);
+ dol.append(subst1);
+ try
+ {
+ dol.append(unrel1);
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ cout << "Normal failure to append wrong type" << endl;
+ }
+
+ dol.remove(0);
+ dol.remove(0);
+ dol.remove(0);
+
+ DataObjectList& dol2 = main->getList("wilburs");
+
+ dol2.append(sub1);
+ dol2.append(super1);
+ dol2.append(subst1);
+ try
+ {
+ dol2.append(unrel1);
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ cout << "Normal failure to append wrong type" << endl;
+ }
+
+ main->setDataObject("sub",sub1);
+ main->setDataObject("sub",super1);
+ main->setDataObject("sub",subst1);
+
+ main->setDataObject("wilbur",sub1);
+ main->setDataObject("wilbur",super1);
+ main->setDataObject("wilbur",subst1);
+
+ try
+ {
+ main->setDataObject("sub", unrel1);
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ cout << "Normal failure to set wrong type" << endl;
+ }
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << "Substitute test failed" << endl << e << endl;
+ }
+}
+
+
+void sdotest::merle1()
+{
+
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("axis.xsd");
+
+ // or dynamically create, but that would get attributes for the strings, not elements
+ //mdg->addType("axis","ItemSearch",true); // sequenced
+ //mdg->addType("axis","ItemSearchRequest",true); // sequenced
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tsearch = mdg->getType("axis","ItemSearch");
+ const Type& treq = mdg->getType("axis","ItemSearchRequest");
+
+ //mdg->addPropertyToType(tsearch,"SubscriptionId",tstring);
+ //mdg->addPropertyToType(tsearch,"AssociateTag",tstring);
+ //mdg->addPropertyToType(tsearch,"XMLEscaping",tstring);
+ //mdg->addPropertyToType(tsearch,"Validate",tstring);
+ //mdg->addPropertyToType(tsearch,"Shared",treq, false, false, true);
+ //mdg->addPropertyToType(tsearch,"Request",treq, true, false, true);
+
+ //mdg->addPropertyToType(treq,"Keywords",tstring);
+ //mdg->addPropertyToType(treq,"SearchIndex",tstring);
+
+ // dynamic creation of the data
+
+ DataObjectPtr search = mdg->create((Type&)tsearch);
+
+ search->setCString("SubscriptionId","I am the subscription ID string");
+ search->setCString("AssociateTag","I am the associate Tag string");
+ search->setCString("XMLEscaping","I am the XML escaping string");
+ search->setCString("Validate","I am the Validate string");
+
+ DataObjectPtr shared = search->createDataObject("Shared");
+ shared->setCString("Keywords","SharedKeywordsString");
+ shared->setCString("SearchIndex","SearchIndexString");
+
+ DataObjectList& requests = search->getList("Request");
+ DataObjectPtr request1 = mdg->create(treq);
+ requests.append(request1);
+ request1->setCString("Keywords","RequestKeywords");
+ request1->setCString("SearchIndex","RequestSearchIndex");
+
+ // Read the data and put it into XML:
+
+ PropertyList properties = search->getInstanceProperties();
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+ for (int i=0;i<properties.size();i++)
+ {
+ Property& prop = properties[i];
+ switch (prop.getTypeEnum())
+ {
+
+ case Type::StringType:
+ cout << "<" << prop.getName() << ">" <<
+ search->getCString(prop) << "</" <<
+ prop.getName() << ">" << endl;
+ break;
+
+ case Type::DataObjectType:
+ if (prop.isMany())
+ {
+ // many valued property, such as Requests , so get the list
+ DataObjectList& rq = search->getList(prop);
+ for (int j=0;j<rq.size();j++)
+ {
+ DataObjectPtr dob = rq[j];
+ if (dob != 0)
+ {
+ XMLDocumentPtr doc = myXMLHelper->createDocument(dob,
+ "axis", prop.getName());
+ doc->setXMLDeclaration(false);
+ char* dobXML = myXMLHelper->save(doc);
+ cout << "DataObject \"" << prop.getName() <<
+ "\" as XML:" << endl;
+ cout << dobXML << endl;
+ } // if dob
+ } // for
+ } // if many
+ else
+ {
+ DataObjectPtr dob = search->getDataObject(prop);
+ if (dob != 0)
+ {
+ XMLDocumentPtr doc = myXMLHelper->createDocument(dob,
+ "axis", prop.getName());
+ doc->setXMLDeclaration(false);
+ char* dobXML = myXMLHelper->save(doc);
+ cout << "DataObject \"" << prop.getName() <<
+ "\" as XML:" << endl;
+ cout << dobXML << endl;
+ } // if
+ } // else
+ break;
+
+ default:
+ break;
+
+ } // switch
+ } // for
+ } // try
+ catch (SDORuntimeException e)
+ {
+ cout << "Merle 1 failed" << endl << e << endl;
+ }
+}
+
+
+void sdotest::graham3()
+{
+ //try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham3.xsd");
+ //}
+ //catch (SDORuntimeException e)
+ //{
+// cout << "Graham1 failed " << e << endl;
+// }
+}
+
+void sdotest::graham1()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham1.xsd");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Graham1 failed " << e << endl;
+ }
+}
+void sdotest::graham2()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham2.xsd");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Graham2 failed " << e << endl;
+ }
+}
+
+
+void sdotest::b46613()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->create("rubbish","MyObject");
+
+ }
+ catch (SDOTypeNotFoundException e)
+ {
+ cout << "b46613 gave the correct exception" << endl;
+ }
+}
+
+void sdotest::doctest()
+{
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("doctest.xsd");
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("doctest.xml",
+ "companyNS");
+ cout << "RootURI=" << myXMLDocument->getRootElementURI();
+ cout << "RootName=" << myXMLDocument->getRootElementName();
+ }
+ catch (SDOTypeNotFoundException e)
+ {
+ cout << "doctest failed" << endl;
+ }
+
+}
+
+
+void sdotest::b46634()
+{
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company_with_nillable_SN.xsd");
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("company_with_nillable_SN.xml",
+ "companyNS");
+
+ DataObjectPtr dob = myXMLDocument->getRootDataObject();
+ DataObjectList& dol = dob->getList("departments");
+ DataObjectPtr dept = dol[0];
+ DataObjectList& dol2 = dept->getList("employees");
+ DataObjectPtr emp = dol2[0];
+
+ if (!emp->isSet("SN"))
+ {
+ cout << "B46634 WRONG - isSet should be true" << endl;
+ }
+ if (!emp->isNull("SN"))
+ {
+ cout << "B46634 WRONG - isNull should be true" << endl;
+ }
+
+ // now write out the nill value and check its still nil
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "b46634_out.xml");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46634 failed" << endl;
+ }
+
+}
+
+void sdotest::testErrors()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("error1.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("error1.xml",
+ "companyNS");
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ cout << "XML reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = myXMLHelper->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "testErrors failed" << endl << e << endl;
+ }
+
+}
+
+void sdotest::b46734()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("wsdl.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "WSDL XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ xsh->defineFile("wsdl-soap.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "WSDL SOAP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ xsh->defineFile("wsdl-http.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "WSDL HTTP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ // xsh->defineFile("StockQuoteService.wsdl");
+ // if ((i = xsh->getErrorCount()) > 0)
+ // {
+ // cout << "SQ WSDL reported some errors:" << endl;
+ // for (j=0;j<i;j++)
+ // {
+ // const char *m = xsh->getErrorMessage(j);
+ // if (m != 0) cout << m;
+ // cout << endl;
+ // }
+ // }
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("StockQuoteService.wsdl"
+ );
+ //, "http://swanandmokashi.com");
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ cout << "XML reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char * m = myXMLHelper->getErrorMessage(j);
+ if (m != 0)cout << m;
+ cout << endl;
+ }
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46734 failed" << endl << e << endl;
+ }
+
+}
+
+void sdotest::b46693()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("b46693.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "b46693 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0)cout << m;
+ cout << endl;
+ }
+ }
+
+ // XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ // XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46693.xsd"
+ // );
+
+ // if ((i = myXMLHelper->getErrorCount()) > 0)
+ // {
+ // cout << "b46693 reported some errors:" << endl;
+ // for (j=0;j<i;j++)
+ // {
+ // const char* m = myXMLHelper->getErrorMessage(j);
+ // if (m != 0)cout << m;
+ // cout << endl;
+ // }
+ // }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46693 failed" << endl << e << endl;
+ }
+
+}
+
+void sdotest::clonetest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","DepartmentType");
+ mdg->addType("companyNS","EmployeeType");
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"departments",tdept,true,false,true);
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp,false,false,false);
+ mdg->addPropertyToType(tcomp,"CEO",temp,false,false,true);
+
+ mdg->addPropertyToType(tdept,"employees",temp,true,false,true);
+ mdg->addPropertyToType(tdept,"name",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"location",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"number",tstring,false,false,true);
+
+ mdg->addPropertyToType(temp,"name",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"SN",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"manager",tbool,false,false,true);
+
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","The Company");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","The Department");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+
+ // now clone the data factory, and add more types
+
+ DataFactoryPtr df2 = mdg->clone();
+
+ df2->addType("otherNS","DataSet");
+
+ df2->addPropertyToType("companyNS","DepartmentType","dataset",
+ "otherNS","DataSet", false, false, true);
+
+ const Type& tstring2 = df2->getType("commonj.sdo","String");
+ const Type& tbool2 = df2->getType("commonj.sdo","Boolean");
+ const Type& tcs2 = df2->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp2 = df2->getType("companyNS","CompanyType");
+ const Type& tdept2 = df2->getType("companyNS","DepartmentType");
+ const Type& temp2 = df2->getType("companyNS","EmployeeType");
+
+ DataObjectPtr comp2 = df2->create((Type&)tcomp2);
+ comp->setCString("name","The Company");
+
+ DataObjectPtr dept2 = df2->create((Type&)tdept2);
+
+ DataObjectList& dol2 = comp2->getList("departments");
+ dol2.append(dept2);
+
+ dept2->setCString("name","The Other Department");
+ dept2->setCString("location","Not Botley");
+ dept2->setCString("number","321");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "clone failed " << e << endl;
+ }
+
+
+}
+
+void sdotest::testUtil()
+{
+ try {
+
+ cout << "START TEST: UTILS ======================================" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ mdg->addType("companyNS","OpenType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+ const Type& topen = mdg->getType("companyNS","OpenType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+ mdg->addPropertyToType(topen,"name",tstring);
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectList& emps = dept->getList("employees");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emps.append(emp1);
+ emps.append(emp2);
+ emps.append(emp3);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ bool b = emp1->getBoolean("openboolean");
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("openintlist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive and short!!
+
+ // unknown list type at present..
+ DataObjectList& dl2 = emp1->getList("opendataobjectlist");
+
+ DataObjectPtr myopen = mdg->create("companyNS","OpenType");
+ myopen->setCString("name","MyOpenName");
+ dl2.append(myopen); // now the list must be of data objects
+
+ emp1->setDataObject("opendataobject", myopen);
+
+ SDOUtils::printDataObject(comp);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in UTILS test" << e << endl;
+ }
+ cout << "END TEST: UTILS ======================================" << endl;
+
+}
+
+void sdotest::printset(ChangeSummaryPtr cs)
+{
+ ChangedDataObjectList& cdl = cs->getChangedDataObjects();
+
+ // here there should be a creation of Ed, and a change to dept, which has a
+ // bool previously unset, and a int list previuously unset and an employees list
+ // previously unset
+
+ for (int i=0;i< cdl.size();i++)
+ {
+ if (cs->isModified(cdl[i]))
+ {
+
+ cout << "A modified of type " << cdl[i]->getType().getURI()
+ << "#" << cdl[i]->getType().getName() << endl;
+
+ SettingList& sl = cs->getOldValues(cdl[i]);
+ if (sl.size() == 0)
+ {
+ cout << "No Settings found" << endl;
+ }
+ else
+ {
+ for (int j=0;j< sl.size(); j++)
+ {
+ cout << "Property " << sl[j].getProperty().getName();
+ // this could be a many-valued property, and could be one which is
+ // a data object or a data type...
+ if (sl[j].getProperty().isMany())
+ {
+ cout << "[" << sl[j].getIndex() << "]" ;
+ }
+ if (!sl[j].isSet())
+ {
+ cout << " was unset before the change" << endl;
+ }
+ else
+ {
+ cout << " was set before the change !!" << endl;
+ }
+ }
+ }
+ }
+ }
+}
+
+
+void sdotest::b46633()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Manager");
+ mdg->addType("myspace","Employee");
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","company",
+ "myspace","Company", false, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+
+ mdg->addPropertyToType("myspace","Department","bool",
+ "commonj.sdo","Boolean", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","manager",
+ "myspace","Manager", false, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Manager","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+
+ DataObjectPtr com = dor->createDataObject("company");
+ com->setCString("name","IBM");
+
+ DataObjectPtr dept = com->createDataObject("departments");
+ dept->setCString("name","JTC");
+
+ // employees initally unset
+
+ cs->beginLogging();
+
+ DataObjectPtr emp = dept->createDataObject("employees");
+ emp->setCString("name","Ed");
+
+
+
+ DataObjectList& dl = dept->getList("ints");
+ dl.append((long)400);
+
+ dept->setBoolean("bool", true);
+
+ printset(cs);
+
+ cs->endLogging();
+
+ // unset them all , restart logging, and get the same results
+
+ dept->unset("bool");
+ dept->unset("ints");
+ dept->unset("employees");
+
+ cs->beginLogging();
+
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ emp2->setCString("name","Ed2");
+
+ dl.append((long)600);
+
+ dept->setBoolean("bool", true);
+
+ printset(cs);
+
+ cs->endLogging();
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46633 failed " << e << endl;
+ }
+
+}
+
+
+
+void sdotest::testLoad()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ FILE* f = fopen("company_with_nillable_SN.xsd","r+");
+ char* buffer = new char[4000];
+ j = 0;
+ while ((i = fgetc(f)) != EOF)
+ {
+ buffer[j++] = (char)i;
+ }
+ buffer[j] = 0;
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->define(buffer);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ FILE* f2 = fopen("company_with_nillable_SN.xml","r+");
+ j = 0;
+ while ((i = fgetc(f2)) != EOF)
+ {
+ buffer[j++] = (char)i;
+ }
+ buffer[j] = 0;
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->load(buffer);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in testDAS " << e << endl;
+ }
+}
+
+void sdotest::includetest()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("include.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ xsh->defineFile("../t2/includeother.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in include test" << e << endl;
+ }
+}
+
+void sdotest::detachtest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Manager");
+ mdg->addType("myspace","Employee");
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","company",
+ "myspace","Company", false, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Department","manager",
+ "myspace","Manager", false, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Manager","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("company");
+ com->setCString("name","IBM");
+
+ DataObjectPtr dept = com->createDataObject("departments");
+
+ dept->setCString("name","JTC");
+
+
+ DataObjectPtr emp = dept->createDataObject("employees");
+ emp->setCString("name","Ed");
+
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ emp2->setCString("name","Tom");
+
+ DataObjectList& dol = dept->getList("employees");
+
+ DataObjectPtr e = dol[0];
+ e->detach();
+
+ DataObjectPtr cont = emp->getContainer();
+
+ if (cont != 0)
+ {
+ cout << "EMP STILL ATTACHED - problem" << endl;
+ }
+
+ DataObjectPtr cont2 = dol[0]->getContainer();
+
+ if (cont2 == 0)
+ {
+ cout << "SECOND DETACHED - problem" << endl;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "detach failed " << e << endl;
+ }
+
+}
+
+
+void sdotest::leak()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ DataObjectList& dl = dor->getList("ints");
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ dl.append((long)400);
+
+ cout << "List set should be true and is " << dor->isSet("ints") << endl;
+
+ dl.remove(0);
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ dl.append((long)400);
+
+ cout << "List set should be true and is " << dor->isSet("ints") << endl;
+
+ dor->unset("ints");
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ dl.append((long)600);
+
+ cout << "List set should be true and is " << dor->isSet("ints") << endl;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "leak failed " << e << endl;
+ }
+
+}
+
+void sdotest::twolists()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ //mdg->addType("myspace","Company");
+ //mdg->addType("myspace","Department");
+ //mdg->addType("myspace","Manager");
+ //mdg->addType("myspace","Employee");
+
+
+ //mdg->addPropertyToType("myspace","Company","name",
+ // "commonj.sdo","String", false, false, false);
+
+
+ //mdg->addPropertyToType("myspace","Root","company",
+ // "myspace","Company", false, false, true);
+
+ //mdg->addPropertyToType("myspace","Company","departments",
+ // "myspace","Department", true, false, true);
+
+
+ //mdg->addPropertyToType("myspace","Department","name",
+ // "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+ mdg->addPropertyToType("myspace","Root","ints2",
+ "commonj.sdo","Integer", true, false, false);
+
+ //mdg->addPropertyToType("myspace","Department","bool",
+ // "commonj.sdo","Boolean", false, false, false);
+
+ //mdg->addPropertyToType("myspace","Department","manager",
+ // "myspace","Manager", false, false, true);
+
+ //mdg->addPropertyToType("myspace","Department","employees",
+ // "myspace","Employee", true, false, true);
+
+ //mdg->addPropertyToType("myspace","Manager","name",
+ // "commonj.sdo","String", false, false, false);
+
+ //mdg->addPropertyToType("myspace","Employee","name",
+ // "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ //ChangeSummaryPtr cs = dor->getChangeSummary();
+
+ //DataObjectPtr com = dor->createDataObject("company");
+ //com->setCString("name","IBM");
+
+ //DataObjectPtr dept = com->createDataObject("departments");
+ //dept->setCString("name","JTC");
+
+ // employees initally unset
+
+ //cs->beginLogging();
+
+ //DataObjectPtr emp = dept->createDataObject("employees");
+ //emp->setCString("name","Ed");
+
+ DataObjectList& dl2 = dor->getList("ints2");
+ dl2.append((long)400);
+
+
+ DataObjectList& dl = dor->getList("ints");
+ dl.append((long)400);
+
+ //dept->setBoolean("bool", true);
+
+ //printset(cs);
+
+ //cs->endLogging();
+
+ // unset them all , restart logging, and get the same results
+
+ //dept->unset("bool");
+ //dept->unset("ints");
+ //dept->unset("employees");
+
+ //cs->beginLogging();
+
+ //DataObjectPtr emp2 = dept->createDataObject("employees");
+ //emp2->setCString("name","Ed2");
+
+ //dl.append((long)600);
+
+ //dept->setBoolean("bool", true);
+
+ // printset(cs);
+
+ //cs->endLogging();
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "twolists failed " << e << endl;
+ }
+
+}
+
+
+void sdotest::graham4()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addType("myspace","ListItem");
+
+
+ mdg->addPropertyToType("myspace","ListItem","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+ mdg->addPropertyToType("myspace","Root","items",
+ "myspace","ListItem", true, false, true);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+
+ // first try with no elements in lists
+
+ try {
+ DataObjectPtr pitem = dor->getDataObject("items[name=\"hello\"]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ try {
+ int inty = dor->getInteger("ints[1]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ // now populate them
+
+ DataObjectPtr myitem = dor->createDataObject("items");
+ myitem->setCString("name","not hello");
+
+ try {
+ DataObjectPtr pitem2 = dor->getDataObject("items[name=\"hello\"]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ DataObjectList& dl = dor->getList("ints");
+ dl.append((long)100);
+
+ try {
+ int inty2 = dor->getInteger("ints[2]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ try
+ {
+ DataObjectPtr pitem2 = dor->getDataObject("items[name=\"not hello\"]");
+ cout << "item name is " << pitem2->getCString("name") << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ABNORMAL exception in Graham4" << endl;
+ }
+
+ try {
+ int inty2 = dor->getInteger("ints[1]");
+ cout << "Integer is " << inty2 << endl;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "twolists failed " << e << endl;
+ }
+
+}
+
+
+void sdotest::graham5()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("Order.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ }
+ catch (SDORuntimeException r)
+ {
+ cout << "Graham5 failed " << r << endl;
+ }
+}
+
+
+
+void sdotest::b47293()
+{
+ int i,j,k;
+ try
+ {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("47293Catalog.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "47293 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ TypeList tl = mdg->getTypes();
+ for ( k=0;k<tl.size();k++)
+ {
+ cout << "Type:" << tl[k].getURI() << "#" << tl[k].getName() << endl;
+ }
+
+ xsh->generateFile(tl,"47293Catalog-out.xsd","catalogNS");
+
+ DataFactoryPtr mdg2 = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh2 = HelperProvider::getXSDHelper(mdg2);
+
+ xsh2->defineFile("47293Catalog-out.xsd");
+
+ if ((i = xsh2->getErrorCount()) > 0)
+ {
+ cout << "47293-out XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh2->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ TypeList tl2 = mdg2->getTypes();
+ for (k=0;k<tl2.size();k++)
+ {
+ cout << "Type:" << tl2[k].getURI() << "#" << tl2[k].getName() << endl;
+ }
+
+
+
+ //XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ //XMLDocumentPtr doc = xmh->loadFile("47293Catalog.xml", "catalog");
+
+ //DataObjectPtr dob = doc->getRootDataObject();
+
+ //xmh->save(dob,"","catalog","47293Catalog-out.xml");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "B47137 failed " << e << endl;
+ }
+}
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/include3.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/include3.xsd
new file mode 100644
index 0000000000..a74c94e318
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/include3.xsd
@@ -0,0 +1,14 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother.xsd
new file mode 100644
index 0000000000..7e42346471
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother.xsd
@@ -0,0 +1,14 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:include schemaLocation = "includeother1.xsd"/>
+ <xsd:include schemaLocation = "./includeother2.xsd"/>
+ <xsd:include schemaLocation = "../Debug/includeother3.xsd"/>
+
+
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother1.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother1.xsd
new file mode 100644
index 0000000000..98705f6418
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother1.xsd
@@ -0,0 +1,18 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother2.xsd b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother2.xsd
new file mode 100644
index 0000000000..66dfca00a8
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/t2/includeother2.xsd
@@ -0,0 +1,17 @@
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/tags/cpp-stable-20060304/sdo/runtime/core/test/testopen3.xml b/tags/cpp-stable-20060304/sdo/runtime/core/test/testopen3.xml
new file mode 100644
index 0000000000..4af489c53a
--- /dev/null
+++ b/tags/cpp-stable-20060304/sdo/runtime/core/test/testopen3.xml
@@ -0,0 +1 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="companyNS" targetNamespace="companyNS"><xsd:element name="companyType" type="tns:CompanyType"/><xsd:complexType name="CompanyType" sdo:aliasName="TheFirm TheBigFirm"><xsd:sequence><xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded" sdo:aliasName="TheDepartments MYDepartments"/></xsd:sequence><xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:anyURI"/></xsd:complexType><xsd:element name="departmentType" type="tns:DepartmentType"/><xsd:complexType name="DepartmentType"><xsd:sequence><xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="location" type="xsd:String"/><xsd:attribute name="number" type="xsd:String"/></xsd:complexType><xsd:element name="employeeType" type="tns:EmployeeType"/><xsd:complexType name="EmployeeType"><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="SN" type="xsd:String"/><xsd:attribute name="manager" type="xsd:boolean"/><xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/><xsd:anyAttribute namespace="##any" processContents="lax"/></xsd:complexType><xsd:element name="openType" type="tns:OpenType"/><xsd:complexType name="OpenType"><xsd:attribute name="name" type="xsd:String"/></xsd:complexType><xsd:attribute name="openboolean" type="xsd:boolean"/><xsd:element name="opendataobject" type="tns:OpenType" minOccurs="0"/><xsd:element name="opendataobjectlist" type="tns:OpenType" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="openintlist" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/><xsd:attribute name="openstring" type="xsd:hexBinary"/></xsd:schema> \ No newline at end of file