summaryrefslogtreecommitdiffstats
path: root/sdo-cpp/trunk/samples/misc
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-11-16 06:48:18 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-11-16 06:48:18 +0000
commit2cd577564c1e4a37b25f4064b84af15d112b0654 (patch)
treec2181bdc5c0e13fd9fa54b5fb9f4e4f359971303 /sdo-cpp/trunk/samples/misc
parentc5846d0e19e3b5fd9d818d714fea2df3f3ef90eb (diff)
Cleaning up SVN structure, moving sdo trunk to sdo-cpp/trunk.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880627 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sdo-cpp/trunk/samples/misc')
-rw-r--r--sdo-cpp/trunk/samples/misc/ChangeSummarySave.cpp188
-rw-r--r--sdo-cpp/trunk/samples/misc/ChangeSummarySave.xsd49
-rw-r--r--sdo-cpp/trunk/samples/misc/Makefile.am40
-rw-r--r--sdo-cpp/trunk/samples/misc/ObjectCreation.cpp251
-rw-r--r--sdo-cpp/trunk/samples/misc/Query.cpp178
-rw-r--r--sdo-cpp/trunk/samples/misc/Substitutes.cpp121
-rw-r--r--sdo-cpp/trunk/samples/misc/VSExpress/misc.sln20
-rw-r--r--sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj245
-rw-r--r--sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user65
-rw-r--r--sdo-cpp/trunk/samples/misc/XSDLoading.cpp110
-rw-r--r--sdo-cpp/trunk/samples/misc/XSDLoading.xml30
-rw-r--r--sdo-cpp/trunk/samples/misc/XSDLoading.xsd48
-rw-r--r--sdo-cpp/trunk/samples/misc/build.bat40
-rw-r--r--sdo-cpp/trunk/samples/misc/build.xml133
-rw-r--r--sdo-cpp/trunk/samples/misc/companysubs.xsd63
-rw-r--r--sdo-cpp/trunk/samples/misc/deploy.bat52
-rw-r--r--sdo-cpp/trunk/samples/misc/samples.cpp36
-rw-r--r--sdo-cpp/trunk/samples/misc/samples.h54
18 files changed, 1723 insertions, 0 deletions
diff --git a/sdo-cpp/trunk/samples/misc/ChangeSummarySave.cpp b/sdo-cpp/trunk/samples/misc/ChangeSummarySave.cpp
new file mode 100644
index 0000000000..5a27683807
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/ChangeSummarySave.cpp
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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$ */
+
+#include "samples.h"
+using namespace std;
+
+void ChangeSummarySave::sample()
+{
+ cout << " ********** ChangeSummarySave sample********" << endl;
+
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("ChangeSummarySave.xsd");
+
+ /**
+ * Load the schema from ChangeSummarySave.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, set the change summary logging, modify the
+ * data, then save it to a file
+ */
+
+ 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);
+
+
+ /**
+ * Set the employee of the month - which is a reference, not
+ * a containment value
+ */
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ /**
+ * The XSD defined the company type as having a change summary,
+ * so we can get it...
+ */
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ /**
+ * And ask it to start logging...
+ */
+
+ cs->beginLogging();
+
+ /**
+ * With logging on, create a new employee
+ */
+
+ DataObjectPtr emp4 = mdg->create(temp);
+ emp4->setCString("name","Al Smith");
+ emp4->setCString("SN","E0004");
+ emp4->setBoolean("manager",true);
+
+ /**
+ * The first recorded change happens now, as the employee is
+ * added into the data graph. Emp4 (Al Smith) will appear in the
+ * change summary as a creation. There will also be a change
+ * record for the list "employees" of this department, holding the
+ * values before Al was added.
+ */
+ dol2.append(emp4);
+
+ /**
+ * The second change is to remove element 1 from the
+ * same list - Thats Mary Smith.
+ * Mary will appear as a deletion, but there will be no extra
+ * change record for "employees", as its already been changed.
+ * Mary was employee of the month, so that reference gets
+ * emptied, and a change record is set up for it, recording
+ * Mary as the old value.
+ */
+
+ dol2.remove(1); // element 1 is Mary
+
+ DataObjectPtr emp5 = mdg->create(temp);
+ emp5->setCString("name","Bill Withers");
+ emp5->setCString("SN","E0005");
+
+
+ /**
+ * The third change is to append Bill to the same list.
+ * Bill appears as a creation, but there is no change recorded to
+ * the employees list.
+ */
+
+ dol2.append(emp5);
+
+
+ /**
+ * The company name is changed. A change record is set up for
+ * the property "name" of this company. It stores the old value
+ * "ACME"
+ */
+
+ comp->setCString("name","MegaCorp");
+
+ /**
+ * The company employee of the month is changed. The old
+ * value has already been changed from Mary to NULL, so no change
+ * record is created here at all
+ */
+
+ comp->setDataObject("employeeOfTheMonth",emp4);
+
+
+ /**
+ * Stop logging changes
+ */
+
+ cs->endLogging();
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"ChangeSummarySave-output.xml");
+
+ /**
+ * Have a look in the file and see if you can recognise the changes
+ * above
+ */
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in ChangeSummarySave" << endl;
+ cout << e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}
diff --git a/sdo-cpp/trunk/samples/misc/ChangeSummarySave.xsd b/sdo-cpp/trunk/samples/misc/ChangeSummarySave.xsd
new file mode 100644
index 0000000000..b626d6a45b
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/ChangeSummarySave.xsd
@@ -0,0 +1,49 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you 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.
+-->
+
+ <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/sdo-cpp/trunk/samples/misc/Makefile.am b/sdo-cpp/trunk/samples/misc/Makefile.am
new file mode 100644
index 0000000000..c1cd5cde65
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/Makefile.am
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+
+deploydir=$(prefix)/misc/deploy/
+prgbindir=$(deploydir)/bin
+
+prgbin_PROGRAMS = sdo_misc
+prgbin_SCRIPTS =
+EXTRA_DIST = *.xsd *.xml
+deploy_DATA = *.xsd *.xml
+
+sdo_misc_SOURCES = samples.cpp \
+ChangeSummarySave.cpp \
+ObjectCreation.cpp \
+Query.cpp \
+Substitutes.cpp \
+XSDLoading.cpp
+
+
+noinst_HEADERS = *.h
+
+sdo_misc_LDADD = -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo -lxml2
+
+
+INCLUDES = -I$(top_builddir)/misc \
+ -I${TUSCANY_SDOCPP}/include
diff --git a/sdo-cpp/trunk/samples/misc/ObjectCreation.cpp b/sdo-cpp/trunk/samples/misc/ObjectCreation.cpp
new file mode 100644
index 0000000000..94ff64e904
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/ObjectCreation.cpp
@@ -0,0 +1,251 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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$ */
+
+#include "samples.h"
+using namespace std;
+
+void ObjectCreation::sample()
+{
+
+
+ cout << " ********** Sample ObjectCreation **********" << endl;
+
+ try {
+
+
+ /**
+ * Get a data factory. With it we can either create metadata
+ * or load it from an XSD.
+ */
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ /**
+ * Add some Types to the data factory..
+ * The booleans at on addType are:
+ * "isSequenced", "isOpen" "isAbstract" and "isDataType"
+ */
+
+ mdg->addType("myspace","Company");
+
+ mdg->addType("myspace","Department");
+
+ /**
+ * Manager is going to be a sequenced type...
+ */
+
+ mdg->addType("myspace","Manager", true, false);
+
+ mdg->addType("myspace","Employee");
+
+
+ /**
+ * We will make employee and manager sub-types of 'person'
+ */
+
+ mdg->addType("myspace","Person", true, false);
+
+
+ /**
+ * having all the types defined, we can now define the tree
+ * by giving properties to the types.
+ */
+
+ /**
+ * We could use the API passing in name and URI for each
+ * Type , or get the Types back and use them directly.
+ * Here we get back the types to use...
+ */
+
+ 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& tm = mdg->getType("myspace","Manager");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+ const Type& tp = mdg->getType("myspace","Person");
+
+
+ /**
+ * Example 1 - add a property of type String to type company
+ */
+
+ mdg->addPropertyToType(tc,"name",ts);
+
+ /**
+ * Example 2 - add using the name of the company instead of the
+ * type...
+ */
+
+ mdg->addPropertyToType("myspace","Company","address",ts);
+
+ /**
+ * Example 3 - add a many valued property
+ */
+
+ mdg->addPropertyToType(tc,"departments", "myspace","Department",
+ true);
+
+
+ /**
+ * Example 4 - add a reference property
+ */
+
+ mdg->addPropertyToType(tc,"employee of the month", "myspace",
+ "Employee",false, false, false);
+
+
+ /**
+ * Add other department properties...
+ */
+
+ mdg->addPropertyToType(td,"name", ts);
+ mdg->addPropertyToType(td,"id", ti);
+ mdg->addPropertyToType(td,"manager", tm);
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+ /**
+ * Add a name to the person
+ */
+
+ mdg->addPropertyToType(tp,"name", ts);
+
+
+
+ /**
+ * Make employees and mamagers both substypes of person
+ */
+
+ mdg->setBaseType(te,tp);
+ mdg->setBaseType(tm,tp);
+
+ /**
+ * And give them different properties of their own.
+ */
+
+ mdg->addPropertyToType(tm,"officeid", ts);
+ mdg->addPropertyToType(te,"cubelocation", ts);
+
+
+
+ /**
+ * The data structure looks like this:
+
+ * Company
+ * ----name (String)
+ * ----address *String)
+ * ----departments (Department, many valued)
+ * ----employee of the month ( Employee - reference)
+
+ * Person
+ * ----name (String)
+
+ * Employee
+ * ----name (String - inherited from Person)
+ * ----cubelocation (String)
+
+ * Manager
+ * ----name (String - inherited from Person)
+ * ----officeid (String)
+
+ * Department
+ * ----name (String)
+ * ----id (Integer)
+ * ---- manager (Manager)
+ * ---- employees (Employee - many valued)
+
+
+ /**
+ * create an object of type Company using the DataFactory
+ */
+
+ DataObjectPtr dor = mdg->create((Type&)tc);
+
+ /**
+ * Set the company name to Acme
+ */
+
+ dor->setCString("name","Acme");
+
+ /**
+ * Set up the two departments - using the
+ * DataObject createDataObject API
+ */
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+ dep1->setCString("name","Development");
+ dep1->setInt("id",100);
+
+ DataObjectPtr man1 = dep1->createDataObject("manager");
+ man1->setCString("name","Herve Jones");
+
+ DataObjectPtr dep2= dor->createDataObject("departments");
+ dep2->setCString("name","Marketing");
+ dep2->setInt("id",200);
+
+ DataObjectPtr man2 = dep2->createDataObject("manager");
+ man1->setCString("name","August Phan");
+
+ /**
+ * Give the departments some employees
+ */
+
+ DataObjectPtr emp1 = dep1->createDataObject("employees");
+ emp1->setCString("name","Fred Appleby");
+ emp1->setCString("cubelocation","100-A");
+
+ DataObjectPtr emp2 = dep1->createDataObject("employees");
+ emp2->setCString("name","Jane Bloggs");
+ emp2->setCString("cubelocation","100-B");
+
+ DataObjectPtr emp3 = dep2->createDataObject("employees");
+ emp3->setCString("name","Robin Corbet");
+ emp3->setCString("cubelocation","200-A");
+
+ DataObjectPtr emp4 = dep2->createDataObject("employees");
+ emp4->setCString("name","Martha Denby");
+ emp4->setCString("cubelocation","200-B");
+
+ cout << "Company Name:" << dor->getCString("name") << endl;
+
+ DataObjectList& depts = dor->getList("departments");
+ for (int i=0;i<depts.size();i++)
+ {
+ cout << " Department Name:" << depts[i]->getCString("name") << endl;
+
+ DataObjectList& emps = depts[i]->getList("employees");
+
+ for (int j=0;j<emps.size();j++)
+ {
+ cout << " Employee Name:" << emps[j]->getCString("name") << endl;
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in ObjectCreation" <<endl;
+ cout << e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+ return;
+}
+
+
diff --git a/sdo-cpp/trunk/samples/misc/Query.cpp b/sdo-cpp/trunk/samples/misc/Query.cpp
new file mode 100644
index 0000000000..65638aa7d2
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/Query.cpp
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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$ */
+
+#include "samples.h"
+using namespace std;
+
+void Query::sample()
+{
+ cout << " ********** Query sample *******************" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ /**
+ * Create some types
+ */
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ 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& tint= mdg->getType("commonj.sdo","Integer");
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+
+ /**
+ * The company
+ */
+
+ mdg->addPropertyToType(tc,"name",tstring); // single string name
+ mdg->addPropertyToType(tc,"departments",
+ td,true); // many departments
+ mdg->addPropertyToType(tc,"employee of the month"
+ , te, false, false, false); // reference to employee
+
+ /**
+ * The department
+ */
+
+ mdg->addPropertyToType(td,"name", tstring); // single string name
+ mdg->addPropertyToType(td,"employees",te,
+ true,false,true); // many employees
+
+
+ /**
+ * The employee
+ */
+
+ mdg->addPropertyToType(te,"isFullTime",tbool);
+ mdg->addPropertyToType(te,"employeeNumber",tint);
+ mdg->addPropertyToType(te,"name",tstring);
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ // The departments
+
+ DataObjectPtr dept = dor->createDataObject("departments");
+ dept->setCString("name","Shipping");
+
+ DataObjectPtr dept2 = dor->createDataObject("departments");
+ dept2->setCString("name","Buying");
+
+ // The employees
+
+ DataObjectPtr emp1 = dept->createDataObject("employees");
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ DataObjectPtr emp3 = dept->createDataObject("employees");
+ DataObjectPtr emp4 = dept2->createDataObject("employees");
+
+
+ emp1->setBoolean("isFullTime",true);
+ emp1->setInt("employeeNumber",65443);
+ emp1->setCString("name","Norman");
+
+
+ emp2->setBoolean("isFullTime",false);
+ emp2->setInt("employeeNumber",64778);
+ emp2->setCString("name","Carl");
+
+ emp3->setBoolean("isFullTime",true);
+ emp3->setInt("employeeNumber",61990);
+ emp3->setCString("name","Amanda");
+
+ emp4->setBoolean("isFullTime",true);
+ emp4->setInt("employeeNumber",56789);
+ emp4->setCString("name","Donna");
+
+ dor->setDataObject("employee of the month",emp4); // Donna is referenced.
+
+
+ try {
+
+ // access the first employee of the first department who is not full time
+
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[isFullTime=false]");
+ cout << "Carl should be the first part timer: " << dob1->getCString("name") << " is." <<endl;
+
+ // get the same employee by index
+
+ DataObjectPtr dob2 = dor->getDataObject("departments[1]/employees[2]");
+ cout << "Carl should be employees[2]:" << dob2->getCString("name") << " is." << endl;
+
+ // use the dot notation to get the same employee
+
+ DataObjectPtr dob3 = dor->getDataObject("departments.0/employees.1");
+ cout << "Carl should be employees.1:" << dob3->getCString("name") << " is." << endl;
+
+ // get the reference...
+
+ DataObjectPtr dob4 = dor->getDataObject("employee of the month");
+ cout << "Donna should be employee of the month:" << dob4->getCString("name") << " is." << endl;
+
+ // And by employee number...
+
+ DataObjectPtr dob5 = dor->getDataObject("departments[2]/employees[employeeNumber=56789]");
+ cout << "Donna should be employee 56789:" << dob5->getCString("name") << " is." << endl;
+
+ // If the query yields no value because the element doesnt exist...
+
+ try
+ {
+ DataObjectPtr dob6 = dor->getDataObject("departments[1]/employees[employeeNumber=56789]");
+ cout << "Did not get the expected exception" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Expected an IndexOutOfRangeException and got " << e.getEClassName() << endl;
+ }
+
+ // If the query yields no value because the path is invalid...
+
+
+ try
+ {
+ DataObjectPtr dob7 = dor->getDataObject("departments[fish]/employees[0]");
+ cout << "Did not get the expected exception" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Expected an PathNotFoundException and got " << e.getEClassName() << endl;
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Unexpected error in Query " << e << endl;
+ }
+
+
+ cout << " ********** End Query Sample **************" << endl;
+}
diff --git a/sdo-cpp/trunk/samples/misc/Substitutes.cpp b/sdo-cpp/trunk/samples/misc/Substitutes.cpp
new file mode 100644
index 0000000000..816caee2d5
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/Substitutes.cpp
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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$ */
+
+#include "samples.h"
+using namespace std;
+
+void Substitutes::sample()
+{
+ cout << " ********** Substitutes sample *************" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companysubs.xsd");
+
+ /**
+ * The companysubs xsd defines some types including a
+ * type which allows substitutions. The PublicationType is
+ * the base of BookType and MagazineType, and the substitutions
+ * are enabled so that properties can be either.
+ */
+
+ 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 some data to work with
+ */
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+
+ /**
+ * book has a title property because it inherits from Publication
+ */
+ book1->setCString("title","Nowhere Man");
+
+
+ DataObjectPtr mag1 = mdg->create(mag);
+
+ /**
+ * Magazine has an eidtor, and a title inherited from publication
+ */
+
+ 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");
+
+
+ /**
+ * The property "Publication" is defined as substitutable, so
+ * any of the book, magazine or publication should be
+ * acceptable values. When the type is queried, the type
+ * returned should correspond to the current type of the
+ * property...
+ */
+
+ comp->setDataObject("Publication",pub1);
+ const Type& tpub1 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is now of type " << tpub1.getName() << endl;
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ cout << "Publication now is of type " << tpub2.getName() << endl;
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ cout << "Publication now is of type " << tpub3.getName() << endl;
+
+ /**
+ * As the substitutes have names, they act as a sort of
+ * alias, so we can address Publication as Book or Magazine too
+ */
+
+ 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 << "Exception in Substitutes"<< endl;
+ cout<< e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}
diff --git a/sdo-cpp/trunk/samples/misc/VSExpress/misc.sln b/sdo-cpp/trunk/samples/misc/VSExpress/misc.sln
new file mode 100644
index 0000000000..a88518bbbd
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/VSExpress/misc.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdo_misc", "sdo_misc\sdo_misc.vcproj", "{1625B649-C6E1-4A4D-9DDA-EB7CBC3B8AC6}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1625B649-C6E1-4A4D-9DDA-EB7CBC3B8AC6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1625B649-C6E1-4A4D-9DDA-EB7CBC3B8AC6}.Debug|Win32.Build.0 = Debug|Win32
+ {1625B649-C6E1-4A4D-9DDA-EB7CBC3B8AC6}.Release|Win32.ActiveCfg = Release|Win32
+ {1625B649-C6E1-4A4D-9DDA-EB7CBC3B8AC6}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj b/sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj
new file mode 100644
index 0000000000..159d609f95
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="sdo_misc"
+ ProjectGUID="{1625B649-C6E1-4A4D-9DDA-EB7CBC3B8AC6}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/sdo_misc.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/sdo_misc.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tuscany_sdo.lib $(NOINHERIT)"
+ OutputFile=".\Debug/sdo_misc.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)\lib"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\Debug/sdo_misc.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Debug/sdo_misc.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="..\..\deploy.bat ..\..\ Debug"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/sdo_misc.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="4"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ PrecompiledHeaderFile=".\Release/sdo_misc.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tuscany_sdo.lib $(NOINHERIT)"
+ OutputFile=".\Release/sdo_misc.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)\lib"
+ ProgramDatabaseFile=".\Release/sdo_misc.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release/sdo_misc.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="..\..\deploy.bat ..\..\ Release"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="..\..\ChangeSummarySave.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\ObjectCreation.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Query.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\samples.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Substitutes.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\XSDLoading.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="..\..\samples.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user b/sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user
new file mode 100644
index 0000000000..5b786f64e5
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioUserFile
+ ProjectType="Visual C++"
+ Version="8.00"
+ ShowAllFiles="false"
+ >
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ >
+ <DebugSettings
+ Command="$(TUSCANY_SDOCPP)\samples\misc\deploy\bin\sdo_misc.exe"
+ WorkingDirectory="$(TUSCANY_SDOCPP)\samples\misc\deploy"
+ CommandArguments=""
+ Attach="false"
+ DebuggerType="3"
+ Remote="1"
+ RemoteMachine=""
+ RemoteCommand=""
+ HttpUrl=""
+ PDBPath=""
+ SQLDebugging=""
+ Environment="PATH=$(TUSCANY_SDOCPP)\bin;%PATH%"
+ EnvironmentMerge="true"
+ DebuggerFlavor="0"
+ MPIRunCommand=""
+ MPIRunArguments=""
+ MPIRunWorkingDirectory=""
+ ApplicationCommand=""
+ ApplicationArguments=""
+ ShimCommand=""
+ MPIAcceptMode=""
+ MPIAcceptFilter=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ >
+ <DebugSettings
+ Command="$(TUSCANY_SDOCPP)\samples\misc\deploy\bin\sdo_misc.exe"
+ WorkingDirectory="$(TUSCANY_SDOCPP)\samples\misc\deploy"
+ CommandArguments=""
+ Attach="false"
+ DebuggerType="3"
+ Remote="1"
+ RemoteMachine=""
+ RemoteCommand=""
+ HttpUrl=""
+ PDBPath=""
+ SQLDebugging=""
+ Environment="PATH=$(TUSCANY_SDOCPP)\bin;%PATH%"
+ EnvironmentMerge="true"
+ DebuggerFlavor="0"
+ MPIRunCommand=""
+ MPIRunArguments=""
+ MPIRunWorkingDirectory=""
+ ApplicationCommand=""
+ ApplicationArguments=""
+ ShimCommand=""
+ MPIAcceptMode=""
+ MPIAcceptFilter=""
+ />
+ </Configuration>
+ </Configurations>
+</VisualStudioUserFile>
diff --git a/sdo-cpp/trunk/samples/misc/XSDLoading.cpp b/sdo-cpp/trunk/samples/misc/XSDLoading.cpp
new file mode 100644
index 0000000000..8462f80f21
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/XSDLoading.cpp
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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$ */
+
+#include "samples.h"
+using namespace std;
+
+void XSDLoading::sample()
+{
+ int i,j;
+
+ cout << " ********** XSDLoading Sample **************" << endl;
+ try
+ {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ /**
+ * Get an XSD helper to load XSD information into the
+ * data factory
+ */
+
+ XSDHelperPtr myXSDHelper = HelperProvider::getXSDHelper(mdg);
+ myXSDHelper->defineFile("XSDLoading.xsd");
+
+ /**
+ * Check if there were any errors. The parse may still
+ * succeed, but errors indicate some elements were not
+ * understood
+ */
+
+ if ((i = myXSDHelper->getErrorCount()) > 0)
+ {
+ cout << "XSD Loading reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = myXSDHelper->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ /**
+ * Use the same data factory to load XML corresponding to
+ * data objects adhering to the previously loaded schema
+ */
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("XSDLoading.xml", "companyNS");
+
+ /**
+ * Check if there were any errors. The parse may still
+ * succeed, but errors indicate some elements did not match
+ * the schema, or were malformed.
+ *
+ */
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ cout << "XML Loading reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = myXMLHelper->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+ cout << "Company Name:" << newdob->getCString("name") << endl;
+
+ DataObjectList& depts = newdob->getList("departments");
+ for (int i=0;i<depts.size();i++)
+ {
+ cout << " Department Name:" << depts[i]->getCString("name") << endl;
+
+ DataObjectList& emps = depts[i]->getList("employees");
+
+ for (int j=0;j<emps.size();j++)
+ {
+ cout << " Employee Name:" << emps[j]->getCString("name") << endl;
+ }
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in XSD Loading test" << endl;
+ cout << e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}
diff --git a/sdo-cpp/trunk/samples/misc/XSDLoading.xml b/sdo-cpp/trunk/samples/misc/XSDLoading.xml
new file mode 100644
index 0000000000..29ac158654
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/XSDLoading.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you 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.
+-->
+
+ <!-- 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/sdo-cpp/trunk/samples/misc/XSDLoading.xsd b/sdo-cpp/trunk/samples/misc/XSDLoading.xsd
new file mode 100644
index 0000000000..4b7270354c
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/XSDLoading.xsd
@@ -0,0 +1,48 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you 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.
+-->
+
+<!-- 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/sdo-cpp/trunk/samples/misc/build.bat b/sdo-cpp/trunk/samples/misc/build.bat
new file mode 100644
index 0000000000..c061d8329d
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/build.bat
@@ -0,0 +1,40 @@
+@echo off
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+
+setlocal
+
+set config=Release
+if .Debug == .%1 (
+echo Building Debug version
+set config=Debug
+)
+
+if "%TUSCANY_SDOCPP%" == "" (
+echo "TUSCANY_SDOCPP not set"
+goto end
+)
+
+echo using Tuscany SDOCPP: %TUSCANY_SDOCPP%
+
+call vcvars32
+
+call vcbuild VSExpress\misc.sln "%config%|Win32"
+
+
+:end
+endlocal
diff --git a/sdo-cpp/trunk/samples/misc/build.xml b/sdo-cpp/trunk/samples/misc/build.xml
new file mode 100644
index 0000000000..d4720fdb57
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/build.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you 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.
+-->
+<project name="TuscanySDONative_Sample_misc" default="all" basedir="../..">
+
+ <import file="${basedir}/antscripts/system.xml"/>
+ <import file="${basedir}/antscripts/compile-targets.xml"/>
+
+ <!--
+ Notice that the basedir for this project is set to the TuscanySDO root dir
+ This makes path setting in system.xml much simpler, but we'll just have to
+ set a property here to this directory.
+ -->
+
+ <target name="init">
+ <tstamp/>
+ <property name="this.dir" location="${basedir}/samples/misc"/>
+ <property name="sample.misc.dir" location="${this.dir}/build"/>
+ <property name="sample.misc.src.dir" location="${this.dir}"/>
+ <property name="sample.misc.build.dir" location="${sample.misc.dir}/build"/>
+ <property name="misc.install.dir"
+ location="${tuscanySDO.install.dir}/samples/misc/bin"/>
+
+
+ </target>
+
+ <!--
+ Public targets
+ -->
+ <target name="all"
+ description="build and install the TuscanySDONative misc sample">
+ <antcall target="build"/>
+ <antcall target="install"/>
+ </target>
+
+ <target name="build"
+ description="build the TuscanySDONative misc sample">
+ <antcall target="build.sample.misc"/>
+ </target>
+
+ <target name="install"
+ description="Install the TuscanySDONative misc sample">
+ <antcall target="install.sample.misc"/>
+ </target>
+
+ <target name="clean"
+ description="Clean the TuscanySDONative misc sample">
+ <antcall target="clean.sample.misc"/>
+
+ </target>
+
+ <target name="distribution" description="Generate the necessary distribution files of misc sample and copy it to the distribution dir">
+ <antcall target="sample.misc.distribution"/>
+ </target>
+
+ <!--
+ Internal targets
+ They can still be called, they're just not described, so wont show up in "ant -p"
+ -->
+
+ <!-- build -->
+
+ <target name="build.sample.misc" depends="init,check.ws">
+ <mkdir dir="${sample.misc.build.dir}"/>
+
+ <copy todir="${sample.misc.build.dir}">
+ <fileset dir="${sample.misc.dir}" includes="*.h"/>
+ <fileset dir="${sample.misc.dir}" includes="*.cpp"/>
+ </copy>
+ <!-- build the library -->
+ <cpp-build
+ srcdir="${sample.misc.src.dir}"
+ infiles="*.cpp"
+ outdir="${sample.misc.build.dir}/.libs"
+ outtype="executable"
+ outfile="misc">
+ <custom-build-elements>
+ <includepath path="${tuscanySDO.install.dir}/include"/>
+ <includepath path="${libxml2.include.dir}"/>
+ <includepath if="windows" path="${iconv.home.dir}/include"/>
+ <libset if="windows" dir="${libxml2.lib.dir}" libs="libxml2"/>
+ <libset unless="windows" dir="${libxml2.lib.dir}" libs="xml2"/>
+
+<libset dir="${tuscanySDO.install.dir}/lib" libs="tuscany_sdo"/>
+ </custom-build-elements>
+ </cpp-build>
+ </target>
+
+
+ <!-- install -->
+
+ <target name="install.sample.misc" depends="init">
+ <cpp-install-files
+ files="*.exe*"
+ srcdir="${sample.misc.dir}/build/.libs/"
+ destdir="${misc.install.dir}"/>
+ <copy todir="${misc.install.dir}" overwrite="true">
+ <fileset dir="${this.dir}" includes="*.xsd, *.xml" excludes="build.xml"/>
+ </copy>
+
+ </target>
+
+ <!-- clean -->
+
+ <target name="clean.sample.misc" depends="init">
+ <delete dir="${sample.misc.dir}" quiet="true"/>
+ </target>
+
+ <target name="sample.misc.distribution">
+ <copy todir="${distribution.bin.dir}/samples/misc" overwrite="true">
+ <fileset dir="${this.dir}/misc" excludes="build/ rsc/ VSExpress/"/>
+ </copy>
+
+
+ </target>
+
+</project>
diff --git a/sdo-cpp/trunk/samples/misc/companysubs.xsd b/sdo-cpp/trunk/samples/misc/companysubs.xsd
new file mode 100644
index 0000000000..5b7e52ed9e
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/companysubs.xsd
@@ -0,0 +1,63 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you 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.
+-->
+
+ <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/sdo-cpp/trunk/samples/misc/deploy.bat b/sdo-cpp/trunk/samples/misc/deploy.bat
new file mode 100644
index 0000000000..fb2bec5a1f
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/deploy.bat
@@ -0,0 +1,52 @@
+@echo off
+
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+
+
+setlocal
+
+if . == .%1 (
+echo sample root not specified
+goto usage
+)
+set deploydir=%TUSCANY_SDOCPP%\samples\misc\deploy
+set srcdir=%1
+
+if . == .%2 (
+echo input directory not specified
+goto usage
+)
+set inpath=%2
+echo %inpath%
+
+if not exist %TUSCANY_SDOCPP%\samples mkdir %TUSCANY_SDOCPP%\samples
+if not exist %TUSCANY_SDOCPP%\samples\misc mkdir %TUSCANY_SDOCPP%\samples\misc
+if not exist %TUSCANY_SDOCPP%\samples\misc\deploy mkdir %TUSCANY_SDOCPP%\samples\misc\deploy
+if not exist %TUSCANY_SDOCPP%\samples\misc\deploy\bin mkdir %TUSCANY_SDOCPP%\samples\misc\deploy\bin
+copy %srcdir%\*.xsd %deploydir%
+copy %srcdir%\*.xml %deploydir%
+
+copy %inpath%\sdo_misc.exe %deploydir%\bin
+if exist %inpath%\sdo_misc.pdb copy %inpath%\sdo_misc.pdb %deploydir%\bin
+
+goto end
+:usage
+echo Usage: deploy <sample-root> <build-output>
+:end
+
+endlocal
diff --git a/sdo-cpp/trunk/samples/misc/samples.cpp b/sdo-cpp/trunk/samples/misc/samples.cpp
new file mode 100644
index 0000000000..4d1ee57c61
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/samples.cpp
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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$ */
+
+#include "samples.h"
+
+/**
+ * C main to run the sample
+ */
+
+int main (int argc, char** argv)
+{
+ ObjectCreation::sample();
+ XSDLoading::sample();
+ ChangeSummarySave::sample();
+ Substitutes::sample();
+ Query::sample();
+ return 0;
+}
diff --git a/sdo-cpp/trunk/samples/misc/samples.h b/sdo-cpp/trunk/samples/misc/samples.h
new file mode 100644
index 0000000000..f39cc910f7
--- /dev/null
+++ b/sdo-cpp/trunk/samples/misc/samples.h
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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$ */
+
+#pragma warning(disable:4786)
+
+#include "commonj/sdo/SDO.h"
+
+
+using namespace commonj::sdo;
+
+
+
+class ObjectCreation {
+ public:
+ static void sample();
+};
+
+class XSDLoading {
+ public:
+ static void sample();
+};
+
+class ChangeSummarySave {
+ public:
+ static void sample();
+};
+
+class Substitutes {
+ public:
+ static void sample();
+};
+
+class Query {
+ public:
+ static void sample();
+}; \ No newline at end of file