blob: d86b896679cbfe781168f4138e3b508bb41c9841 [file]
/*
*
* 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:14 $ */
#include "samples.h"
using namespace std;
void Query::sample()
{
cout << " ********** Query sample *******************" << endl;
DataFactoryPtr mdg = DataFactory::getDataFactory();
/**
* Create some types
*/
mdg->addType("myspace","Company");
mdg->addType("myspace","Department");
mdg->addType("myspace","Employee");
/* Now add the properties to the types...*/
const Type& tstring = mdg->getType("commonj.sdo","String");
const Type& tbool= mdg->getType("commonj.sdo","Boolean");
const Type& tint= mdg->getType("commonj.sdo","Integer");
const Type& tc = mdg->getType("myspace","Company");
const Type& td = mdg->getType("myspace","Department");
const Type& te = mdg->getType("myspace","Employee");
/**
* The company
*/
mdg->addPropertyToType(tc,"name",tstring); // single string name
mdg->addPropertyToType(tc,"departments",
td,true); // many departments
mdg->addPropertyToType(tc,"employee of the month"
, te, false, false, false); // reference to employee
/**
* The department
*/
mdg->addPropertyToType(td,"name", tstring); // single string name
mdg->addPropertyToType(td,"employees",te,
true,false,true); // many employees
/**
* The employee
*/
mdg->addPropertyToType(te,"isFullTime",tbool);
mdg->addPropertyToType(te,"employeeNumber",tint);
mdg->addPropertyToType(te,"name",tstring);
const Type& tcc = mdg->getType("myspace","Company");
DataObjectPtr dor = mdg->create((Type&)tcc);
// The departments
DataObjectPtr dept = dor->createDataObject("departments");
dept->setCString("name","Shipping");
DataObjectPtr dept2 = dor->createDataObject("departments");
dept2->setCString("name","Buying");
// The employees
DataObjectPtr emp1 = dept->createDataObject("employees");
DataObjectPtr emp2 = dept->createDataObject("employees");
DataObjectPtr emp3 = dept->createDataObject("employees");
DataObjectPtr emp4 = dept2->createDataObject("employees");
emp1->setBoolean("isFullTime",true);
emp1->setInteger("employeeNumber",65443);
emp1->setCString("name","Norman");
emp2->setBoolean("isFullTime",false);
emp2->setInteger("employeeNumber",64778);
emp2->setCString("name","Carl");
emp3->setBoolean("isFullTime",true);
emp3->setInteger("employeeNumber",61990);
emp3->setCString("name","Amanda");
emp4->setBoolean("isFullTime",true);
emp4->setInteger("employeeNumber",56789);
emp4->setCString("name","Donna");
dor->setDataObject("employee of the month",emp4); // Donna is referenced.
try {
// access the first employee of the first department who is not full time
DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[isFullTime=false]");
cout << "Carl should be the first part timer: " << dob1->getCString("name") << " is." <<endl;
// get the same employee by index
DataObjectPtr dob2 = dor->getDataObject("departments[1]/employees[2]");
cout << "Carl should be employees[2]:" << dob2->getCString("name") << " is." << endl;
// use the dot notation to get the same employee
DataObjectPtr dob3 = dor->getDataObject("departments.0/employees.1");
cout << "Carl should be employees.1:" << dob3->getCString("name") << " is." << endl;
// get the reference...
DataObjectPtr dob4 = dor->getDataObject("employee of the month");
cout << "Donna should be employee of the month:" << dob4->getCString("name") << " is." << endl;
// And by employee number...
DataObjectPtr dob5 = dor->getDataObject("departments[2]/employees[employeeNumber=56789]");
cout << "Donna should be employee 56789:" << dob5->getCString("name") << " is." << endl;
// If the query yields no value because the element doesnt exist...
try
{
DataObjectPtr dob6 = dor->getDataObject("departments[1]/employees[employeeNumber=56789]");
cout << "Did not get the expected exception" << endl;
}
catch (SDORuntimeException e)
{
cout << "Expected an IndexOutOfRangeException and got " << e.getEClassName() << endl;
}
// If the query yields no value because the path is invalid...
try
{
DataObjectPtr dob7 = dor->getDataObject("departments[fish]/employees[0]");
cout << "Did not get the expected exception" << endl;
}
catch (SDORuntimeException e)
{
cout << "Expected an PathNotFoundException and got " << e.getEClassName() << endl;
}
}
catch (SDORuntimeException e)
{
cout << "Unexpected error in Query " << e << endl;
}
cout << " ********** End Query Sample **************" << endl;
}