From c0a2dcce89b1f374fc1987753dd28c6541bbbfe5 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Mon, 16 Nov 2009 06:27:11 +0000 Subject: Cleaning up SVN structure, moving branch under sdo-cpp/branches. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880614 13f79535-47bb-0310-9956-ffa450edef68 --- .../samples/misc/ChangeSummarySave.cpp | 188 +++++++++++++++ .../samples/misc/ChangeSummarySave.xsd | 49 ++++ .../sdo-cpp-pre2.1/samples/misc/Makefile.am | 41 ++++ .../sdo-cpp-pre2.1/samples/misc/ObjectCreation.cpp | 251 +++++++++++++++++++++ .../branches/sdo-cpp-pre2.1/samples/misc/Query.cpp | 178 +++++++++++++++ .../sdo-cpp-pre2.1/samples/misc/Substitutes.cpp | 121 ++++++++++ .../sdo-cpp-pre2.1/samples/misc/VSExpress/misc.sln | 20 ++ .../misc/VSExpress/sdo_misc/sdo_misc.vcproj | 245 ++++++++++++++++++++ .../misc/VSExpress/sdo_misc/sdo_misc.vcproj.user | 65 ++++++ .../sdo-cpp-pre2.1/samples/misc/XSDLoading.cpp | 110 +++++++++ .../sdo-cpp-pre2.1/samples/misc/XSDLoading.xml | 30 +++ .../sdo-cpp-pre2.1/samples/misc/XSDLoading.xsd | 48 ++++ .../branches/sdo-cpp-pre2.1/samples/misc/build.bat | 40 ++++ .../sdo-cpp-pre2.1/samples/misc/companysubs.xsd | 63 ++++++ .../sdo-cpp-pre2.1/samples/misc/deploy.bat | 52 +++++ .../sdo-cpp-pre2.1/samples/misc/samples.cpp | 36 +++ .../branches/sdo-cpp-pre2.1/samples/misc/samples.h | 54 +++++ 17 files changed, 1591 insertions(+) create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ChangeSummarySave.cpp create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ChangeSummarySave.xsd create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Makefile.am create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ObjectCreation.cpp create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Query.cpp create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Substitutes.cpp create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/misc.sln create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.cpp create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xml create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xsd create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/build.bat create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/companysubs.xsd create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/deploy.bat create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/samples.cpp create mode 100644 sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/samples.h (limited to 'sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc') diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ChangeSummarySave.cpp b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ChangeSummarySave.cpp new file mode 100644 index 0000000000..5a27683807 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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/branches/sdo-cpp-pre2.1/samples/misc/ChangeSummarySave.xsd b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ChangeSummarySave.xsd new file mode 100644 index 0000000000..b626d6a45b --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ChangeSummarySave.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Makefile.am b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Makefile.am new file mode 100644 index 0000000000..7ebcc44c59 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Makefile.am @@ -0,0 +1,41 @@ +# 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 + +AM_CPPFLAGS = $(CPPFLAGS) +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/branches/sdo-cpp-pre2.1/samples/misc/ObjectCreation.cpp b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/ObjectCreation.cpp new file mode 100644 index 0000000000..0db919cc69 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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->setInteger("id",100); + + DataObjectPtr man1 = dep1->createDataObject("manager"); + man1->setCString("name","Herve Jones"); + + DataObjectPtr dep2= dor->createDataObject("departments"); + dep2->setCString("name","Marketing"); + dep2->setInteger("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;igetCString("name") << endl; + + DataObjectList& emps = depts[i]->getList("employees"); + + for (int j=0;jgetCString("name") << endl; + } + } + } + catch (SDORuntimeException e) + { + cout << "Exception in ObjectCreation" <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->setInteger("employeeNumber",65443); + emp1->setCString("name","Norman"); + + + emp2->setBoolean("isFullTime",false); + emp2->setInteger("employeeNumber",64778); + emp2->setCString("name","Carl"); + + emp3->setBoolean("isFullTime",true); + emp3->setInteger("employeeNumber",61990); + emp3->setCString("name","Amanda"); + + emp4->setBoolean("isFullTime",true); + emp4->setInteger("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." <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/branches/sdo-cpp-pre2.1/samples/misc/Substitutes.cpp b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/Substitutes.cpp new file mode 100644 index 0000000000..816caee2d5 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/misc.sln b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/misc.sln new file mode 100644 index 0000000000..a88518bbbd --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj new file mode 100644 index 0000000000..159d609f95 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user new file mode 100644 index 0000000000..5b786f64e5 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/VSExpress/sdo_misc/sdo_misc.vcproj.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.cpp b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.cpp new file mode 100644 index 0000000000..8462f80f21 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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;jgetErrorMessage(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;jgetErrorMessage(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;igetCString("name") << endl; + + DataObjectList& emps = depts[i]->getList("employees"); + + for (int j=0;jgetCString("name") << endl; + } + } + + } + catch (SDORuntimeException e) + { + cout << "Exception in XSD Loading test" << endl; + cout << e; + } + cout << " ********** Sample ends ********************" << endl; +} diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xml b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xml new file mode 100644 index 0000000000..29ac158654 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xml @@ -0,0 +1,30 @@ + + + + + + + +Jane Doe + + + + \ No newline at end of file diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xsd b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xsd new file mode 100644 index 0000000000..4b7270354c --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/XSDLoading.xsd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/build.bat b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/build.bat new file mode 100644 index 0000000000..c061d8329d --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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/branches/sdo-cpp-pre2.1/samples/misc/companysubs.xsd b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/companysubs.xsd new file mode 100644 index 0000000000..5b7e52ed9e --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/companysubs.xsd @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/deploy.bat b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/deploy.bat new file mode 100644 index 0000000000..fb2bec5a1f --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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 +:end + +endlocal diff --git a/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/samples.cpp b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/samples.cpp new file mode 100644 index 0000000000..4d1ee57c61 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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/branches/sdo-cpp-pre2.1/samples/misc/samples.h b/sdo-cpp/branches/sdo-cpp-pre2.1/samples/misc/samples.h new file mode 100644 index 0000000000..f39cc910f7 --- /dev/null +++ b/sdo-cpp/branches/sdo-cpp-pre2.1/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 -- cgit v1.2.3