summaryrefslogtreecommitdiffstats
path: root/sca-cpp/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp')
-rw-r--r--sca-cpp/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp3937
1 files changed, 3937 insertions, 0 deletions
diff --git a/sca-cpp/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp b/sca-cpp/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp
new file mode 100644
index 0000000000..9f547af4eb
--- /dev/null
+++ b/sca-cpp/tags/cpp-stable-20060304/sdo/runtime/core/test/sdotest2.cpp
@@ -0,0 +1,3937 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:31 $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+using namespace std;
+
+// #include "TypeImpl.h"
+
+#include "sdotest.h"
+
+
+
+using namespace commonj::sdo;
+
+void sdotest::eqhelpertest()
+{
+
+ // copy and equality helpers
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Assembly");
+ mdg->addType("myspace","SubAssembly");
+ mdg->addType("myspace","Part");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tassy = mdg->getType("myspace","Assembly");
+ const Type& tsubassy = mdg->getType("myspace","SubAssembly");
+ const Type& tpart = mdg->getType("myspace","Part");
+
+
+ mdg->addPropertyToType(tassy,"name",tstring);
+ mdg->addPropertyToType(tsubassy,"name",tstring);
+ mdg->addPropertyToType(tpart,"name",tstring);
+
+ mdg->addPropertyToType(tassy,"number",tint);
+ mdg->addPropertyToType(tsubassy,"number",tint);
+ mdg->addPropertyToType(tpart,"number",tint);
+
+ mdg->addPropertyToType(tassy,"subassemblies", tsubassy,true);
+ mdg->addPropertyToType(tsubassy,"parts", tpart,true);
+
+
+ // assy 1
+
+ DataObjectPtr assy1 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy1 = assy1->createDataObject("subassemblies");
+ DataObjectPtr subassy2 = assy1->createDataObject("subassemblies");
+
+ DataObjectPtr part1 = subassy1->createDataObject("parts");
+ DataObjectPtr part2 = subassy1->createDataObject("parts");
+ DataObjectPtr part3 = subassy1->createDataObject("parts");
+
+ DataObjectPtr part4 = subassy2->createDataObject("parts");
+ DataObjectPtr part5 = subassy2->createDataObject("parts");
+ DataObjectPtr part6 = subassy2->createDataObject("parts");
+
+
+ assy1->setCString("name","MicroFrame");
+ assy1->setInteger("number",32768);
+
+ subassy1->setCString("name","Legs");
+ subassy2->setCString("name","Body");
+ subassy1->setInteger("number",1);
+ subassy2->setInteger("number",2);
+
+ part1->setCString("name","Leg1");
+ part2->setCString("name","Leg2");
+ part3->setCString("name","Leg3");
+ part1->setInteger("number",10001);
+ part2->setInteger("number",10002);
+ part3->setInteger("number",10003);
+
+
+ part4->setCString("name","MainStrut");
+ part5->setCString("name","Brace1");
+ part6->setCString("name","Brace2");
+ part4->setInteger("number",20001);
+ part5->setInteger("number",20002);
+ part6->setInteger("number",20003);
+
+ // assy2 - shallow equal to assy, but not deep equal
+
+ DataObjectPtr assy2 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy3 = assy2->createDataObject("subassemblies");
+ DataObjectPtr subassy4 = assy2->createDataObject("subassemblies");
+
+ DataObjectPtr part7 = subassy3->createDataObject("parts");
+ DataObjectPtr part8 = subassy3->createDataObject("parts");
+ DataObjectPtr part9 = subassy3->createDataObject("parts");
+
+ DataObjectPtr part10 = subassy4->createDataObject("parts");
+ DataObjectPtr part11 = subassy4->createDataObject("parts");
+ DataObjectPtr part12 = subassy4->createDataObject("parts");
+
+
+ assy2->setCString("name","MicroFrame");
+ assy2->setInteger("number",32768);
+
+ subassy3->setCString("name","Legs");
+ subassy4->setCString("name","Body");
+ subassy3->setInteger("number",1);
+ subassy4->setInteger("number",2);
+
+ part7->setCString("name","Leg1");
+ part8->setCString("name","Leg2");
+ part9->setCString("name","Leg3");
+ part7->setInteger("number",10001);
+ part8->setInteger("number",10002);
+ part9->setInteger("number",10003);
+
+
+ part10->setCString("name","MainStrut");
+ part11->setCString("name","Brace1");
+ part12->setCString("name","OddBrace2");
+ part10->setInteger("number",20001);
+ part11->setInteger("number",20002);
+ part12->setInteger("number",20003);
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at first test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 1 passed" << endl;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at second test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 2 passed" << endl;
+ }
+
+ // Now alter assy2 to be deep equal...
+
+
+ part12->setCString("name","Brace2");
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at third test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 3 passed" << endl;
+ }
+ if (!EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at fourth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 4 passed" << endl;
+ }
+
+ // now add a part, so its not deep equal again
+ DataObjectPtr part13 = subassy4->createDataObject("parts");
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at fifth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 5 passed" << endl;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at sixth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 6 passed" << endl;
+ }
+
+ // now remove that part again...
+ DataObjectList& dl = subassy4->getList("parts");
+ dl.remove(3);
+
+ // should be deep equal again...
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at seventh test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 7 passed" << endl;
+ }
+ if (!EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at eighth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 8 passed" << endl;
+ }
+ // now make them not shallow equal
+ assy2->setInteger("number",32767);
+
+ if (EqualityHelper::equalShallow(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at nineth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 9 passed" << endl;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ cout << "EQUALITY HELPER TEST - failure at tenth test" << endl;
+ }
+ else
+ {
+ cout << "Equality Helper test 10 passed" << endl;
+ }
+
+}
+
+void sdotest::cohelpertest()
+{
+
+ // copy and equality helpers
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Assembly");
+ mdg->addType("myspace","SubAssembly");
+ mdg->addType("myspace","Part");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tassy = mdg->getType("myspace","Assembly");
+ const Type& tsubassy = mdg->getType("myspace","SubAssembly");
+ const Type& tpart = mdg->getType("myspace","Part");
+
+
+ mdg->addPropertyToType(tassy,"name",tstring);
+ mdg->addPropertyToType(tsubassy,"name",tstring);
+ mdg->addPropertyToType(tpart,"name",tstring);
+
+ mdg->addPropertyToType(tassy,"number",tint);
+ mdg->addPropertyToType(tsubassy,"number",tint);
+ mdg->addPropertyToType(tpart,"number",tint);
+
+ mdg->addPropertyToType(tassy,"subassemblies", tsubassy,true);
+ mdg->addPropertyToType(tsubassy,"parts", tpart,true);
+
+
+ // assy 1
+
+ DataObjectPtr assy1 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy1 = assy1->createDataObject("subassemblies");
+ DataObjectPtr subassy2 = assy1->createDataObject("subassemblies");
+
+ DataObjectPtr part1 = subassy1->createDataObject("parts");
+ DataObjectPtr part2 = subassy1->createDataObject("parts");
+ DataObjectPtr part3 = subassy1->createDataObject("parts");
+
+ DataObjectPtr part4 = subassy2->createDataObject("parts");
+ DataObjectPtr part5 = subassy2->createDataObject("parts");
+ DataObjectPtr part6 = subassy2->createDataObject("parts");
+
+
+ assy1->setCString("name","MicroFrame");
+ assy1->setInteger("number",32768);
+
+ subassy1->setCString("name","Legs");
+ subassy2->setCString("name","Body");
+ subassy1->setInteger("number",1);
+ subassy2->setInteger("number",2);
+
+ part1->setCString("name","Leg1");
+ part2->setCString("name","Leg2");
+ part3->setCString("name","Leg3");
+ part1->setInteger("number",10001);
+ part2->setInteger("number",10002);
+ part3->setInteger("number",10003);
+
+
+ part4->setCString("name","MainStrut");
+ part5->setCString("name","Brace1");
+ part6->setCString("name","Brace2");
+ part4->setInteger("number",20001);
+ part5->setInteger("number",20002);
+ part6->setInteger("number",20003);
+
+ // first lets shallow copy assy1:
+
+ DataObjectPtr assy2 = CopyHelper::copyShallow(assy1);
+
+ if (strcmp(assy2->getCString("name"),"MicroFrame"))
+ {
+ cout << "COPYHELPER shallow copy failed(1)" << endl;
+ }
+ else if (assy2->getInteger("number") != 32768)
+ {
+ cout << "COPYHELPER shallow copy 1 failed(2)" << endl;
+ }
+ else if (assy2->getList("subassemblies").size() != 0)
+ {
+ cout << "COPYHELPER shallow copy 1 failed(3)" << endl;
+ }
+ else if (assy2->getContainer() != 0)
+ {
+ cout << "COPYHELPER shallow copy failed(4)" << endl;
+ }
+ else
+ {
+ cout << "CopyHelper test1 passed" << endl;
+ }
+
+ // now deep copy it
+
+ DataObjectPtr assy3 = CopyHelper::copy(assy1);
+
+ if (!EqualityHelper::equal(assy1, assy3))
+ {
+ cout << "COPYHELPER deep copy failed(1)" << endl;
+ }
+ else if (assy3->getContainer() != 0)
+ {
+ cout << "COPYHELPER deep copy failed(2)" << endl;
+ }
+ else
+ {
+ cout << "CopyHelper test 2 passed" << endl;
+ }
+
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+///test code for serialization...........
+/////////////////////////////////////////////////////////////////////////////
+//
+//bool sdotest::serializeOldSingleValues(int indent, ChangeSummaryPtr cs, DataObjectPtr dol)
+//{
+// bool onlySingle = true;
+// SettingList& sl = cs->getOldValues(dol);
+// if (sl.size() == 0)
+// {
+// return onlySingle;
+// }
+//
+// for (int k=0;k<indent;k++)cout << " ";
+//
+// for (int j=0;j< sl.size(); j++)
+// {
+// if (sl[j].getProperty().isMany())
+// {
+// onlySingle = false;
+// continue;
+// }
+//
+// cout << " " << sl[j].getProperty().getName() << "=";
+//
+// switch (sl[j].getProperty().getTypeEnum())
+// {
+// case Type::BooleanType:
+// cout << "\"" << sl[j].getBooleanValue() << "\"";
+// break;
+// case Type::ByteType:
+// cout << "\"" << sl[j].getByteValue() << "\"";
+// break;
+// case Type::CharacterType:
+// cout << "\"" << sl[j].getCharacterValue() << "\"";
+// break;
+// case Type::IntegerType:
+// cout << "\"" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::ShortType:
+// cout << "\"" << sl[j].getShortValue() << "\"";
+// break;
+// case Type::DoubleType:
+// cout << "\"" << sl[j].getDoubleValue() << "\"";
+// break;
+// case Type::FloatType:
+// cout << "\"" << sl[j].getFloatValue() << "\"";
+// break;
+// case Type::LongType:
+// cout << "\"!" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::DateType:
+// cout << "\"" << sl[j].getDateValue().ascTime() << "\"";
+// break;
+// case Type::BigDecimalType:
+// case Type::BigIntegerType:
+// case Type::StringType:
+// case Type::UriType:
+// cout << "\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::BytesType:
+// cout << "\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::OtherTypes:
+// case Type::DataObjectType:
+// case Type::ChangeSummaryType:
+// {
+// DataObjectPtr dob = sl[j].getDataObjectValue();
+// if (!dob)
+// {
+// cout << "";
+// }
+// else
+// {
+// if (cs->isDeleted(dob))
+// {
+// cout << "\"" << cs->getOldXpath(dob) << "\"";
+// }
+// else
+// {
+// cout << "\"" << dob->objectToXPath() << "\"";
+// }
+// }
+// }
+// break;
+// default:
+// {
+// }
+// break;
+// }
+// }
+// return onlySingle;
+//}
+//
+//
+//
+//
+//void sdotest::serializeOldManyValues(int indent, ChangeSummaryPtr cs, DataObjectPtr dol)
+//{
+// SettingList& sl = cs->getOldValues(dol);
+// if (sl.size() == 0)
+// {
+// return;
+// }
+// for (int j=0;j< sl.size(); j++)
+// {
+// if (!sl[j].getProperty().isMany()) continue;
+//
+// for (int k=0;k<indent;k++)cout << " ";
+//
+// cout << "<" ;
+// cout << sl[j].getProperty().getName() << " ";
+//
+// switch (sl[j].getProperty().getTypeEnum())
+// {
+// case Type::BooleanType:
+// cout << " value=\"" << sl[j].getBooleanValue() << "\"";
+// break;
+// case Type::ByteType:
+// cout << " value=\"" << sl[j].getByteValue() << "\"";
+// break;
+// case Type::CharacterType:
+// cout << " value=\"" << sl[j].getCharacterValue() << "\"";
+// break;
+// case Type::IntegerType:
+// cout << " value=\"" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::ShortType:
+// cout << " value=\"" << sl[j].getShortValue() << "\"";
+// break;
+// case Type::DoubleType:
+// cout << " value=\"" << sl[j].getDoubleValue() << "\"";
+// break;
+// case Type::FloatType:
+// cout << " value=\"" << sl[j].getFloatValue() << "\"";
+// break;
+// case Type::LongType:
+// cout << " value=\"" << "!" << sl[j].getIntegerValue() << "\"";
+// break;
+// case Type::DateType:
+// cout << " value=\"" << sl[j].getDateValue().getTime() << "\"";
+// break;
+// case Type::BigDecimalType:
+// case Type::BigIntegerType:
+// case Type::StringType:
+// case Type::UriType:
+// cout << " value=\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::BytesType:
+// cout << " value=\"" << sl[j].getCStringValue() << "\"";
+// break;
+// case Type::OtherTypes:
+// case Type::DataObjectType:
+// case Type::ChangeSummaryType:
+// {
+// DataObjectPtr dob = sl[j].getDataObjectValue();
+// if (!dob)
+// {
+// // what to do?;
+// }
+// else
+// {
+// if (cs->isDeleted(dob))
+// {
+// // TODO
+// cout << " sdo:ref=\"" << "deleted" << "\"";
+// }
+// else
+// {
+// cout << " sdo:ref=\"" << dob->objectToXPath() << "\"";
+// }
+// }
+// }
+// break;
+// default:
+// {
+// }
+// break;
+// } // switch
+// cout << "/>" << endl;
+// } // for
+//}
+//
+//
+//
+//void sdotest::serializechangesummary(ChangeSummaryPtr cs)
+//{
+// changeSummaryHeader(cs);
+//
+// ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+//
+// for (i=0;i< cdol.size();i++)
+// {
+// if (cs->isModified(cdol[i]))
+// {
+// changeSummaryChange(cs,cdol[i]);
+// }
+// }
+//
+// changeSummaryFooter();
+//
+//}
+//
+///////////////////////////////////////////////////////////////////////////////
+/////end code for serialization...........
+///////////////////////////////////////////////////////////////////////////////
+//
+//
+
+
+bool sdotest::changeSummaryAttributes(ChangeSummaryPtr cs, DataObjectPtr dol)
+{
+ bool onlySingle = true;
+ SettingList& sl = cs->getOldValues(dol);
+ if (sl.size() == 0)
+ {
+ return onlySingle;
+ }
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ if (sl[j].getProperty().isMany())
+ {
+ onlySingle = false;
+ continue;
+ }
+
+ cout << " " << sl[j].getProperty().getName() << "=\"";
+
+ if (sl[j].getProperty().getType().isDataType())
+ {
+ changeSummarySetting(sl[j]);
+ }
+ else
+ {
+ DataObjectPtr dob = sl[j].getDataObjectValue();
+ if (dob)
+ {
+ if (cs->isDeleted(dob))
+ {
+ cout << cs->getOldXpath(dob);
+ }
+ else
+ {
+ cout << dob->objectToXPath();
+ }
+ }
+ }
+ cout << "\" ";
+ }
+ return onlySingle;
+}
+
+
+void sdotest::changeSummarySetting(Setting& s)
+{
+
+ switch (s.getProperty().getTypeEnum())
+ {
+ case Type::BooleanType:
+ cout << s.getCStringValue();
+ break;
+ case Type::ByteType:
+ cout << s.getByteValue();
+ break;
+ case Type::CharacterType:
+ cout << s.getCharacterValue();
+ break;
+ case Type::IntegerType:
+ cout << s.getIntegerValue();
+ break;
+ case Type::ShortType:
+ cout << s.getShortValue();
+ break;
+ case Type::DoubleType:
+ cout << s.getDoubleValue();
+ break;
+ case Type::FloatType:
+ cout << s.getFloatValue();
+ break;
+ case Type::LongType:
+ cout << s.getIntegerValue();
+ break;
+ case Type::DateType:
+ cout << s.getDateValue().getTime();
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ cout << s.getCStringValue();
+ break;
+ case Type::BytesType:
+ cout << s.getCStringValue();
+ break;
+ default:
+ break;
+ } // switch
+}
+
+
+void sdotest::changeSummaryElements(int indent, ChangeSummaryPtr cs, DataObjectPtr dob)
+{
+ SettingList& sl = cs->getOldValues(dob);
+
+ if (sl.size() == 0)
+ {
+ // there are no setting for this element.
+ return;
+ }
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ // single values will have been covered by the attributes.
+ if (!sl[j].getProperty().isMany()) continue;
+
+ if (sl[j].getProperty().getType().isDataType())
+ {
+
+ // indent the line
+ for (int k=0;k<indent;k++)cout << " ";
+
+ cout << "<" << sl[j].getProperty().getName() << ">\"";
+
+ changeSummarySetting(sl[j]);
+
+ cout << "\"</" << sl[j].getProperty().getName() << ">" << endl;
+ } // if datatype
+ else
+ {
+ DataObjectPtr dob2 = sl[j].getDataObjectValue();
+ if (!dob2)
+ {
+ return;
+ }
+ if (cs->isDeleted(dob2))
+ {
+ changeSummaryDeletedObject(indent,sl[j].getProperty().getName(), cs,dob2);
+ }
+ else
+ {
+ // indent the line
+ for (int k=0;k<indent;k++)cout << " ";
+ cout << "<" << sl[j].getProperty().getName();
+ cout << " sdo:ref=\"" << dob2->objectToXPath() << "\"/>" << endl;
+ }
+ }
+ } // for
+}
+
+
+
+void sdotest::changeSummaryDeletedObject(int indent, const char* name, ChangeSummaryPtr cs, DataObjectPtr dob)
+{
+
+ bool elements = false; // are there any elements to process?
+ int ind;
+
+ // indent the line
+ for (ind=0;ind<indent;ind++)cout << " ";
+
+ cout << "<" << name;
+
+ SettingList& sl = cs->getOldValues(dob);
+
+ if (sl.size() == 0)
+ {
+ // there are no setting for this element.
+ cout << "/>";
+ return;
+ }
+
+ cout << " ";
+
+ // print single valued datatypes as attributes
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ // single values will have been covered by the attributes.
+ if ( sl[j].getProperty().isMany())
+ {
+ elements = true;
+ continue;
+ }
+ if (!sl[j].getProperty().getType().isDataType())
+ {
+ elements = true;
+ continue;
+ }
+
+ cout << sl[j].getProperty().getName() << "=\"";
+
+ changeSummarySetting(sl[j]);
+
+ cout << "\" ";
+ } // for attributes
+
+ if (!elements)
+ {
+ cout << "/>" << endl;
+ return;
+ }
+
+ // now we are onto the many-values, and dataobject single values.
+ for (int k=0;k< sl.size(); k++)
+ {
+ if ( !sl[k].getProperty().getType().isDataType())
+ {
+ // its a dataobject type
+ DataObjectPtr dob2 = sl[k].getDataObjectValue();
+ if (!dob2) continue;
+ if (!cs->isDeleted(dob2)) continue;
+ changeSummaryDeletedObject(indent+1,sl[k].getProperty().getName(),cs,dob2);
+ }
+ else
+ {
+ // could only be many valued data type
+
+ for (ind=0;ind<indent;ind++)cout << " ";
+ cout << "<" << sl[k].getProperty().getName() << ">\"";
+
+ changeSummarySetting(sl[k]);
+
+ cout << "</" << sl[k].getProperty().getName() << ">" << endl;
+ }
+ } // for attributes
+
+ // indent the line
+ for (ind=0;ind<indent;ind++)cout << " ";
+ cout << "</" << name << ">" << endl;
+}
+
+
+
+void sdotest::changeSummaryHeader(ChangeSummaryPtr cs)
+{
+ int i;
+
+ ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+
+ cout << "<changeSummary ";
+
+ if (cs->isLogging())
+ {
+ cout << " logging=\"true\" ";
+ }
+
+ cout << ">" << endl;
+
+
+ for (i=0;i< cdol.size();i++)
+ {
+ if (cs->isCreated(cdol[i]) && cdol.getType(i) == ChangedDataObjectList::Change)
+ {
+ cout << " <create>";
+ // TODO is there an IDREF for this created/deleted object?
+ DataObject* temp = cdol[i];
+ cout << ((DataObject*)temp)->objectToXPath();
+ cout << "</create>" << endl;
+ }
+ if (cs->isDeleted(cdol[i]) && cdol.getType(i) == ChangedDataObjectList::Delete)
+ {
+ cout << " <delete>";
+ // TODO is there an IDREF for this created/deleted object?
+ const char* path = cs->getOldXpath(cdol[i]);
+ if (path != 0)
+ {
+ cout << path;
+ }
+ cout << "</delete>" << endl;
+ }
+ }
+}
+
+void sdotest::changeSummaryFooter()
+{
+ cout << "</changeSummary>" << endl;
+}
+
+
+void sdotest::changeSummaryChange(int level, ChangeSummaryPtr cs, DataObjectPtr dob)
+{
+ DataObject* temp = dob;
+
+ // indent by level.
+ for (int l=0;l<level;l++)cout << " ";
+
+ cout << "<";
+
+ try
+ {
+ cout << temp->getContainmentProperty().getName();
+ }
+ catch (SDORuntimeException e)
+ {
+ // the object which was changed has no name,
+ // so its the root object of a data object tree.
+ cout << "root";
+ }
+
+ cout << " ";
+
+ try
+ {
+ cout << "sdo:ref=\"" << temp->objectToXPath() << "\" ";
+ }
+ catch (SDORuntimeException e)
+ {
+ // TODO there was no xpath - thats not good
+ }
+
+ // returns true if there were only single values - attributes only.
+ if (changeSummaryAttributes(cs, temp))
+ {
+ cout << "/>" << endl;
+ return;
+ }
+
+ // there are some elements
+ cout << ">" << endl;
+
+
+ changeSummaryElements(level+1, cs, temp);
+
+
+ // indent by level.
+
+ for (int m=0;m<level;m++)cout << " ";
+ cout << "</";
+
+ try
+ {
+ cout << temp->getContainmentProperty().getName();
+ }
+ catch (SDORuntimeException e)
+ {
+ // the object which was changed has no name,
+ // so its the root object of a data object tree.
+ cout << "root";
+ }
+
+ cout << ">" << endl;
+
+}
+
+
+
+void sdotest::serializeChangeSummary(ChangeSummaryPtr cs)
+{
+ changeSummaryHeader(cs);
+
+ ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+
+ for (int i=0;i< cdol.size();i++)
+ {
+ if (cs->isModified(cdol[i]))
+ {
+ changeSummaryChange(1, cs,cdol[i]);
+ }
+ }
+
+ changeSummaryFooter();
+}
+
+
+void sdotest::cssave()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ //mdg->addType("companyNS","CompanyType");
+ //mdg->addType("companyNS","EmployeeType");
+ //mdg->addType("companyNS","DepartmentType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ //mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ //mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ //mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ //mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ //mdg->addPropertyToType(tdept,"name",tstring);
+ //mdg->addPropertyToType(tdept,"location",tstring);
+ //mdg->addPropertyToType(tdept,"number",tstring);
+ //mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ //mdg->addPropertyToType(temp, "name",tstring);
+ //mdg->addPropertyToType(temp, "SN", tstring);
+ //mdg->addPropertyToType(temp, "manager", tbool);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","John Jones");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Mary Smith");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Jane Doe");
+ emp3->setCString("SN","E0003");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr emp4 = mdg->create(temp);
+ emp4->setCString("name","Al Smith");
+ emp4->setCString("SN","E0004");
+ emp4->setBoolean("manager",true);
+
+ // first change - create employee 4
+ dol2.append(emp4);
+
+ dol2.remove(1); // element 1 is Mary
+
+ DataObjectPtr emp5 = mdg->create(temp);
+ emp5->setCString("name","Bill Withers");
+ emp5->setCString("SN","E0005");
+
+ dol2.append(emp5);
+
+
+ comp->setCString("name","MegaCorp");
+ comp->setDataObject("employeeOfTheMonth",emp4);
+
+ // silly test - add mary back again
+ dol2.append(emp2);
+
+ // and why not delete her again?
+ //dol2.remove(4);
+
+
+
+ cs->endLogging();
+
+ //serializeChangeSummary(cs);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"cssave-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "CSSAVE FAILED" << e << endl;
+ }
+}
+
+void sdotest::cssave2()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Eastleigh Borough Council");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Waste Disposal");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+ DataObjectPtr emp4 = mdg->create(temp);
+ DataObjectPtr emp5 = mdg->create(temp);
+
+ emp1->setCString("name","Alphonse Dodet");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Bridget Jones");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Colin Thorne");
+ emp3->setCString("SN","E0003");
+
+ emp4->setCString("name","Donald Trump");
+ emp4->setCString("SN","E0004");
+
+ emp5->setCString("name","Eddy the eagle");
+ emp5->setCString("SN","E0005");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+ dol2.append(emp4);
+ dol2.append(emp5);
+
+ //comp->setDataObject("employeeOfTheMonth",emp2);
+
+ DataObjectPtr dept2 = mdg->create((Type&)tdept);
+ dol.append(dept2);
+
+ dept2->setCString("name","Tax Collection");
+ dept2->setCString("location","Winchester");
+ dept2->setCString("number","666");
+
+ DataObjectPtr empb1 = mdg->create(temp);
+ DataObjectPtr empb2 = mdg->create(temp);
+ DataObjectPtr empb3 = mdg->create(temp);
+ DataObjectPtr empb4 = mdg->create(temp);
+ DataObjectPtr empb5 = mdg->create(temp);
+
+ empb1->setCString("name","Arch Meanie");
+ empb1->setCString("SN","D0001");
+
+ empb2->setCString("name","Boris the Spider");
+ empb2->setCString("SN","D0002");
+ empb2->setBoolean("manager",true);
+
+ empb3->setCString("name","Cash Hoarder");
+ empb3->setCString("SN","D0003");
+
+ empb4->setCString("name","Dean Giyatoss");
+ empb4->setCString("SN","D0004");
+
+ empb5->setCString("name","Ebenezer Scrooge");
+ empb5->setCString("SN","D0005");
+
+ DataObjectList& dol3 = dept2->getList("employees");
+ dol3.append(empb1);
+ dol3.append(empb2);
+ dol3.append(empb3);
+ dol3.append(empb4);
+ dol3.append(empb5);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ // start by deleting a few employees from dept 1
+
+ dol2.remove(1); // B
+ dol2.remove(1); // C
+ dol2.remove(1); // D
+
+ // Now delete the tax collectors as a whole
+
+ dol.remove(1);
+
+ // now perhaps add back one of the employees
+
+ dol2.append(emp3); // C
+
+ comp->setCString("name","MegaCorp");
+
+ try {
+ comp->setDataObject("employeeOfTheMonth",emp4);
+ cout << "THIS ISNT RIGHT - emp4 was nolt in the tree" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ comp->setDataObject("employeeOfTheMonth",emp5);
+
+ cs->endLogging();
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"cssave2-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "CSSAVE FAILED" << e << endl;
+ }
+}
+
+void sdotest::bug45933()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","WombatType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& twom = mdg->getType("companyNS","WombatType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"bools",tbool, true);
+ mdg->addPropertyToType(tcomp,"woms",twom, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Bug45933");
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectList& dol = comp->getList("bools");
+ dol.append(false);
+ dol.remove(0);
+ DataObjectPtr awom = mdg->create((Type&)twom);
+ DataObjectList& dol2 = comp->getList("woms");
+ dol2.append(awom);
+ dol2.remove(0);
+
+ cs->endLogging();
+
+ dumpchangesummary(cs);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"bug45933-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "BUG45933 FAILED" << endl << e << endl;
+ }
+}
+
+void sdotest::b46617()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ //XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ //xsh->defineFile("b46617.xsd");
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","DepartmentType");
+ mdg->addType("companyNS","EmployeeType");
+
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"departments",tdept,true,false,true);
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp,false,false,false);
+ mdg->addPropertyToType(tcomp,"CEO",temp,false,false,true);
+
+ mdg->addPropertyToType(tdept,"employees",temp,true,false,true);
+ mdg->addPropertyToType(tdept,"name",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"location",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"number",tstring,false,false,true);
+
+ mdg->addPropertyToType(temp,"name",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"SN",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"manager",tbool,false,false,true);
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Eastleigh Borough Council");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Waste Disposal");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","Alphonse Dodet");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Bridget Jones");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl Marx");
+ emp3->setCString("SN","E0003");
+
+ comp->setDataObject("CEO",emp2);
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ //dol2.append(emp2);
+ dol2.append(emp3);
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ XSDHelperPtr xmd = HelperProvider::getXSDHelper(mdg);
+ xmd->generateFile(mdg->getTypes(),
+ "b46617.xsd","companyNS");
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"b46617.xml");
+
+ // now try loading the xml, using the same schema, and see if we get the
+ // same answer
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46617.xml", "companyNS");
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+ cout << "EOMS name is "
+ << newdob->getDataObject("employeeOfTheMonth")->getCString("name")
+ << endl;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46617 failed" << e << endl;
+ }
+}
+
+void sdotest::b46617b()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("b46617b.xsd");
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46617b.xml", "companyNS");
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+ cout << "EOMS name is "
+ << newdob->getDataObject("employeeOfTheMonth")->getCString("name")
+ << endl;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46617b failed" << e << endl;
+ }
+}
+
+void sdotest::notfound()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ try {
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("not_present.xsd");
+ }
+ catch (SDOFileNotFoundException e)
+ {
+ cout << "NotFound threw correct exception " << endl;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << "NOTFOUND THREW THE WRONG EXCEPTION" << e << endl;
+ }
+
+ try {
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("not-present.xml", "companyNS");
+
+ }
+ catch (SDOFileNotFoundException ee)
+ {
+ cout << "NotFound threw the correct exception" << endl;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << "NOTFOUND THREW THE WRONG EXCEPTION" << e << endl;
+ }
+}
+
+void sdotest::csload()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+
+ TypeList tl = mdg->getTypes();
+ for (int i=0;i< tl.size(); i++)
+ {
+ cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ }
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("cssave-output.xml", "companyNS");
+ //myXMLDocument->setRootElementName("company");
+ //myXMLHelper->save(myXMLDocument,"csload-output.xml");
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "csload-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "CSLOAD FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::testsubsload()
+{
+ cout << "TEST: TestSubsLoad ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companysubs.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANYSUBS XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ // so now we should be able to put book or a magazine into
+ // the publication under company...
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+ // inherted from publication
+ book1->setCString("title","Nowhere Man");
+
+ DataObjectPtr mag1 = mdg->create(mag);
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+
+
+ // publication should accept any of them...
+
+ comp->setDataObject("Publication",pub1);
+ const Type& tpub1 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub1.getName() << endl;
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub2.getName() << endl;
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub3.getName() << endl;
+
+ // should be able to address publication as book or magazine
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ cout << "Book is of type " << tpub4.getName() << endl;
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ cout << "Magazine is of type " << tpub5.getName() << endl;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in TeseSubsLoad" << e << endl;
+ }
+ cout << "END TEST: TestSubsLoad ======================================" << endl;
+}
+
+void sdotest::testSCA()
+{
+ cout << "TEST: TestSCA ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("sca.xsd");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in TeseSCA" << e << endl;
+ }
+ cout << "END TEST: TestSCA ======================================" << endl;
+}
+
+void sdotest::testabstract()
+{
+ cout << "TEST: TestAbstract ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companyabs.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANYABS XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ // so now we should be able to put book or a magazine into
+ // the publication under company...
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+ // should be allowed...
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+ // inherted from publication
+ book1->setCString("title","Nowhere Man");
+
+ DataObjectPtr mag1 = mdg->create(mag);
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+ try {
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+ }
+ catch (SDOUnsupportedOperationException e)
+ {
+ cout << "Normal unsupportedoperation for creation of abstract type" << endl;
+ }
+
+
+ // publication should accept books and magazines...
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub2.getName() << endl;
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is of type " << tpub3.getName() << endl;
+
+ // should be able to address publication as book or magazine
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ cout << "Book is of type " << tpub4.getName() << endl;
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ cout << "Magazine is of type " << tpub5.getName() << endl;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in TestAbstract" << e << endl;
+ }
+ cout << "END TEST: TestAbstract ======================================" << endl;
+}
+
+void sdotest::testOpen()
+{
+ cout << "TEST: TestOpen ==========================================" << endl;
+ //try
+ //{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ // now we should be able to add extra properties to employees,
+ // and get them back again...
+
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ cout << "Open Type string value: " << c << endl;
+
+ bool b = emp1->getBoolean("openboolean");
+
+ cout << "Open Type boolean value: " << b << endl;
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("opentypelist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive
+
+ // we should now have instance properties
+ PropertyList pl = emp1->getType().getProperties();
+
+ for (i=0;i<pl.size();i++)
+ {
+ cout << "EMP1 type property: " << pl[i].getName() << "( many? " <<
+ pl[i].isMany() << ")" << " of type " <<
+ pl[i].getType().getName() << endl;
+ }
+
+ PropertyList pli = emp1->getInstanceProperties();
+
+ for (i=0;i<pli.size();i++)
+ {
+ cout << "EMP1 inst property: " << pli[i].getName() << "( many? " <<
+ pli[i].isMany() << ")" << " of type " <<
+ pli[i].getType().getName() << endl;
+ }
+
+ // now unset them and see them disappear - what happens to the indices?
+
+ emp1->unset("openstring");
+
+ PropertyList plk = emp1->getInstanceProperties();
+
+ for (i=0;i<plk.size();i++)
+ {
+ cout << "EMP1 inst property: " << plk[i].getName() << "( many? " <<
+ plk[i].isMany() << ")" << " of type " <<
+ plk[i].getType().getName() << endl;
+ }
+
+ emp1->unset("openboolean");
+
+ dl.remove(0); // so is this list gone, or empty - I vote for still there.
+
+ PropertyList pll = emp1->getInstanceProperties();
+ for (i=0;i<pll.size();i++)
+ {
+ cout << "EMP1 inst property: " << pll[i].getName() << "( many? " <<
+ pll[i].isMany() << ")" << " of type " <<
+ pll[i].getType().getName() << endl;
+ }
+
+ emp1->unset("opentypelist");
+
+ // now I vote for gone...
+
+ PropertyList plm = emp1->getInstanceProperties();
+ for (i=0;i<plm.size();i++)
+ {
+ cout << "EMP1 inst property: " << plm[i].getName() << "( many? " <<
+ plm[i].isMany() << ")" << " of type " <<
+ plm[i].getType().getName() << endl;
+ }
+
+ //}
+ //catch (SDORuntimeException e)
+ //{
+ // cout << "ERROR in TestOpen" << e << endl;
+ //}
+ cout << "END TEST: TestOpen ======================================" << endl;
+}
+
+void sdotest::saveOpen()
+{
+ cout << "TEST: SaveOpen ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ mdg->addType("companyNS","OpenType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+ const Type& topen = mdg->getType("companyNS","OpenType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+ mdg->setAlias("companyNS","CompanyType","TheFirm");
+ mdg->setAlias("companyNS","CompanyType","departments","TheDepartments");
+ mdg->setAlias("companyNS","CompanyType","departments","MYDepartments");
+ mdg->setAlias("companyNS","CompanyType","TheBigFirm");
+
+ mdg->addPropertyToType(topen,"name",tstring);
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectList& emps = dept->getList("employees");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emps.append(emp1);
+ emps.append(emp2);
+ emps.append(emp3);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ // now we should be able to add extra properties to employees,
+ // and get them back again...
+
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ cout << "Open Type string value: " << c << endl;
+
+ bool b = emp1->getBoolean("openboolean");
+
+ cout << "Open Type boolean value: " << b << endl;
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("openintlist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive and short!!
+
+ // unknown list type at present..
+ DataObjectList& dl2 = emp1->getList("opendataobjectlist");
+
+ DataObjectPtr myopen = mdg->create("companyNS","OpenType");
+ myopen->setCString("name","MyOpenName");
+ dl2.append(myopen); // now the list must be of data objects
+
+
+ // now a single valued data object - should have an xsi:type
+ emp1->setDataObject("opendataobject", myopen);
+
+
+ cs->endLogging();
+
+ dumpchangesummary(cs);
+
+ XSDHelperPtr xdh = HelperProvider::getXSDHelper(mdg);
+
+ xdh->generateFile(mdg->getTypes(),
+ "saveopen-output.xsd","companyNS");
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"saveopen-output.xml");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in SaveOpen" << e << endl;
+ }
+ cout << "END TEST: SaveOpen ======================================" << endl;
+}
+
+void sdotest::loadOpen()
+{
+ cout << "TEST: LoadOpen ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("saveopen-output.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("partial.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+ if (strcmp(emp->getProperty("openboolean").getType().getName(),
+ "Boolean"))
+ {
+ cout << "OpenLoad failure - bool property not boolean" << endl;
+
+ }
+ if (emp->getBoolean("openboolean") != true)
+ {
+ cout << "OpenLoad failure - bool property not true" << endl;
+ }
+
+ if (strcmp(emp->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoad failure - bytes property not bytes" << endl;
+
+ }
+ if (strcmp(emp->getCString("openstring"),"Value Of Open String"))
+ {
+ cout << "OpenLoad failure - string value is" <<
+ emp->getCString("openstring") << endl;
+ }
+
+
+ DataObjectList& dl3 = emp->getList("openintlist");
+
+ if (strcmp(emp->getProperty("openintlist").getType().getName(),
+ "Short"))
+ {
+ cout << "OpenLoad failure - IntegerList not Short " <<
+ emp->getProperty("openintlist").getType().getName() << endl;
+ }
+
+ if (dl3.getInteger(0) != 45)
+ {
+ cout << "OpenLoad failure - Integer value is" <<
+ dl.getInteger(0) << endl;
+ }
+
+ if (strcmp(emp->getProperty("opendataobjectlist").getType().getName(),
+ "OpenType"))
+ {
+ cout << "OpenLoad failure - OpenTypeList not OpenType" << endl;
+ }
+
+ DataObjectList& dl4 = emp->getList("opendataobjectlist");
+
+ if (strcmp(dl4[0]->getCString("name"),"MyOpenName"))
+ {
+ cout << "OpenLoad failure - list element name is " <<
+ dl4[0]->getCString("name") << endl;
+ }
+
+ if (strcmp(emp->getProperty("opendataobject").getType().getName(),
+ "OpenType"))
+ {
+ cout << "OpenLoad failure - OpenType not OpenType" << endl;
+ }
+
+ DataObjectPtr dob2 = emp->getDataObject("opendataobject");
+
+ if (strcmp(dob2->getCString("name"),"MyOpenName"))
+ {
+ cout << "OpenLoad failure - open value name is " <<
+ dob2->getCString("name") << endl;
+ }
+
+
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "loadload-output.xml");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "LoadOpen FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::loadOpenNS()
+{
+ cout << "TEST: LoadOpenNS ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("openloadNS.xsd");
+ xsh->defineFile("openloadNS2.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("openloadNS.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+ if (strcmp(emp->getProperty("openboolean").getType().getName(),
+ "Boolean"))
+ {
+ cout << "OpenLoadNS failure - bool property not boolean" << endl;
+
+ }
+ if (emp->getBoolean("openboolean") != true)
+ {
+ cout << "OpenLoadNS failure - bool property not true" << endl;
+ }
+
+ if (strcmp(emp->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS failure - bytes property not bytes" << endl;
+
+ }
+ if (strcmp(emp->getCString("openstring"),"Value Of Open String"))
+ {
+ cout << "OpenLoadNS failure - string value is" <<
+ emp->getCString("openstring") << endl;
+ }
+
+
+ DataObjectList& dl3 = emp->getList("openintlist");
+
+ if (strcmp(emp->getProperty("openintlist").getType().getName(),
+ "Short"))
+ {
+ cout << "OpenLoadNS failure - IntegerList not Short " <<
+ emp->getProperty("openintlist").getType().getName() << endl;
+ }
+
+ if (dl3.getInteger(0) != 45)
+ {
+ cout << "OpenLoadNS failure - Integer value is" <<
+ dl.getInteger(0) << endl;
+ }
+
+
+
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "openloadNSout.xml");
+
+
+ // now try exactly the same, but with NS which doesnt exist
+ XMLDocumentPtr myXMLDocument2 = myXMLHelper->loadFile("openloadNS2.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp2 = myXMLDocument2->getRootDataObject();
+ DataObjectList& dld = comp2->getList("departments");
+ DataObjectPtr dept2 = dld[0];
+ DataObjectList& dl22 = dept2->getList("employees");
+ DataObjectPtr emp2 = dl22[0];
+
+ if (strcmp(emp2->getProperty("openboolean").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS2 failure - bool property not bytes" << endl;
+
+ }
+ if (emp2->getBoolean("openboolean") != true)
+ {
+ cout << "OpenLoadNS2 failure - bool property not true" << endl;
+ }
+
+ if (strcmp(emp2->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS2 failure - bytes property not bytes" << endl;
+
+ }
+ if (strcmp(emp2->getCString("openstring"),"Value Of Open String"))
+ {
+ cout << "OpenLoadNS failure - string value is" <<
+ emp2->getCString("openstring") << endl;
+ }
+
+
+ DataObjectList& dl32 = emp2->getList("openintlist");
+
+ if (strcmp(emp2->getProperty("openintlist").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenLoadNS2 failure - IntegerList not Bytes " <<
+ emp2->getProperty("openintlist").getType().getName() << endl;
+ }
+
+ if (dl32.getInteger(0) != 45)
+ {
+ cout << "OpenLoadNS2 failure - Integer value is" <<
+ dl32.getInteger(0) << endl;
+ }
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "LoadOpenNS FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::loadManyOpen()
+{
+ cout << "TEST: LoadManyOpen ==========================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("many.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("many.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+
+ DataObjectList& dl3 = emp->getList("openlist");
+
+ if (strcmp(emp->getProperty("openlist").getType().getName(),
+ "Bytes"))
+ {
+ cout << "OpenManyLoad failure - BytesList not Bytes " <<
+ emp->getProperty("openlist").getType().getName() << endl;
+ }
+
+ if (dl3.size() != 3)
+ {
+ cout << "OpenManyLoad failure - size is " <<
+ dl3.size() << endl;
+ }
+
+ for (int i=0;i< dl3.size();i++)
+ {
+ cout << "Value:" <<
+ dl3.getCString(i) << endl;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "LoadOpen FAILED" << e << endl;
+ }
+
+}
+
+void sdotest::csload2()
+{
+ cout << "TEST: CSLoad2 ===============================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("cssave2-output.xml", "companyNS");
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "csload2-output.xml");
+ XMLDocumentPtr myXMLDocument2 = myXMLHelper->loadFile("csload2-output.xml", "companyNS");
+ myXMLHelper->save(myXMLDocument2->getRootDataObject(),
+ 0, "company", "csload3-output.xml");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in CsLoad2" << e << endl;
+ }
+ cout << "END TEST: CSLoad2 ===========================================" << endl;
+
+}
+
+
+
+void sdotest::setnull()
+{
+
+// try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("NullNS","NullMainType");
+ mdg->addType("NullNS","NullSubType");
+
+ /* Now add the properties to the types...*/
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tmain = mdg->getType("NullNS","NullMainType");
+ const Type& tsub = mdg->getType("NullNS","NullSubType");
+
+
+ mdg->addPropertyToType(tmain,"name",tstring);
+ mdg->addPropertyToType(tmain,"subs",tsub, true); // many
+ mdg->addPropertyToType(tmain,"asub",tsub, false); // single
+ mdg->addPropertyToType(tmain,"bsub",tsub, false); // single
+
+ mdg->addPropertyToType(tmain,"cs",tcs); // change summary
+
+ mdg->addPropertyToType(tsub,"name",tstring);
+ mdg->addPropertyToType(tsub,"number",tint);
+ mdg->addPropertyToType(tsub,"bool",tbool);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr main1 = mdg->create((Type&)tmain);
+ main1->setCString("name","MainObject");
+
+ // asub is initially set
+ DataObjectPtr sub0 = main1->createDataObject("asub");
+ // bsub is not set.
+
+ DataObjectPtr sub1 = mdg->create((Type&)tsub);
+ DataObjectPtr sub2 = mdg->create((Type&)tsub);
+ DataObjectPtr sub3 = mdg->create((Type&)tsub);
+
+ DataObjectList& dol = main1->getList("subs");
+
+ dol.append(sub1);
+ dol.append(sub2);
+ dol.append(sub3);
+
+ // sub1 has all values set initially
+
+ sub1->setCString("name","All Initially set");
+ sub1->setInteger("number",100);
+ sub1->setBoolean("bool",false);
+
+ // sub2 has no values set at all
+
+
+ // sub3 has all values set to null
+ sub3->setNull("name");
+ sub3->setNull("number");
+ sub3->setNull("bool");
+
+
+ // report
+
+ cout << "is ASUB null? (0 expected) " <<
+ main1->isNull("asub") << endl;
+
+ cout << "is ASUB set? (1 expected) " <<
+ main1->isSet("asub") << endl;
+
+ cout << "is BSUB null? (0 expected) " <<
+ main1->isNull("bsub") << endl;
+
+ cout << "is BSUB set? (0 expected) " <<
+ main1->isSet("bsub") << endl;
+
+// dol0 is set, not null
+
+ cout << "dol[0] name is null? (0 expected) " <<
+ dol[0]->isNull("name") << endl;
+
+ cout << "dol[0] number is null? (0 expected) " <<
+ dol[0]->isNull("number") << endl;
+
+ cout << "dol[0] bool is null? (0 expected) " <<
+ dol[0]->isNull("bool") << endl;
+
+ cout << "dol[0] name is set? (1 expected) " <<
+ dol[0]->isSet("name") << endl;
+
+ cout << "dol[0] number is set? (1 expected) " <<
+ dol[0]->isSet("number") << endl;
+
+ cout << "dol[0] bool is set? (1 expected) " <<
+ dol[0]->isSet("bool") << endl;
+
+// dol1 is all unset , so no nulls
+
+ cout << "dol[1] name is null? (0 expected) " <<
+ dol[1]->isNull("name") << endl;
+
+ cout << "dol[1] number is null? (0 expected) " <<
+ dol[1]->isNull("number") << endl;
+
+ cout << "dol[1] bool is null? (0 expected) " <<
+ dol[1]->isNull("bool") << endl;
+
+ cout << "dol[1] name is set? (0 expected) " <<
+ dol[1]->isSet("name") << endl;
+
+ cout << "dol[1] number is set? (0 expected) " <<
+ dol[1]->isSet("number") << endl;
+
+ cout << "dol[1] bool is set? (0 expected) " <<
+ dol[1]->isSet("bool") << endl;
+
+// dol2 is all nulls, so all set
+
+ cout << "dol[2] name is null? (1 expected) " <<
+ dol[2]->isNull("name") << endl;
+
+ cout << "dol[2] number is null? (1 expected) " <<
+ dol[2]->isNull("number") << endl;
+
+ cout << "dol[2] bool is null? (1 expected) " <<
+ dol[2]->isNull("bool") << endl;
+
+ cout << "dol[2] name is set? (1 expected) " <<
+ dol[2]->isSet("name") << endl;
+
+ cout << "dol[2] number is set? (1 expected) " <<
+ dol[2]->isSet("number") << endl;
+
+ cout << "dol[2] bool is set? (1 expected) " <<
+ dol[2]->isSet("bool") << endl;
+
+ ChangeSummaryPtr cs = main1->getChangeSummary();
+
+ cs->beginLogging();
+
+ main1->setNull("asub");
+ main1->setNull("bsub");
+
+ dol[0]->setNull("name");
+ dol[0]->setNull("number");
+ dol[0]->setNull("bool");
+
+ dol[1]->setNull("bool");
+
+ dol[2]->setCString("name","NewName");
+ dol[2]->setInteger("number",100);
+ dol[2]->setBoolean("bool",true);
+
+
+ cs->endLogging();
+
+ // what would we expect from the change summary?
+
+ cout << "==============Expected in Change Summary=================" << endl;
+ cout << "change to main1 - object asub set to null, oldvalue asub (set)" << endl;
+ cout << "change to main1 - object bsub set to null, oldvalue null (unset)" << endl;
+ cout << "change to sub1 - name asub set to null, oldvalue \"All Initially Set\" (set)" << endl;
+ cout << "change to sub1 - number asub set to null, oldvalue 100 (set)" << endl;
+ cout << "change to sub1 - bool asub set to null, oldvalue false (set)" << endl;
+ cout << "change to sub2 - bool asub set to null, oldvalue false (unset)" << endl;
+ cout << "change to sub3 - name asub set to \"NewName\", oldvalue null, set" << endl;
+ cout << "change to sub3 - number asub set to 100, oldvalue null, set" << endl;
+ cout << "change to sub3 - bool asub set to true, oldvalue null, set" << endl;
+ cout << "==============End Expected in Change Summary=============" << endl;
+
+
+ dumpchangesummary(cs);
+
+ // report
+
+ cout << "is ASUB null? (1 expected) " <<
+ main1->isNull("asub") << endl;
+
+ cout << "is ASUB set? (1 expected) " <<
+ main1->isSet("asub") << endl;
+
+ cout << "is BSUB null? (1 expected) " <<
+ main1->isNull("bsub") << endl;
+
+ cout << "is BSUB set? (1 expected) " <<
+ main1->isSet("bsub") << endl;
+
+// dol0 is set to null
+
+ cout << "dol[0] name is null? (1 expected) " <<
+ dol[0]->isNull("name") << endl;
+
+ cout << "dol[0] number is null? (1 expected) " <<
+ dol[0]->isNull("number") << endl;
+
+ cout << "dol[0] bool is null? (1 expected) " <<
+ dol[0]->isNull("bool") << endl;
+
+ cout << "dol[0] name is set? (1 expected) " <<
+ dol[0]->isSet("name") << endl;
+
+ cout << "dol[0] number is set? (1 expected) " <<
+ dol[0]->isSet("number") << endl;
+
+ cout << "dol[0] bool is set? (1 expected) " <<
+ dol[0]->isSet("bool") << endl;
+
+// dol1 is all unset except bool which is null
+
+ cout << "dol[1] name is null? (0 expected) " <<
+ dol[1]->isNull("name") << endl;
+
+ cout << "dol[1] number is null? (0 expected) " <<
+ dol[1]->isNull("number") << endl;
+
+ cout << "dol[1] bool is null? (1 expected) " <<
+ dol[1]->isNull("bool") << endl;
+
+ cout << "dol[1] name is set? (0 expected) " <<
+ dol[1]->isSet("name") << endl;
+
+ cout << "dol[1] number is set? (0 expected) " <<
+ dol[1]->isSet("number") << endl;
+
+ cout << "dol[1] bool is set? (1 expected) " <<
+ dol[1]->isSet("bool") << endl;
+
+// dol2 is all set non-null, so all set
+
+ cout << "dol[2] name is null? (0 expected) " <<
+ dol[2]->isNull("name") << endl;
+
+ cout << "dol[2] number is null? (0 expected) " <<
+ dol[2]->isNull("number") << endl;
+
+ cout << "dol[2] bool is null? (0 expected) " <<
+ dol[2]->isNull("bool") << endl;
+
+ cout << "dol[2] name is set? (1 expected) " <<
+ dol[2]->isSet("name") << endl;
+
+ cout << "dol[2] number is set? (1 expected) " <<
+ dol[2]->isSet("number") << endl;
+
+ cout << "dol[2] bool is set? (1 expected) " <<
+ dol[2]->isSet("bool") << endl;
+
+
+ // what would we expect from the change summary?
+// }
+// catch (SDORuntimeException e)
+// {
+// cout << "Exception in setnull" << endl;
+// cout << e;
+// }
+
+}
+
+void sdotest::testsubs()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","MainType");
+
+ mdg->addType("companyNS","SubType");
+ mdg->addType("companyNS","SuperType");
+ mdg->addType("companyNS","SubstituteType");
+ mdg->addType("companyNS","UnrelatedType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tmain = mdg->getType("companyNS","MainType");
+ const Type& sub = mdg->getType("companyNS","SubType");
+ const Type& super = mdg->getType("companyNS","SuperType");
+ const Type& subst = mdg->getType("companyNS","SubstituteType");
+ const Type& unrel = mdg->getType("companyNS","UnrelatedType");
+
+
+ mdg->addPropertyToType(tmain,"name",tstring);
+ mdg->addPropertyToType(tmain,"sub",super, false);
+ mdg->addPropertyToType(tmain,"subs",super, true);
+
+
+ mdg->setPropertySubstitute(tmain, "sub","wilbur", subst);
+ mdg->setPropertySubstitute(tmain, "subs","wilburs", subst);
+
+ mdg->setBaseType(sub,super);
+
+ //now sub and subs should accept all the three types
+
+ DataObjectPtr main = mdg->create((Type&)tmain);
+ main->setCString("name","SubstituteTest");
+
+ DataObjectList& dol = main->getList("subs");
+
+ DataObjectPtr sub1 = mdg->create(sub);
+ DataObjectPtr super1 = mdg->create(super);
+ DataObjectPtr subst1 = mdg->create(subst);
+ DataObjectPtr unrel1 = mdg->create(unrel);
+
+ dol.append(sub1);
+ dol.append(super1);
+ dol.append(subst1);
+ try
+ {
+ dol.append(unrel1);
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ cout << "Normal failure to append wrong type" << endl;
+ }
+
+ dol.remove(0);
+ dol.remove(0);
+ dol.remove(0);
+
+ DataObjectList& dol2 = main->getList("wilburs");
+
+ dol2.append(sub1);
+ dol2.append(super1);
+ dol2.append(subst1);
+ try
+ {
+ dol2.append(unrel1);
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ cout << "Normal failure to append wrong type" << endl;
+ }
+
+ main->setDataObject("sub",sub1);
+ main->setDataObject("sub",super1);
+ main->setDataObject("sub",subst1);
+
+ main->setDataObject("wilbur",sub1);
+ main->setDataObject("wilbur",super1);
+ main->setDataObject("wilbur",subst1);
+
+ try
+ {
+ main->setDataObject("sub", unrel1);
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ cout << "Normal failure to set wrong type" << endl;
+ }
+ }
+
+ catch (SDORuntimeException e)
+ {
+ cout << "Substitute test failed" << endl << e << endl;
+ }
+}
+
+
+void sdotest::merle1()
+{
+
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("axis.xsd");
+
+ // or dynamically create, but that would get attributes for the strings, not elements
+ //mdg->addType("axis","ItemSearch",true); // sequenced
+ //mdg->addType("axis","ItemSearchRequest",true); // sequenced
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tsearch = mdg->getType("axis","ItemSearch");
+ const Type& treq = mdg->getType("axis","ItemSearchRequest");
+
+ //mdg->addPropertyToType(tsearch,"SubscriptionId",tstring);
+ //mdg->addPropertyToType(tsearch,"AssociateTag",tstring);
+ //mdg->addPropertyToType(tsearch,"XMLEscaping",tstring);
+ //mdg->addPropertyToType(tsearch,"Validate",tstring);
+ //mdg->addPropertyToType(tsearch,"Shared",treq, false, false, true);
+ //mdg->addPropertyToType(tsearch,"Request",treq, true, false, true);
+
+ //mdg->addPropertyToType(treq,"Keywords",tstring);
+ //mdg->addPropertyToType(treq,"SearchIndex",tstring);
+
+ // dynamic creation of the data
+
+ DataObjectPtr search = mdg->create((Type&)tsearch);
+
+ search->setCString("SubscriptionId","I am the subscription ID string");
+ search->setCString("AssociateTag","I am the associate Tag string");
+ search->setCString("XMLEscaping","I am the XML escaping string");
+ search->setCString("Validate","I am the Validate string");
+
+ DataObjectPtr shared = search->createDataObject("Shared");
+ shared->setCString("Keywords","SharedKeywordsString");
+ shared->setCString("SearchIndex","SearchIndexString");
+
+ DataObjectList& requests = search->getList("Request");
+ DataObjectPtr request1 = mdg->create(treq);
+ requests.append(request1);
+ request1->setCString("Keywords","RequestKeywords");
+ request1->setCString("SearchIndex","RequestSearchIndex");
+
+ // Read the data and put it into XML:
+
+ PropertyList properties = search->getInstanceProperties();
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+ for (int i=0;i<properties.size();i++)
+ {
+ Property& prop = properties[i];
+ switch (prop.getTypeEnum())
+ {
+
+ case Type::StringType:
+ cout << "<" << prop.getName() << ">" <<
+ search->getCString(prop) << "</" <<
+ prop.getName() << ">" << endl;
+ break;
+
+ case Type::DataObjectType:
+ if (prop.isMany())
+ {
+ // many valued property, such as Requests , so get the list
+ DataObjectList& rq = search->getList(prop);
+ for (int j=0;j<rq.size();j++)
+ {
+ DataObjectPtr dob = rq[j];
+ if (dob != 0)
+ {
+ XMLDocumentPtr doc = myXMLHelper->createDocument(dob,
+ "axis", prop.getName());
+ doc->setXMLDeclaration(false);
+ char* dobXML = myXMLHelper->save(doc);
+ cout << "DataObject \"" << prop.getName() <<
+ "\" as XML:" << endl;
+ cout << dobXML << endl;
+ } // if dob
+ } // for
+ } // if many
+ else
+ {
+ DataObjectPtr dob = search->getDataObject(prop);
+ if (dob != 0)
+ {
+ XMLDocumentPtr doc = myXMLHelper->createDocument(dob,
+ "axis", prop.getName());
+ doc->setXMLDeclaration(false);
+ char* dobXML = myXMLHelper->save(doc);
+ cout << "DataObject \"" << prop.getName() <<
+ "\" as XML:" << endl;
+ cout << dobXML << endl;
+ } // if
+ } // else
+ break;
+
+ default:
+ break;
+
+ } // switch
+ } // for
+ } // try
+ catch (SDORuntimeException e)
+ {
+ cout << "Merle 1 failed" << endl << e << endl;
+ }
+}
+
+
+void sdotest::graham3()
+{
+ //try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham3.xsd");
+ //}
+ //catch (SDORuntimeException e)
+ //{
+// cout << "Graham1 failed " << e << endl;
+// }
+}
+
+void sdotest::graham1()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham1.xsd");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Graham1 failed " << e << endl;
+ }
+}
+void sdotest::graham2()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham2.xsd");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Graham2 failed " << e << endl;
+ }
+}
+
+
+void sdotest::b46613()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->create("rubbish","MyObject");
+
+ }
+ catch (SDOTypeNotFoundException e)
+ {
+ cout << "b46613 gave the correct exception" << endl;
+ }
+}
+
+void sdotest::doctest()
+{
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("doctest.xsd");
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("doctest.xml",
+ "companyNS");
+ cout << "RootURI=" << myXMLDocument->getRootElementURI();
+ cout << "RootName=" << myXMLDocument->getRootElementName();
+ }
+ catch (SDOTypeNotFoundException e)
+ {
+ cout << "doctest failed" << endl;
+ }
+
+}
+
+
+void sdotest::b46634()
+{
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company_with_nillable_SN.xsd");
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("company_with_nillable_SN.xml",
+ "companyNS");
+
+ DataObjectPtr dob = myXMLDocument->getRootDataObject();
+ DataObjectList& dol = dob->getList("departments");
+ DataObjectPtr dept = dol[0];
+ DataObjectList& dol2 = dept->getList("employees");
+ DataObjectPtr emp = dol2[0];
+
+ if (!emp->isSet("SN"))
+ {
+ cout << "B46634 WRONG - isSet should be true" << endl;
+ }
+ if (!emp->isNull("SN"))
+ {
+ cout << "B46634 WRONG - isNull should be true" << endl;
+ }
+
+ // now write out the nill value and check its still nil
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "b46634_out.xml");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46634 failed" << endl;
+ }
+
+}
+
+void sdotest::testErrors()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("error1.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("error1.xml",
+ "companyNS");
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ cout << "XML reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = myXMLHelper->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "testErrors failed" << endl << e << endl;
+ }
+
+}
+
+void sdotest::b46734()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("wsdl.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "WSDL XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ xsh->defineFile("wsdl-soap.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "WSDL SOAP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ xsh->defineFile("wsdl-http.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "WSDL HTTP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ // xsh->defineFile("StockQuoteService.wsdl");
+ // if ((i = xsh->getErrorCount()) > 0)
+ // {
+ // cout << "SQ WSDL reported some errors:" << endl;
+ // for (j=0;j<i;j++)
+ // {
+ // const char *m = xsh->getErrorMessage(j);
+ // if (m != 0) cout << m;
+ // cout << endl;
+ // }
+ // }
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("StockQuoteService.wsdl"
+ );
+ //, "http://swanandmokashi.com");
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ cout << "XML reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char * m = myXMLHelper->getErrorMessage(j);
+ if (m != 0)cout << m;
+ cout << endl;
+ }
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46734 failed" << endl << e << endl;
+ }
+
+}
+
+void sdotest::b46693()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("b46693.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "b46693 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0)cout << m;
+ cout << endl;
+ }
+ }
+
+ // XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ // XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46693.xsd"
+ // );
+
+ // if ((i = myXMLHelper->getErrorCount()) > 0)
+ // {
+ // cout << "b46693 reported some errors:" << endl;
+ // for (j=0;j<i;j++)
+ // {
+ // const char* m = myXMLHelper->getErrorMessage(j);
+ // if (m != 0)cout << m;
+ // cout << endl;
+ // }
+ // }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46693 failed" << endl << e << endl;
+ }
+
+}
+
+void sdotest::clonetest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","DepartmentType");
+ mdg->addType("companyNS","EmployeeType");
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"departments",tdept,true,false,true);
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp,false,false,false);
+ mdg->addPropertyToType(tcomp,"CEO",temp,false,false,true);
+
+ mdg->addPropertyToType(tdept,"employees",temp,true,false,true);
+ mdg->addPropertyToType(tdept,"name",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"location",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"number",tstring,false,false,true);
+
+ mdg->addPropertyToType(temp,"name",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"SN",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"manager",tbool,false,false,true);
+
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","The Company");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","The Department");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+
+ // now clone the data factory, and add more types
+
+ DataFactoryPtr df2 = mdg->clone();
+
+ df2->addType("otherNS","DataSet");
+
+ df2->addPropertyToType("companyNS","DepartmentType","dataset",
+ "otherNS","DataSet", false, false, true);
+
+ const Type& tstring2 = df2->getType("commonj.sdo","String");
+ const Type& tbool2 = df2->getType("commonj.sdo","Boolean");
+ const Type& tcs2 = df2->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp2 = df2->getType("companyNS","CompanyType");
+ const Type& tdept2 = df2->getType("companyNS","DepartmentType");
+ const Type& temp2 = df2->getType("companyNS","EmployeeType");
+
+ DataObjectPtr comp2 = df2->create((Type&)tcomp2);
+ comp->setCString("name","The Company");
+
+ DataObjectPtr dept2 = df2->create((Type&)tdept2);
+
+ DataObjectList& dol2 = comp2->getList("departments");
+ dol2.append(dept2);
+
+ dept2->setCString("name","The Other Department");
+ dept2->setCString("location","Not Botley");
+ dept2->setCString("number","321");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "clone failed " << e << endl;
+ }
+
+
+}
+
+void sdotest::testUtil()
+{
+ try {
+
+ cout << "START TEST: UTILS ======================================" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ mdg->addType("companyNS","OpenType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+ const Type& topen = mdg->getType("companyNS","OpenType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+ mdg->addPropertyToType(topen,"name",tstring);
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectList& emps = dept->getList("employees");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emps.append(emp1);
+ emps.append(emp2);
+ emps.append(emp3);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ bool b = emp1->getBoolean("openboolean");
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("openintlist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive and short!!
+
+ // unknown list type at present..
+ DataObjectList& dl2 = emp1->getList("opendataobjectlist");
+
+ DataObjectPtr myopen = mdg->create("companyNS","OpenType");
+ myopen->setCString("name","MyOpenName");
+ dl2.append(myopen); // now the list must be of data objects
+
+ emp1->setDataObject("opendataobject", myopen);
+
+ SDOUtils::printDataObject(comp);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ERROR in UTILS test" << e << endl;
+ }
+ cout << "END TEST: UTILS ======================================" << endl;
+
+}
+
+void sdotest::printset(ChangeSummaryPtr cs)
+{
+ ChangedDataObjectList& cdl = cs->getChangedDataObjects();
+
+ // here there should be a creation of Ed, and a change to dept, which has a
+ // bool previously unset, and a int list previuously unset and an employees list
+ // previously unset
+
+ for (int i=0;i< cdl.size();i++)
+ {
+ if (cs->isModified(cdl[i]))
+ {
+
+ cout << "A modified of type " << cdl[i]->getType().getURI()
+ << "#" << cdl[i]->getType().getName() << endl;
+
+ SettingList& sl = cs->getOldValues(cdl[i]);
+ if (sl.size() == 0)
+ {
+ cout << "No Settings found" << endl;
+ }
+ else
+ {
+ for (int j=0;j< sl.size(); j++)
+ {
+ cout << "Property " << sl[j].getProperty().getName();
+ // this could be a many-valued property, and could be one which is
+ // a data object or a data type...
+ if (sl[j].getProperty().isMany())
+ {
+ cout << "[" << sl[j].getIndex() << "]" ;
+ }
+ if (!sl[j].isSet())
+ {
+ cout << " was unset before the change" << endl;
+ }
+ else
+ {
+ cout << " was set before the change !!" << endl;
+ }
+ }
+ }
+ }
+ }
+}
+
+
+void sdotest::b46633()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Manager");
+ mdg->addType("myspace","Employee");
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","company",
+ "myspace","Company", false, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+
+ mdg->addPropertyToType("myspace","Department","bool",
+ "commonj.sdo","Boolean", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","manager",
+ "myspace","Manager", false, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Manager","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+
+ DataObjectPtr com = dor->createDataObject("company");
+ com->setCString("name","IBM");
+
+ DataObjectPtr dept = com->createDataObject("departments");
+ dept->setCString("name","JTC");
+
+ // employees initally unset
+
+ cs->beginLogging();
+
+ DataObjectPtr emp = dept->createDataObject("employees");
+ emp->setCString("name","Ed");
+
+
+
+ DataObjectList& dl = dept->getList("ints");
+ dl.append((long)400);
+
+ dept->setBoolean("bool", true);
+
+ printset(cs);
+
+ cs->endLogging();
+
+ // unset them all , restart logging, and get the same results
+
+ dept->unset("bool");
+ dept->unset("ints");
+ dept->unset("employees");
+
+ cs->beginLogging();
+
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ emp2->setCString("name","Ed2");
+
+ dl.append((long)600);
+
+ dept->setBoolean("bool", true);
+
+ printset(cs);
+
+ cs->endLogging();
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "b46633 failed " << e << endl;
+ }
+
+}
+
+
+
+void sdotest::testLoad()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ FILE* f = fopen("company_with_nillable_SN.xsd","r+");
+ char* buffer = new char[4000];
+ j = 0;
+ while ((i = fgetc(f)) != EOF)
+ {
+ buffer[j++] = (char)i;
+ }
+ buffer[j] = 0;
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->define(buffer);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ FILE* f2 = fopen("company_with_nillable_SN.xml","r+");
+ j = 0;
+ while ((i = fgetc(f2)) != EOF)
+ {
+ buffer[j++] = (char)i;
+ }
+ buffer[j] = 0;
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->load(buffer);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in testDAS " << e << endl;
+ }
+}
+
+void sdotest::includetest()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("include.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ xsh->defineFile("../t2/includeother.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in include test" << e << endl;
+ }
+}
+
+void sdotest::detachtest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Manager");
+ mdg->addType("myspace","Employee");
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","company",
+ "myspace","Company", false, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Department","manager",
+ "myspace","Manager", false, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Manager","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("company");
+ com->setCString("name","IBM");
+
+ DataObjectPtr dept = com->createDataObject("departments");
+
+ dept->setCString("name","JTC");
+
+
+ DataObjectPtr emp = dept->createDataObject("employees");
+ emp->setCString("name","Ed");
+
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ emp2->setCString("name","Tom");
+
+ DataObjectList& dol = dept->getList("employees");
+
+ DataObjectPtr e = dol[0];
+ e->detach();
+
+ DataObjectPtr cont = emp->getContainer();
+
+ if (cont != 0)
+ {
+ cout << "EMP STILL ATTACHED - problem" << endl;
+ }
+
+ DataObjectPtr cont2 = dol[0]->getContainer();
+
+ if (cont2 == 0)
+ {
+ cout << "SECOND DETACHED - problem" << endl;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "detach failed " << e << endl;
+ }
+
+}
+
+
+void sdotest::leak()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ DataObjectList& dl = dor->getList("ints");
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ dl.append((long)400);
+
+ cout << "List set should be true and is " << dor->isSet("ints") << endl;
+
+ dl.remove(0);
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ dl.append((long)400);
+
+ cout << "List set should be true and is " << dor->isSet("ints") << endl;
+
+ dor->unset("ints");
+
+ cout << "List set should be false and is " << dor->isSet("ints") << endl;
+
+ dl.append((long)600);
+
+ cout << "List set should be true and is " << dor->isSet("ints") << endl;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "leak failed " << e << endl;
+ }
+
+}
+
+void sdotest::twolists()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ //mdg->addType("myspace","Company");
+ //mdg->addType("myspace","Department");
+ //mdg->addType("myspace","Manager");
+ //mdg->addType("myspace","Employee");
+
+
+ //mdg->addPropertyToType("myspace","Company","name",
+ // "commonj.sdo","String", false, false, false);
+
+
+ //mdg->addPropertyToType("myspace","Root","company",
+ // "myspace","Company", false, false, true);
+
+ //mdg->addPropertyToType("myspace","Company","departments",
+ // "myspace","Department", true, false, true);
+
+
+ //mdg->addPropertyToType("myspace","Department","name",
+ // "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+ mdg->addPropertyToType("myspace","Root","ints2",
+ "commonj.sdo","Integer", true, false, false);
+
+ //mdg->addPropertyToType("myspace","Department","bool",
+ // "commonj.sdo","Boolean", false, false, false);
+
+ //mdg->addPropertyToType("myspace","Department","manager",
+ // "myspace","Manager", false, false, true);
+
+ //mdg->addPropertyToType("myspace","Department","employees",
+ // "myspace","Employee", true, false, true);
+
+ //mdg->addPropertyToType("myspace","Manager","name",
+ // "commonj.sdo","String", false, false, false);
+
+ //mdg->addPropertyToType("myspace","Employee","name",
+ // "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ //ChangeSummaryPtr cs = dor->getChangeSummary();
+
+ //DataObjectPtr com = dor->createDataObject("company");
+ //com->setCString("name","IBM");
+
+ //DataObjectPtr dept = com->createDataObject("departments");
+ //dept->setCString("name","JTC");
+
+ // employees initally unset
+
+ //cs->beginLogging();
+
+ //DataObjectPtr emp = dept->createDataObject("employees");
+ //emp->setCString("name","Ed");
+
+ DataObjectList& dl2 = dor->getList("ints2");
+ dl2.append((long)400);
+
+
+ DataObjectList& dl = dor->getList("ints");
+ dl.append((long)400);
+
+ //dept->setBoolean("bool", true);
+
+ //printset(cs);
+
+ //cs->endLogging();
+
+ // unset them all , restart logging, and get the same results
+
+ //dept->unset("bool");
+ //dept->unset("ints");
+ //dept->unset("employees");
+
+ //cs->beginLogging();
+
+ //DataObjectPtr emp2 = dept->createDataObject("employees");
+ //emp2->setCString("name","Ed2");
+
+ //dl.append((long)600);
+
+ //dept->setBoolean("bool", true);
+
+ // printset(cs);
+
+ //cs->endLogging();
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "twolists failed " << e << endl;
+ }
+
+}
+
+
+void sdotest::graham4()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addType("myspace","ListItem");
+
+
+ mdg->addPropertyToType("myspace","ListItem","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+ mdg->addPropertyToType("myspace","Root","items",
+ "myspace","ListItem", true, false, true);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+
+ // first try with no elements in lists
+
+ try {
+ DataObjectPtr pitem = dor->getDataObject("items[name=\"hello\"]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ try {
+ int inty = dor->getInteger("ints[1]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ // now populate them
+
+ DataObjectPtr myitem = dor->createDataObject("items");
+ myitem->setCString("name","not hello");
+
+ try {
+ DataObjectPtr pitem2 = dor->getDataObject("items[name=\"hello\"]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ DataObjectList& dl = dor->getList("ints");
+ dl.append((long)100);
+
+ try {
+ int inty2 = dor->getInteger("ints[2]");
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ try
+ {
+ DataObjectPtr pitem2 = dor->getDataObject("items[name=\"not hello\"]");
+ cout << "item name is " << pitem2->getCString("name") << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "ABNORMAL exception in Graham4" << endl;
+ }
+
+ try {
+ int inty2 = dor->getInteger("ints[1]");
+ cout << "Integer is " << inty2 << endl;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ cout << "Normal exception in Graham4" << endl;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "twolists failed " << e << endl;
+ }
+
+}
+
+
+void sdotest::graham5()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("Order.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ }
+ catch (SDORuntimeException r)
+ {
+ cout << "Graham5 failed " << r << endl;
+ }
+}
+
+
+
+void sdotest::b47293()
+{
+ int i,j,k;
+ try
+ {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("47293Catalog.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "47293 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ TypeList tl = mdg->getTypes();
+ for ( k=0;k<tl.size();k++)
+ {
+ cout << "Type:" << tl[k].getURI() << "#" << tl[k].getName() << endl;
+ }
+
+ xsh->generateFile(tl,"47293Catalog-out.xsd","catalogNS");
+
+ DataFactoryPtr mdg2 = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh2 = HelperProvider::getXSDHelper(mdg2);
+
+ xsh2->defineFile("47293Catalog-out.xsd");
+
+ if ((i = xsh2->getErrorCount()) > 0)
+ {
+ cout << "47293-out XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh2->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ TypeList tl2 = mdg2->getTypes();
+ for (k=0;k<tl2.size();k++)
+ {
+ cout << "Type:" << tl2[k].getURI() << "#" << tl2[k].getName() << endl;
+ }
+
+
+
+ //XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ //XMLDocumentPtr doc = xmh->loadFile("47293Catalog.xml", "catalog");
+
+ //DataObjectPtr dob = doc->getRootDataObject();
+
+ //xmh->save(dob,"","catalog","47293Catalog-out.xml");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "B47137 failed " << e << endl;
+ }
+}
+