summaryrefslogtreecommitdiffstats
path: root/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/Substitutes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/Substitutes.cpp')
-rw-r--r--sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/Substitutes.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/Substitutes.cpp b/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/Substitutes.cpp
new file mode 100644
index 0000000000..816caee2d5
--- /dev/null
+++ b/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/Substitutes.cpp
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "samples.h"
+using namespace std;
+
+void Substitutes::sample()
+{
+ cout << " ********** Substitutes sample *************" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companysubs.xsd");
+
+ /**
+ * The companysubs xsd defines some types including a
+ * type which allows substitutions. The PublicationType is
+ * the base of BookType and MagazineType, and the substitutions
+ * are enabled so that properties can be either.
+ */
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ /**
+ * Create some data to work with
+ */
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+
+ /**
+ * book has a title property because it inherits from Publication
+ */
+ book1->setCString("title","Nowhere Man");
+
+
+ DataObjectPtr mag1 = mdg->create(mag);
+
+ /**
+ * Magazine has an eidtor, and a title inherited from publication
+ */
+
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+
+
+ /**
+ * The property "Publication" is defined as substitutable, so
+ * any of the book, magazine or publication should be
+ * acceptable values. When the type is queried, the type
+ * returned should correspond to the current type of the
+ * property...
+ */
+
+ comp->setDataObject("Publication",pub1);
+ const Type& tpub1 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is now of type " << tpub1.getName() << endl;
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ cout << "Publication now is of type " << tpub2.getName() << endl;
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ cout << "Publication now is of type " << tpub3.getName() << endl;
+
+ /**
+ * As the substitutes have names, they act as a sort of
+ * alias, so we can address Publication as Book or Magazine too
+ */
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ cout << "Book is of type " << tpub4.getName() << endl;
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ cout << "Magazine is of type " << tpub5.getName() << endl;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in Substitutes"<< endl;
+ cout<< e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}