diff options
author | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
---|---|---|
committer | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
commit | bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a (patch) | |
tree | 38a92061c0793434c4be189f1d70c3458b6bc41d /tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/DataFactory.h |
Move Tuscany from Incubator to top level.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/DataFactory.h')
-rw-r--r-- | tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/DataFactory.h | 806 |
1 files changed, 806 insertions, 0 deletions
diff --git a/tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/DataFactory.h b/tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/DataFactory.h new file mode 100644 index 0000000000..32e0782ee0 --- /dev/null +++ b/tags/cpp-sdo-1.0.incubating-M3/runtime/core/src/commonj/sdo/DataFactory.h @@ -0,0 +1,806 @@ +/* + * 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$ */ + +#ifndef _DATAFACTORY_H_ +#define _DATAFACTORY_H_ + +#include "commonj/sdo/export.h" + +#include "commonj/sdo/TypeList.h" + +#include "commonj/sdo/RefCountingObject.h" +#include "commonj/sdo/RefCountingPointer.h" +#include "commonj/sdo/SDODate.h" +#include "commonj/sdo/DASValue.h" +#include "commonj/sdo/SDOString.h" + + +namespace commonj{ +namespace sdo{ + +class DataObject; +class Type; + +/** + * DataFactory holds metadata and creates DataObjects. + * + * The DataFactory holds properties and types loaded from XSD, or + * created using the DataFactory API. + */ + +class DataFactory : public RefCountingObject +{ + public: + + + /** + * getDataFactory is static and gets a data factory + * + * Static method to get a new data factory, with a set of base Types defined. + * With the data factory returned, either load Type definitions + * from XSD, or use the DataFactory APIs to define the types. + */ + + static SDO_API DataFactoryPtr getDataFactory(); + + virtual SDO_API ~DataFactory(); + + + /** + * DataFactory::clone copies a data factory + * + * Copy the data factory, and return a new data factory which + * has the same properties and types, but is still able to have + * new types added to it. + */ + + SDO_API virtual DataFactoryPtr clone(); + + /** + * DataFactory::create creates a data object. + * + * Create a data object based on the type specified as a parameter + * Once a data object has been created by this factory, the metadata + * (types and properties) may no longer be altered. + */ + + SDO_API virtual DataObjectPtr create(const char* uri, const char* typeName) = 0; + + SDO_API virtual DataObjectPtr create(const SDOString& uri, const SDOString& typeName) = 0; + + SDO_API virtual DataObjectPtr create(const Type& type) = 0; + + /** + * DataFactory::getType gets a type back from the factory. + * + * Get a type as specified in the data factory. Useful for creating + * data objects or querying properties. + */ + + virtual const Type& getType(const char* uri, const char* inTypeName) const = 0; + + virtual const Type& getType(const SDOString& uri, const SDOString& inTypeName) const = 0; + + + /** + * DataFactory::getTypes gets a list of types back from the factory. + * + * Get all the types available within this data factory. Useful for + * validating whether a data object is of the correct type to be + * usable. + */ + + virtual TypeList getTypes() const = 0; + + /** + * DataFactory::addType adds a type definition. + * + * Add a type defintion to the factory. (Properties may be added later). + * The type is defined by its uri and name. + * -# The type may be sequenced - and therefore work with a sequence API. + * -# The type may be open, indicating that it may have extra properties + * added at runtime. + * -# The type may be abstract, so the data factory will not permit creation + * of instances. + * -# The type may be a data type, indicating that is will not have properties. + * The Type may inherit from another type, but that is specified later with a + * call to setBaseType(). + */ + + + virtual SDO_API void addType(const char* uri, const char* inTypeName, + bool isSequenced = false, + bool isOpen = false, + bool isAbstract = false, + bool isDataType = false) = 0; + + virtual SDO_API void addType(const SDOString& uri, const SDOString& inTypeName, + bool isSequenced = false, + bool isOpen = false, + bool isAbstract = false, + bool isDataType = false) = 0; + + + /** + * DataFactory::setBaseType allows inheritance + * + * The type specified second in the parameters becomes the basetype + * of the first parameter. + * The second type will have all the properties of its baser type, followed + * by any additional properties of its own. The property indices of the properties + * of the subclass will begin at one more than the total number of + * properties of the supertype + * This relationship is fixed when the first data object of any type is + * created by the factory. Up to that point the base type may be changed. + * + */ + + virtual SDO_API void setBaseType( + const Type& type, + const Type& base, + bool isRestriction = false) = 0; + + virtual SDO_API void setBaseType( + const char* typeuri, + const char* typenam, + const char* baseuri, + const char* basename, + bool isRestriction = false) = 0; + + virtual SDO_API void setBaseType( + const SDOString& typeuri, + const SDOString& typenam, + const SDOString& baseuri, + const SDOString& basename, + bool isRestriction = false) = 0; + + + /** + * Generate a typesafe interface for a given data factory + * test code. + */ + + virtual SDO_API bool generateInterface(const char* fileroot, + const char *factoryname) = 0; + + virtual SDO_API bool generateInterface(const SDOString& fileroot, + const SDOString& factoryname) = 0; + + + + /** + * DataFactory::setAlias sets an alternative name + * + * A Type may be known to the data factory by several different names. + * This method adds a new name for an existing property. + * + */ + + virtual SDO_API void setAlias(const char* typeuri, + const char* typenam, + const char* alias) = 0; + + virtual SDO_API void setAlias(const SDOString& typeuri, + const SDOString& typenam, + const SDOString& alias) = 0; + + /** + * DataFactory::addPropertyToType adds properties + * + * The various addPropertyToType methods add a property to an + * existing type in the factory, specifying the name of the new property, + * and the type of the new property - which must also be an existing type + * in this factory. + * -# The new property may be many-valued - so it will be a list of values. + * -# The property may be read-only , and may not be altered by user code - + * However the value may be changed by data access service code. + * -# The property may be containment. + * The type of a property may be DataType, or DataObjectType (see Types). + * If the property is a DataType, then the actual value of the property is held + * within the data object containing the property. + * If the property is a DataObjectType, it may be containment, or reference. + * Containment indicates that the value of the property is contained in the + * data object, whilst reference indicates that the property is only a pointer to + * a value somewhere else in the data graph. + * + */ + + + virtual SDO_API void addPropertyToType(const char* uri, + const char* inTypeName, + const char* propname, + const char* propTypeUri, + const char* propTypeName, + bool isMany, + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const SDOString& uri, + const SDOString& inTypeName, + const SDOString& propname, + const SDOString& propTypeUri, + const SDOString& propTypeName, + bool isMany , + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const char* uri, + const char* inTypeName, + const char* propname, + const Type& propType, + bool isMany , + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const SDOString& uri, + const SDOString& inTypeName, + const SDOString& propname, + const Type& propType, + bool isMany , + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const Type& type, + const char* propname, + const Type& propType, + bool isMany , + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const Type& type, + const SDOString& propname, + const Type& propType, + bool isMany , + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const Type& type, + const char* propname, + const char* propTypeUri, + const char* propTypeName, + bool isMany , + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const Type& type, + const SDOString& propname, + const SDOString& propTypeUri, + const SDOString& propTypeName, + bool isMany , + bool isReadOnly , + bool isContainment ) = 0; + + virtual SDO_API void addPropertyToType(const char* uri, + const char* inTypeName, + const char* propname, + const char* propTypeUri, + const char* propTypeName, + bool isMany = false) =0; + + virtual SDO_API void addPropertyToType(const SDOString& uri, + const SDOString& inTypeName, + const SDOString& propname, + const SDOString& propTypeUri, + const SDOString& propTypeName, + bool isMany = false) =0; + + virtual SDO_API void addPropertyToType(const char* uri, + const char* inTypeName, + const char* propname, + const Type& propType, + bool isMany = false) =0; + + virtual SDO_API void addPropertyToType(const SDOString& uri, + const SDOString& inTypeName, + const SDOString& propname, + const Type& propType, + bool isMany = false) =0; + + virtual SDO_API void addPropertyToType(const Type& type, + const char* propname, + const Type& propType, + bool isMany = false) =0; + + virtual SDO_API void addPropertyToType(const Type& type, + const SDOString& propname, + const Type& propType, + bool isMany = false) =0; + + virtual SDO_API void addPropertyToType(const Type& type, + const char* propname, + const char* propTypeUri, + const char* propTypeName, + bool isMany = false) =0; + + virtual SDO_API void addPropertyToType(const Type& type, + const SDOString& propname, + const SDOString& propTypeUri, + const SDOString& propTypeName, + bool isMany = false) =0; + + /** + * DataFactory::setOpposite sets an opposite name + * + * NOT IMPLEMENTED. + * + */ + + virtual SDO_API void setOpposite( + const Type& type, + const char* propName, + const Type& oppositetype, + const char* oppositePropName) = 0; + + virtual SDO_API void setOpposite( + const Type& type, + const SDOString& propName, + const Type& oppositetype, + const SDOString& oppositePropName) = 0; + + /** + * DataFactory::setAlias sets a property alias name + * + * A property, like a type, may be known to the factory by several + * names. + */ + + virtual SDO_API void setAlias(const char* typeuri, + const char* typname, + const char* propname, + const char* alias) = 0; + + virtual SDO_API void setAlias(const SDOString& typeuri, + const SDOString& typname, + const SDOString& propname, + const SDOString& alias) = 0; + + /** + * DataFactory::setPropertySubstitute sets a substitute for a property + * + * A property is of a specified type. However this method specifies another type + * which will be accepted by the data factory at runtime as a substitute for this + * property, and will be inserted into the parent data object as though it was + * a value for this property. The substitute name is then used for this property + * as a sort of alias. + * names. + */ + + virtual SDO_API void setPropertySubstitute( + const char* uri, + const char* inTypeName, + const char* propname, + const char* subname, + const char* subTypeUri, + const char* subTypeName) = 0; + + virtual SDO_API void setPropertySubstitute( + const SDOString& uri, + const SDOString& inTypeName, + const SDOString& propname, + const SDOString& subname, + const SDOString& subTypeUri, + const SDOString& subTypeName) = 0; + + virtual SDO_API void setPropertySubstitute( + const Type& containertype, + const char* propname, + const char* subname, + const Type& subtype) = 0; + + virtual SDO_API void setPropertySubstitute( + const Type& containertype, + const SDOString& propname, + const SDOString& subname, + const Type& subtype) = 0; + + + /** + * DataFactory::setDefault sets a default value for a property + * + * When querying the value of a property of a data object, that property + * may be set - indicating that a value has been assigned, or unset - indicating that + * no value has yet been assigned. + * If there is no value assigned, then a default value may be returned for that + * property. + * This method allows the data factory to define that default value. + * There is no default value for a DataObjectType. There are overloads for + * each of the primitive DataTypes. + */ + + virtual SDO_API void setDefault( + const Type& t, + const char* propname, + bool b ) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname, + bool b ) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + char c) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + char c) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + wchar_t c) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + wchar_t c) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + char* c) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + SDOString& outstr) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + short s) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + short s) = 0; + + +#if __WORDSIZE !=64 + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + long l) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + long l) = 0; +#endif + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + int64_t i) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + int64_t i) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + float f) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + float f) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + long double d) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + long double d) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + const wchar_t* c, + unsigned int len) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + const wchar_t* c, + unsigned int len) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + const char* c, + unsigned int len) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + const SDOString& c, + unsigned int len) = 0; + + + virtual SDO_API void setDefault( + const Type& t, + const char* propname , + const SDODate dat) = 0; + + virtual SDO_API void setDefault( + const Type& t, + const SDOString& propname , + const SDODate dat) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname, + bool b ) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname, + bool b ) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + char c) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + char c) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + wchar_t c) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + wchar_t c) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + char* c) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + SDOString& c) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + short s) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + short s) = 0; + + +#if __WORDSIZE !=64 + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + long l) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + long l) = 0; + +#endif + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + int64_t i) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + int64_t i) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + float f) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + float f) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + long double d) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + long double d) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + const wchar_t* c, + unsigned int len) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + const wchar_t* c, + unsigned int len) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + const char* c, + unsigned int len) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + const SDOString& c, + unsigned int len) = 0; + + virtual SDO_API void setDefault( + const char* typuri, + const char* typnam, + const char* propname , + const SDODate dat) = 0; + + virtual SDO_API void setDefault( + const SDOString& typuri, + const SDOString& typnam, + const SDOString& propname , + const SDODate dat) = 0; + + + /** + * DAS values are used by a DAS implementation + */ + + virtual SDO_API void setDASValue( + const Type& type, + const char* name, + DASValue* value) = 0; + + virtual SDO_API void setDASValue( + const Type& type, + const SDOString& name, + DASValue* value) = 0; + + virtual SDO_API void setDASValue( + const char* typeuri, + const char* typenam, + const char* name, + DASValue* value) = 0; + + virtual SDO_API void setDASValue( + const SDOString& typeuri, + const SDOString& typenam, + const SDOString& name, + DASValue* value) = 0; + + virtual SDO_API DASValue* getDASValue( + const Type& type, + const char* name) const = 0; + + virtual SDO_API DASValue* getDASValue( + const Type& type, + const SDOString& name) const = 0; + + virtual SDO_API DASValue* getDASValue( + const char* typeuri, + const char* typenam, + const char* name) const = 0; + + virtual SDO_API DASValue* getDASValue( + const SDOString& typeuri, + const SDOString& typenam, + const SDOString& name) const = 0; + + virtual SDO_API void setDASValue( + const Type& type, + const char* propertyName, + const char* name, + DASValue* value) = 0; + + virtual SDO_API void setDASValue( + const Type& type, + const SDOString& propertyName, + const SDOString& name, + DASValue* value) = 0; + + virtual SDO_API void setDASValue( + const char* typeuri, + const char* typenam, + const char* propertyName, + const char* name, + DASValue* value) = 0; + + virtual SDO_API void setDASValue( + const SDOString& typeuri, + const SDOString& typenam, + const SDOString& propertyName, + const SDOString& name, + DASValue* value) = 0; + + virtual SDO_API DASValue* getDASValue( + const Type& type, + const char* propertyName, + const char* name) const = 0; + + virtual SDO_API DASValue* getDASValue( + const Type& type, + const SDOString& propertyName, + const SDOString& name) const = 0; + + virtual SDO_API DASValue* getDASValue( + const char* typeuri, + const char* typenam, + const char* propertyName, + const char* name) const = 0; + + virtual SDO_API DASValue* getDASValue( + const SDOString& typeuri, + const SDOString& typenam, + const SDOString& propertyName, + const SDOString& name) const = 0; + + virtual void resolve() = 0; + + }; +}; +}; +#endif //_DATAFACTORY_H_ |