blob: 28892994cc7e782b9006dde67c5efee53de253e7 [file]
/*
*
* Copyright 2006 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.
*/
/* $Id: SdoTest2.cpp,v 1.2 2006/03/16 12:53:57 slattery Exp $ */
#include <stdio.h>
#pragma warning(disable:4786)
#include <iostream>
#include <fstream>
using namespace std;
#include "sdotest.h"
using namespace commonj::sdo;
DataObjectPtr sdotest::scopetest2()
{
DataFactoryPtr mdg = DataFactory::getDataFactory();
mdg->addType("myspace","Root");
mdg->addType("myspace","Company");
mdg->addPropertyToType("myspace","Company","name",
"commonj.sdo","String", false, false, false);
mdg->addPropertyToType("myspace","Company","id",
"commonj.sdo","String", false, false, false);
mdg->addPropertyToType("myspace","Root","company",
"myspace","Company", false, false, true);
const Type& tcc = mdg->getType("myspace","Root");
DataObjectPtr dop = mdg->create((Type&)tcc);
DataObjectPtr co = dop->createDataObject("company");
return dop;
}
int sdotest::scopetest()
{
DataObjectPtr dob;
dob = scopetest2();
// fails on close?
return 1;
}
int sdotest::xsdtosdo()
{
const char* value;
value = SDOUtils::XSDToSDO("string");
if (!silent)cout << "XSDToSDO(string)=" << value << endl;
if (strcmp(value,"String")) return 0;
value = SDOUtils::XSDToSDO("int");
if (!silent)cout << "XSDToSDO(int)="<< value << endl;
if (strcmp(value,"Integer")) return 0;
value = SDOUtils::XSDToSDO("notinlist");
if (!silent)cout << "XSDToSDO(notinlist)="<< value << endl;
if (strcmp(value,"String")) return 0;
value = SDOUtils::XSDToSDO("");
if (!silent)cout << "XSDToSDO(\"\")="<< value << endl;
if (strcmp(value,"String")) return 0;
value = SDOUtils::XSDToSDO(0);
if (!silent)cout << "XSDToSDO(0)="<< value << endl;
if (strcmp(value,"String")) return 0;
value = SDOUtils::SDOToXSD("String");
if (!silent)cout << "SDOToXSD(String)="<< value << endl;
if (strcmp(value,"string")) return 0;
value = SDOUtils::SDOToXSD("Long");
if (!silent)cout << "SDOToXSD(Long)="<< value << endl;
if (strcmp(value,"unsignedLong")) return 0;
value = SDOUtils::SDOToXSD("notinlist");
if (!silent)cout << "SDOToXSD(notinlist)="<< value << endl;
if (strcmp(value,"string")) return 0;
value = SDOUtils::SDOToXSD("");
if (!silent)cout << "SDOToXSD(\"\")="<< value << endl;
if (strcmp(value,"string")) return 0;
value = SDOUtils::SDOToXSD(0);
if (!silent)cout << "SDOToXSD(0)="<< value << endl;
if (strcmp(value,"string")) return 0;
return 1;
}
int sdotest::compatiblefactory()
{
DataFactoryPtr f1 = DataFactory::getDataFactory();
f1->addType("Namespace","Project");
f1->addType("Namespace","WorkPackage");
f1->addType("Namespace","LineItem");
f1->addType("Namespace","StringHolder");
f1->addType("Namespace","Root");
f1->addPropertyToType("Namespace","Root","project",
"Namespace","Project", false, false, true);
f1->addPropertyToType("Namespace","StringHolder","value",
"commonj.sdo","String", false, false, false);
f1->addPropertyToType("Namespace","Project","id",
"commonj.sdo","String", false, false, false);
f1->addPropertyToType("Namespace","Project","string",
"Namespace","StringHolder", false, false, true);
f1->addPropertyToType("Namespace","WorkPackage","name",
"commonj.sdo","String", false, false, false);
f1->addPropertyToType("Namespace","WorkPackage","string",
"Namespace","StringHolder", false, false, true);
f1->addPropertyToType("Namespace","LineItem","itemname",
"commonj.sdo","String", false, false, false);
f1->addPropertyToType("Namespace","LineItem","string",
"Namespace","StringHolder", false, false, true);
f1->addPropertyToType("Namespace","Project","packages",
"Namespace","WorkPackage", true, false, true);
f1->addPropertyToType("Namespace","WorkPackage","lineitems",
"Namespace","LineItem", true, false, true);
// project
// id (string)
// string (StringHolder)
// workpackages (WorkPackage)
// workpackage
// name (string)
// string (StringHolder)
// lineitems (LineItem)
// lineitem
// itemname (string)
// factories 1 and 2 are compatible
DataFactoryPtr f2 = DataFactory::getDataFactory();
f2->addType("Namespace","Project");
f2->addType("Namespace","WorkPackage");
f2->addType("Namespace","LineItem");
f2->addType("Namespace","StringHolder");
f2->addType("Namespace","Root");
f2->addPropertyToType("Namespace","Root","project",
"Namespace","Project", false, false, true);
f2->addPropertyToType("Namespace","StringHolder","value",
"commonj.sdo","String", false, false, false);
f2->addPropertyToType("Namespace","Project","id",
"commonj.sdo","String", false, false, false);
f2->addPropertyToType("Namespace","Project","string",
"Namespace","StringHolder", false, false, true);
f2->addPropertyToType("Namespace","WorkPackage","name",
"commonj.sdo","String", false, false, false);
f2->addPropertyToType("Namespace","WorkPackage","string",
"Namespace","StringHolder", false, false, true);
f2->addPropertyToType("Namespace","LineItem","itemname",
"commonj.sdo","String", false, false, false);
f2->addPropertyToType("Namespace","LineItem","string",
"Namespace","StringHolder", false, false, true);
f2->addPropertyToType("Namespace","Project","packages",
"Namespace","WorkPackage", true, false, true);
f2->addPropertyToType("Namespace","WorkPackage","lineitems",
"Namespace","LineItem", true, false, true);
// factory 3 has no project type
DataFactoryPtr f3 = DataFactory::getDataFactory();
f3->addType("Namespace","WorkPackage");
f3->addType("Namespace","LineItem");
f3->addType("Namespace","StringHolder");
f3->addType("Namespace","Root");
f3->addPropertyToType("Namespace","Root","project",
"Namespace","WorkPackage", false, false, true);
f3->addPropertyToType("Namespace","StringHolder","value",
"commonj.sdo","String", false, false, false);
f3->addPropertyToType("Namespace","WorkPackage","name",
"commonj.sdo","String", false, false, false);
f3->addPropertyToType("Namespace","WorkPackage","string",
"Namespace","StringHolder", false, false, true);
f3->addPropertyToType("Namespace","LineItem","itemname",
"commonj.sdo","String", false, false, false);
f3->addPropertyToType("Namespace","LineItem","string",
"Namespace","StringHolder", false, false, true);
f3->addPropertyToType("Namespace","WorkPackage","lineitems",
"Namespace","LineItem", true, false, true);
// factory 4 looks compatible - but stringholder is missing
DataFactoryPtr f4 = DataFactory::getDataFactory();
f4->addType("Namespace","Project");
f4->addType("Namespace","WorkPackage");
f4->addType("Namespace","LineItem");
f4->addType("Namespace","Root");
f4->addPropertyToType("Namespace","Root","project",
"Namespace","Project", false, false, true);
f4->addPropertyToType("Namespace","Project","id",
"commonj.sdo","String", false, false, false);
f4->addPropertyToType("Namespace","WorkPackage","name",
"commonj.sdo","String", false, false, false);
f4->addPropertyToType("Namespace","LineItem","itemname",
"commonj.sdo","String", false, false, false);
f4->addPropertyToType("Namespace","Project","packages",
"Namespace","WorkPackage", true, false, true);
f4->addPropertyToType("Namespace","WorkPackage","lineitems",
"Namespace","LineItem", true, false, true);
// factory 5 looks compatible, but the lists are not lists
DataFactoryPtr f5 = DataFactory::getDataFactory();
f5->addType("Namespace","Project");
f5->addType("Namespace","WorkPackage");
f5->addType("Namespace","LineItem");
f5->addType("Namespace","StringHolder");
f5->addType("Namespace","Root");
f5->addPropertyToType("Namespace","Root","project",
"Namespace","Project", false, false, true);
f5->addPropertyToType("Namespace","StringHolder","value",
"commonj.sdo","String", false, false, false);
f5->addPropertyToType("Namespace","Project","id",
"commonj.sdo","String", false, false, false);
f5->addPropertyToType("Namespace","Project","string",
"Namespace","StringHolder", false, false, true);
f5->addPropertyToType("Namespace","WorkPackage","name",
"commonj.sdo","String", false, false, false);
f5->addPropertyToType("Namespace","WorkPackage","string",
"Namespace","StringHolder", false, false, true);
f5->addPropertyToType("Namespace","LineItem","itemname",
"commonj.sdo","String", false, false, false);
f5->addPropertyToType("Namespace","LineItem","string",
"Namespace","StringHolder", false, false, true);
f5->addPropertyToType("Namespace","Project","packages",
"Namespace","WorkPackage", false, false, true);
f5->addPropertyToType("Namespace","WorkPackage","lineitems",
"Namespace","LineItem", false, false, true);
// factory 6 looks OK, but the lineitems have no itemname field
DataFactoryPtr f6 = DataFactory::getDataFactory();
f6->addType("Namespace","Project");
f6->addType("Namespace","WorkPackage");
f6->addType("Namespace","LineItem");
f6->addType("Namespace","StringHolder");
f6->addType("Namespace","Root");
f6->addPropertyToType("Namespace","Root","project",
"Namespace","Project", false, false, true);
f6->addPropertyToType("Namespace","StringHolder","value",
"commonj.sdo","String", false, false, false);
f6->addPropertyToType("Namespace","Project","id",
"commonj.sdo","String", false, false, false);
f6->addPropertyToType("Namespace","Project","string",
"Namespace","StringHolder", false, false, true);
f6->addPropertyToType("Namespace","WorkPackage","name",
"commonj.sdo","String", false, false, false);
f6->addPropertyToType("Namespace","WorkPackage","string",
"Namespace","StringHolder", false, false, true);
f6->addPropertyToType("Namespace","LineItem","string",
"Namespace","StringHolder", false, false, true);
f6->addPropertyToType("Namespace","Project","packages",
"Namespace","WorkPackage", true, false, true);
f6->addPropertyToType("Namespace","WorkPackage","lineitems",
"Namespace","LineItem", true, false, true);
// factory 7 looks OK, but the identifiers are ints
DataFactoryPtr f7 = DataFactory::getDataFactory();
f7->addType("Namespace","Project");
f7->addType("Namespace","WorkPackage");
f7->addType("Namespace","LineItem");
f7->addType("Namespace","StringHolder");
f7->addType("Namespace","Root");
f7->addPropertyToType("Namespace","Root","project",
"Namespace","Project", false, false, true);
f7->addPropertyToType("Namespace","StringHolder","value",
"commonj.sdo","String", false, false, true);
f7->addPropertyToType("Namespace","Project","id",
"commonj.sdo","Integer", false, false, false);
f7->addPropertyToType("Namespace","Project","string",
"Namespace","StringHolder", false, false, true);
f7->addPropertyToType("Namespace","WorkPackage","name",
"commonj.sdo","String", false, false, false);
f7->addPropertyToType("Namespace","WorkPackage","string",
"Namespace","StringHolder", false, false, true);
f7->addPropertyToType("Namespace","LineItem","itemname",
"commonj.sdo","Integer", false, false, false);
f7->addPropertyToType("Namespace","LineItem","string",
"Namespace","StringHolder", false, false, true);
f7->addPropertyToType("Namespace","Project","packages",
"Namespace","WorkPackage", true, false, true);
f7->addPropertyToType("Namespace","WorkPackage","lineitems",
"Namespace","LineItem", true, false, true);
// create a tree from Root in factory 1
DataObjectPtr root = f1->create("Namespace","Root");
DataObjectPtr project = root->createDataObject("project");
project->setCString("id","The TTP Project");
DataObjectPtr str = project->createDataObject("string");
str->setCString("value","The Recursive Acronym Project");
DataObjectPtr wp1 = project->createDataObject("packages");
DataObjectPtr wp2 = project->createDataObject("packages");
wp1->setCString("name","Work Package 1");
wp2->setCString("name","Work Package 2");
DataObjectPtr li1 = wp1->createDataObject("lineitems");
DataObjectPtr li2 = wp1->createDataObject("lineitems");
DataObjectPtr li3 = wp2->createDataObject("lineitems");
DataObjectPtr li4 = wp2->createDataObject("lineitems");
li1->setCString("itemname","LineItem 1");
li2->setCString("itemname","LineItem 2");
li3->setCString("itemname","LineItem 3");
li4->setCString("itemname","LineItem 4");
DataObjectPtr str1 = li1->createDataObject("string");
DataObjectPtr str2 = li2->createDataObject("string");
DataObjectPtr str3 = li3->createDataObject("string");
DataObjectPtr str4 = li4->createDataObject("string");
str1->setCString("value","String1");
str2->setCString("value","String2");
str3->setCString("value","String3");
str4->setCString("value","String4");
// cout << "DATA OBJECTS FROM FACTORY 1" << endl;
// printDataObject(root);
if (!transferto(root,f2, false)) return 0;
if (!transferto(root,f3, true)) return 0;
if (!transferto(root,f4, true)) return 0;
if (!transferto(root,f5, true)) return 0;
if (!transferto(root,f6, true)) return 0;
if (!transferto(root,f7, true)) return 0;
// finally, lets move one which has a parent and cant be moved.
try {
DataObjectPtr project = root->getDataObject("project");
DataObjectPtr root2 = f2->create("Namespace","Root");
root2->setDataObject("project", project);
return 0;
}
catch (SDORuntimeException e)
{
//cout << "Compatibility test correctly returned an error :" ;
//cout << e.getMessageText() << endl;
return 1;
}
}
int sdotest::transferto(DataObjectPtr root, DataFactoryPtr f2, bool expecterror)
{
try {
// transfer the tree to factory 2...
DataObjectPtr rproject = root->getDataObject("project");
DataObjectPtr project = CopyHelper::copy(rproject);
DataObjectPtr root2 = f2->create("Namespace","Root");
root2->setDataObject("project", project);
//cout << "DATA OBJECTS TRANSFERRED" << endl;
//printDataObject(root2);
if (expecterror)
{
return 0;
}
return 1;
}
catch (SDORuntimeException e)
{
if (expecterror){
//cout << "Compatibility test correctly returned an error :" ;
//cout << e.getMessageText() << endl;
return 1;
}
else
{
if (!silent)cout << "Compatibility test failed whilst transferring " << e << endl;
return 0;
}
}
}
int sdotest::b48602()
{
int i,j;
try {
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
xsh->defineFile("b48602.xsd");
if ((i = xsh->getErrorCount()) > 0)
{
if (!silent)
{
cout << "PROBLEM: b48602 XSD reported some errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xsh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
return 0;
}
return 0;
}
catch (SDOTypeNotFoundException e)
{
return 1;
}
catch (SDORuntimeException e)
{
return 1;
}
}
int sdotest::testany(const char* xsd,
const char* acceptedxsderror,
const char* xml,
const char* acceptedxmlerror)
{
int i,j,rc;
try {
char *c;
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
if (xsd)
{
char * name1 = new char[strlen(xsd)+5];
char * name3 = new char[strlen(xsd)+5];
strcpy(name1,xsd);
while ((c = strchr(name1,'.')) != 0)*c = '_';
strcpy(name3,name1);
strcat(name1,".dat");
strcat(name3,".txt");
FILE *f1 = fopen(name1,"w+");
if (f1 == 0)
{
if (!silent)cout << "Unable to open " << name1 << endl;
delete name1;
delete name3;
return 0;
}
xsh->defineFile(xsd);
if ((i = xsh->getErrorCount()) > 0)
{
if (acceptedxsderror != 0)
{
for (j=0;j<i;j++)
{
if (!strcmp(acceptedxsderror,xsh->getErrorMessage(j)))
{
fclose(f1);
delete name1;
delete name3;
return 1;
}
}
}
if (!silent)
{
cout << "PROBLEM: Testany XSD reported some errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xsh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
fclose(f1);
delete name1;
delete name3;
return 0;
}
TypeList tl = mdg->getTypes();
fprintf(f1, "***** TYPES BEFORE RESOLVE **********************************\n");
for (i=0;i<tl.size();i++)
{
fprintf(f1,"Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
PropertyList pl = tl[i].getProperties();
for (int j=0;j<pl.size();j++)
{
fprintf(f1,"Property:%s ",pl[j].getName());
if (pl[j].isMany())
fprintf(f1, "(many) ");
fprintf(f1, " of type %s\n",pl[j].getType().getName());
}
}
fprintf(f1, "*******************************END TYPES******************\n");
fclose(f1);
rc = comparefiles(name1,name3);
delete name1;
delete name3;
if (rc == 0)return rc;
}
if (xml == 0 || strlen(xml) == 0) return 1;
char * name2 = new char[strlen(xml)+5];
char * name4 = new char[strlen(xml)+5];
strcpy(name2,xml);
while ((c = strchr(name2,'.')) != 0)*c = '_';
strcpy(name4,name2);
strcat(name2,".dat");
strcat(name4,".txt");
FILE *f2 = fopen(name2,"w+");
if (f2 == 0)
{
if (!silent)cout << "Unable to open " << name2 << endl;
delete name2;
delete name4;
return 0;
}
XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
XMLDocumentPtr doc = xmh->loadFile(xml);
if ((i = xmh->getErrorCount()) > 0)
{
if (acceptedxmlerror != 0)
{
for (j=0;j<i;j++)
{
if (!strcmp(acceptedxmlerror,xmh->getErrorMessage(j)))
{
fclose(f2);
delete name2;
delete name4;
return 1;
}
}
}
if (!silent)
{
cout << "TestAny XML found errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xmh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
fclose(f2);
delete name2;
delete name4;
return 0;
}
else {
TypeList tl = mdg->getTypes();
fprintf(f2, "***** TYPES AFTER RESOLVE*********************************\n");
for (i=0;i<tl.size();i++)
{
fprintf(f2,"Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
PropertyList pl = tl[i].getProperties();
for (int j=0;j<pl.size();j++)
{
fprintf(f2, "Property:%s ",pl[j].getName());
if (pl[j].isMany())
fprintf(f2, "(many) ");
fprintf(f2, " of type %s\n",pl[j].getType().getName());
}
}
fprintf(f2, "*******************************END TYPES******************\n");
DataObjectPtr dob = doc->getRootDataObject();
printDataObject(f2, dob);
fclose(f2);
rc = comparefiles(name2,name4);
delete name2;
delete name4;
return rc;
}
}
catch (SDORuntimeException e)
{
if (!silent)cout << "Exception in TestAny" << e << endl;
return 0;
}
}
int sdotest::testanytwo(const char* xsd, const char* xsd2,
const char* xml)
{
int i,j;
try {
char * name1 = new char[strlen(xsd)+5];
char * name2 = new char[strlen(xml)+5];
char * name3 = new char[strlen(xsd)+5];
char * name4 = new char[strlen(xml)+5];
strcpy(name1,xsd);
strcpy(name2,xml);
char *c;
while ((c = strchr(name1,'.')) != 0)*c = '_';
while ((c = strchr(name2,'.')) != 0)*c = '_';
strcpy(name3,name1);
strcpy(name4,name2);
strcat(name1,".dat");
strcat(name2,".dat");
strcat(name3,".txt");
strcat(name4,".txt");
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
if (xsd)
{
xsh->defineFile(xsd);
if ((i = xsh->getErrorCount()) > 0)
{
if (!silent)
{
cout << "PROBLEM: Testany XSD reported some errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xsh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
return 0;
}
}
if (xsd2)
{
xsh->defineFile(xsd2);
if ((i = xsh->getErrorCount()) > 0)
{
if (!silent)
{
cout << "PROBLEM: Testany XSD2 reported some errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xsh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
return 0;
}
}
if (xsd)
{
FILE *f1 = fopen(name1,"w+");
if (f1 == 0)
{
if (!silent)cout << "Unable to open " << name1 << endl;
return 0;
}
TypeList tl = mdg->getTypes();
fprintf(f1,"***** TESTANY ******************************************\n");
for (i=0;i<tl.size();i++)
{
fprintf(f1,"Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
PropertyList pl = tl[i].getProperties();
for (int j=0;j<pl.size();j++)
{
fprintf(f1,"Property:%s ",pl[j].getName());
if (pl[j].isMany())
fprintf(f1, "(many) ");
fprintf(f1, " of type %s\n",pl[j].getType().getName());
}
}
fprintf(f1,"*******************************END TYPES******************\n");
fclose(f1);
if (!comparefiles(name1,name3)) return 0;
}
if (xml == 0 || strlen(xml) == 0) return 1;
FILE *f2 = fopen(name2,"w+");
if (f2 == 0)
{
if (!silent)cout << "Unable to open " << name2 << endl;
return 0;
}
XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
XMLDocumentPtr doc = xmh->loadFile(xml);
if ((i = xmh->getErrorCount()) > 0)
{
if (!silent)
{
cout << "TestAny XML found errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xmh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
return 0;
}
else
{
DataObjectPtr dob = doc->getRootDataObject();
printDataObject(f2, dob);
}
fclose(f2);
return comparefiles(name2,name4);
}
catch (SDORuntimeException e)
{
if (!silent)cout << "Exception in TestAnyTwo" << e << endl;
return 0;
}
}
int sdotest::openseq()
{
DataFactoryPtr mdg = DataFactory::getDataFactory();
FILE *f = fopen("openseq.dat","w+");
if (f == 0)
{
if (!silent)cout << "Unable to open openseq.dat" << endl;
return 0;
}
mdg->addType("companyNS","CompanyType");
// employee will be an open sequenced type...
mdg->addType("companyNS","EmployeeType", /*seq*/true,
/*open*/true,
/*abs */ false,
/*data*/ false);
/* Now add the properties to the types...*/
const Type& tstring = mdg->getType("commonj.sdo","String");
const Type& tcomp = mdg->getType("companyNS","CompanyType");
const Type& temp = mdg->getType("companyNS","EmployeeType");
mdg->addPropertyToType(tcomp,"name",tstring);
mdg->addPropertyToType(tcomp,"employees",temp,true);
mdg->addPropertyToType(temp, "name",tstring);
DataObjectPtr comp = mdg->create((Type&)tcomp);
comp->setCString("name","ACME");
DataObjectPtr emp = mdg->create(temp);
emp->setCString("name","Albert");
emp->setCString("openstring","Value Of Open String");
/* now do the same with the employee seq...*/
SequencePtr seq = emp->getSequence();
seq->addCString("opensequencedstring","Value of sequenced string");
const char* c = emp->getCString("openstring");
fprintf(f, "Open Type string value: %s\n",c);
c = emp->getCString("opensequencedstring");
fprintf(f, "Open Sequenced string value: %s\n",c);
c = seq->getCStringValue(0);
fprintf(f, "Open Sequenced string value from seq: %s\n",c);
//cout << "END TEST: OpenSeq ======================================" << endl;
fclose(f);
return comparefiles("openseq.dat","openseq.txt");
}
int sdotest::b48601()
{
return testany("48601.xsd",
"Schema contains a union which is not yet implemented",0,0);
}
int sdotest::b48686()
{
return testany("48686.xsd",0,"48686.xml",0);
}
int sdotest::b48736()
{
return testany("48736.xsd",0,"48736.xml",0);
}
int sdotest::testgenerate(const char* xsd, const char* output)
{
int i,j;
try {
char * name1 = new char[strlen(output) + 5];
char * name2 = new char[strlen(output) + 5];
char * c;
strcpy(name1,output);
while ((c = strchr(name1,'.')) != 0)*c='_';
strcpy(name2,name1);
strcat(name1,".dat");
strcat(name2,".txt");
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
if (xsd)
{
xsh->defineFile(xsd);
if ((i = xsh->getErrorCount()) > 0)
{
if (!silent)
{
cout << "PROBLEM: generation XSD reported some errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xsh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
return 0;
}
else
{
mdg->generateInterface(name1,"Test");
return comparefiles(name1,name2);
}
}
return 0;
}
catch (SDORuntimeException e)
{
if (!silent)cout << "Exception in TestGenerate" << e << endl;
return 0;
}
}
int sdotest::emptycs()
{
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","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);
// right now, there is no change summary, and logging is
// off - we expect an empty change summary element
XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
xmh->save(doc,"emptycs1.xml");
if (!comparefiles("emptycs1.xml","emptycs1.txt"))return 0;
ChangeSummaryPtr cs = comp->getChangeSummary();
cs->beginLogging();
xmh->save(doc,"emptycs2.xml");
if (!comparefiles("emptycs2.xml","emptycs2.txt"))return 0;
// now we expect and empty change summary with logging true
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);
cs->endLogging();
//serializeChangeSummary(cs);
xmh->save(doc,"emptycs3.xml");
if (!comparefiles("emptycs3.xml","emptycs3.txt"))return 0;
return 1;
}
catch (SDORuntimeException e)
{
if (!silent)cout << "empty change summary save failed" << e << endl;
return 0;
}
}
int sdotest::definetest()
{
try {
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
TypeDefinitions* ts = new TypeDefinitions();
if (ts) delete ts;
ts = new TypeDefinitions();
TypeDefinition* td = new TypeDefinition();
td->setName("MySmallObject");
td->setUri("MyNameSpace");
td->setIsDataType(false);
TypeDefinition* td2 = new TypeDefinition();
td2->setName("MyOtherObject");
td2->setUri("MyNameSpace");
td2->setIsDataType(false);
PropertyDefinition* pd = new PropertyDefinition();
pd->setName("MyIntegerProperty");
pd->setType("commonj.sdo","Integer");
PropertyDefinition* pd2 = new PropertyDefinition();
pd2->setName("MyObjectProperty");
pd2->setType("MyNameSpace","MyOtherObject");
pd2->setIsMany(true);
td->addPropertyDefinition(*pd);
td->addPropertyDefinition(*pd2);
ts->addTypeDefinition(*td);
ts->addTypeDefinition(*td2);
// should have an object of type MySmallObject, containing
// a single integer called MyIntegerProperty, and a list of
// objects called MyObjectProperty - of type MyOtherObject
xsh->defineTypes(*ts);
delete td;
delete td2;
delete ts;
delete pd;
delete pd2;
DataObjectPtr dob = mdg->create("MyNameSpace","MySmallObject");
dob->setInteger("MyIntegerProperty",43);
dob->createDataObject("MyObjectProperty");
dob->createDataObject("MyObjectProperty");
DataObjectList& dl = dob->getList("MyObjectProperty");
if (dl.size() != 2)
{
if (!silent) cout << "Define test list size is wrong" << endl;
return 0;
}
int value = dob->getInteger("MyIntegerProperty");
if (value != 43)
{
if (!silent) cout << "Define test integer value is wrong" << endl;
return 0;
}
return 1;
}
catch (SDORuntimeException e)
{
if (!silent)cout << "define test failed" << endl << e << endl;
return 0;
}
}
int sdotest::stocktest()
{
return sdotest::testany("stock.wsdl",0,"stock.xml",0);
}
/******************************************************
int sdotest::stocktest()
{
int i,j;
try {
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
xsh->defineFile("stock.wsdl");
if ((i = xsh->getErrorCount()) > 0)
{
cout << "PROBLEM: Testany 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();
printf("***** TYPES BEFORE RESOLVE **********************************\n");
for (i=0;i<tl.size();i++)
{
printf("Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
PropertyList pl = tl[i].getProperties();
for (int j=0;j<pl.size();j++)
{
printf("Property:%s ",pl[j].getName());
if (pl[j].isMany())
printf("(many) ");
printf(" of type %s\n",pl[j].getType().getName());
}
}
printf("*******************************END TYPES******************\n");
XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
XMLDocumentPtr doc = xmh->loadFile("stock.xml");
if ((i = xmh->getErrorCount()) > 0)
{
cout << "TestAny XML found errors:" << endl;
for (j=0;j<i;j++)
{
const char *m = xmh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
}
DataObjectPtr dob = doc->getRootDataObject();
printDataObject(stdout, dob);
return 1;
}
catch (SDORuntimeException e)
{
if (!silent)cout << "Exception in TestAny" << e << endl;
return 0;
}
}
**************************************************/
int sdotest::pete()
{
int i,j;
try {
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
xsh->defineFile("pete.xsd");
if ((i = xsh->getErrorCount()) > 0)
{
for (j=0;j<i;j++)
{
const char *m = xsh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
return 0;
}
XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
XMLDocumentPtr doc = xmh->loadFile("pete.xml");
if ((i = xmh->getErrorCount()) > 0)
{
for (j=0;j<i;j++)
{
const char *m = xmh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
return 0;
}
TypeList tl = mdg->getTypes();
//printf("***** TYPES **********************************************\n");
for (i=0;i<tl.size();i++)
{
//printf("Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
PropertyList pl = tl[i].getProperties();
for (int j=0;j<pl.size();j++)
{
//printf("Property:%s ",pl[j].getName());
//if (pl[j].isMany())
//printf( "(many) ");
//printf( " of type %s\n",pl[j].getType().getName());
}
}
//printf( "*******************************END TYPES******************\n");
DataObjectPtr dob = doc->getRootDataObject();
float f = dob->getFloat("Stock[1]/Last");
//printf("Float is %2.3f \r\n",f);
return 1;
}
catch (SDORuntimeException e)
{
cout << "Exception in Pete" << e << endl;
return 0;
}
}
int sdotest::xhtml1()
{
int i,j;
try {
DataFactoryPtr mdg = DataFactory::getDataFactory();
XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
xsh->defineFile("Atom1.0.xsd");
if ((i = xsh->getErrorCount()) > 0)
{
for (j=0;j<i;j++)
{
const char *m = xsh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
return 0;
}
XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
XMLDocumentPtr doc = xmh->loadFile("xhtml_in.xml");
if ((i = xmh->getErrorCount()) > 0)
{
for (j=0;j<i;j++)
{
const char *m = xmh->getErrorMessage(j);
if (m != 0) cout << m;
cout << endl;
}
return 0;
}
//DataObjectPtr dob = doc->getRootDataObject();
//ofstream myout("myfile");
//if (dob)SDOUtils::printDataObject(myout , dob);
xmh->save(doc,"xhtml_out.xml");
return comparefiles("xhtml_out.xml" ,"xhtml_out.txt");
}
catch (SDORuntimeException e)
{
cout << "Exception in xhtml1" << e << endl;
return 0;
}
}