summaryrefslogtreecommitdiffstats
path: root/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/ChangeSummarySave.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/ChangeSummarySave.cpp')
-rw-r--r--sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/ChangeSummarySave.cpp188
1 files changed, 188 insertions, 0 deletions
diff --git a/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/ChangeSummarySave.cpp b/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/ChangeSummarySave.cpp
new file mode 100644
index 0000000000..5a27683807
--- /dev/null
+++ b/sdo-cpp/tags/cpp-sdo-1.0.incubating-M3/samples/misc/ChangeSummarySave.cpp
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "samples.h"
+using namespace std;
+
+void ChangeSummarySave::sample()
+{
+ cout << " ********** ChangeSummarySave sample********" << endl;
+
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("ChangeSummarySave.xsd");
+
+ /**
+ * Load the schema from ChangeSummarySave.xsd
+ */
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ /**
+ * create a graph, set the change summary logging, modify the
+ * data, then save it to a file
+ */
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","John Jones");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Mary Smith");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Jane Doe");
+ emp3->setCString("SN","E0003");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+
+
+ /**
+ * Set the employee of the month - which is a reference, not
+ * a containment value
+ */
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ /**
+ * The XSD defined the company type as having a change summary,
+ * so we can get it...
+ */
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ /**
+ * And ask it to start logging...
+ */
+
+ cs->beginLogging();
+
+ /**
+ * With logging on, create a new employee
+ */
+
+ DataObjectPtr emp4 = mdg->create(temp);
+ emp4->setCString("name","Al Smith");
+ emp4->setCString("SN","E0004");
+ emp4->setBoolean("manager",true);
+
+ /**
+ * The first recorded change happens now, as the employee is
+ * added into the data graph. Emp4 (Al Smith) will appear in the
+ * change summary as a creation. There will also be a change
+ * record for the list "employees" of this department, holding the
+ * values before Al was added.
+ */
+ dol2.append(emp4);
+
+ /**
+ * The second change is to remove element 1 from the
+ * same list - Thats Mary Smith.
+ * Mary will appear as a deletion, but there will be no extra
+ * change record for "employees", as its already been changed.
+ * Mary was employee of the month, so that reference gets
+ * emptied, and a change record is set up for it, recording
+ * Mary as the old value.
+ */
+
+ dol2.remove(1); // element 1 is Mary
+
+ DataObjectPtr emp5 = mdg->create(temp);
+ emp5->setCString("name","Bill Withers");
+ emp5->setCString("SN","E0005");
+
+
+ /**
+ * The third change is to append Bill to the same list.
+ * Bill appears as a creation, but there is no change recorded to
+ * the employees list.
+ */
+
+ dol2.append(emp5);
+
+
+ /**
+ * The company name is changed. A change record is set up for
+ * the property "name" of this company. It stores the old value
+ * "ACME"
+ */
+
+ comp->setCString("name","MegaCorp");
+
+ /**
+ * The company employee of the month is changed. The old
+ * value has already been changed from Mary to NULL, so no change
+ * record is created here at all
+ */
+
+ comp->setDataObject("employeeOfTheMonth",emp4);
+
+
+ /**
+ * Stop logging changes
+ */
+
+ cs->endLogging();
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"ChangeSummarySave-output.xml");
+
+ /**
+ * Have a look in the file and see if you can recognise the changes
+ * above
+ */
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in ChangeSummarySave" << endl;
+ cout << e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}