#ifndef SDAIDAOBJECT_H #define SDAIDAOBJECT_H 1 /* #include #ifdef PART26 #include #include #else typedef char* DAObjectID; #endif #include */ #ifndef PART26 typedef char* SCLP23_NAME(DAObjectID); #endif // interface PID (ISO/DIS 10303-23:1996(E) 5.3.10.1) // Also, CORBA POS specification, Section 5.4 // // The PID class maintains the persistent object identifier for every // persistent object, objects of class DAObject, and objects of any class // derived directly or indirectly from DAObject. // // POS: The PID identifies one or more locations within a Datastore that // represent the persistent data of an object and generates a string // identifier for that data. An object must have a PID in order to store // its data persistently. // /* The EXPRESS ENTITY application_instance from the SDAI_data_type_schema from clause 10 in ISO 10303-22, shall be mapped to the C++ class Application_instance. The class Application_instance shall be a subtype of the C++ class DAObject and of the C++ class Entity_instance. The class DAObject is supported by the classes PID, PID_SDAI and the type SCLP23(DAObjectID) as follows: */ class SCLP23_NAME(PID) : public SCLP23_NAME(sdaiObject) { public: // These are in the IDL generated code for Part 26. I will have to think about // why they should be here (for Part 23). DAS // static PID_ptr _duplicate(PID_ptr); // static PID_ptr _narrow(SCLP23_NAME(sdaiObject_ptr)); // static PID_ptr _nil(); SCLP23_NAME(String) _datastore_type ; SCLP23_NAME(String) _pidstring ; // constructor/destructor SCLP23_NAME(PID)(); virtual ~SCLP23_NAME(PID)(); #ifndef PART26 /* The Datestore_type attribute shall identify the type of the underlying datastore. */ char* Datastore_type() const { return (char*) _datastore_type.chars(); } void Datastore_type(char *x) { _datastore_type = x; } /* This function shall return a string version of the receiver. */ char* get_PIDString(); #else virtual void datastore_type (const char * x, CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { _datastore_type = x; } virtual char * datastore_type (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { return CORBA::string_dupl(_datastore_type); } virtual char * get_PIDString (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { return CORBA::string_dupl(_pidstring); } #endif #ifdef __OSTORE__ static os_typespec* get_os_typespec(); #endif }; #ifdef PART26 //DEF_TIE_PID( SCLP23_NAME(PID) ) #endif typedef SCLP23_NAME(PID)* SCLP23_NAME(PID_ptr); typedef SCLP23_NAME(PID_ptr) SCLP23_NAME(PID_var); // interface PID_DA (ISO/DIS 10303-23:1996(E) 5.3.10.3) // Also, CORBA POS specification, Direct Access Protocol, Section 5.10.1 // // The Direct Access Protocol supports direct access to persistent data // through typed attributes organized in data objects that are defined // in a Data Definition Language (DDL). An object using this protocol // whould represent its persistent data as one or more interconnected // data objects, For uniformity, the persistent data of an object is // described as a single data object; however, that data object might be // the root of a graph of data objects interconnected by stored data // object references. If an object uses multiple data objects, the // object traverses the graph by following stored data object references. // // The PID_DA class maintains the persistent object identifier for an // application DAObject. // // POS: The Persistent Identifiers (PIDs) used by the PDS_DA contain // an object identifier that is local to the particular PDS. This value // may be accessed through this extension to the CosPersistencePID // interface. // class SCLP23_NAME(PID_DA): public SCLP23_NAME(PID) { public: SCLP23_NAME(String) _oid ; // oid (ISO/DIS 10303-23:1996(E) 5.3.10.3) // // This attribute shall set and return the string representation of the // persistent identifier, local to the Model_contents, of the DAObject // referred to by this object. // // POS: This returns the data object identifier used by this PDS for // the data object specified by the PID. The SCLP23(DAObjectID) type is // defined as an unbounded sequence of bytes that may be // vendor-dependent. // // constructor/destructor SCLP23_NAME(PID_DA)(); virtual ~SCLP23_NAME(PID_DA)(); #ifndef PART26 virtual void oid (const SCLP23_NAME(DAObjectID) x) { _oid = x; } virtual SCLP23_NAME(DAObjectID) oid () const { return (char*) _oid.chars(); } #else // virtual void oid (const SCLP26(DAObjectID) x, CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) virtual void oid (const DAObjectID x, CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { _oid = x; } // virtual SCLP26(DAObjectID) oid (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) virtual DAObjectID oid (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { return CORBA::string_dupl(_oid); } #endif #ifdef __OSTORE__ static os_typespec* get_os_typespec(); #endif }; #ifdef PART26 //DEF_TIE_PID_DA( SCLP23(PID_DA) ) #endif typedef SCLP23_NAME(PID_DA)* SCLP23_NAME(PID_DA_ptr); typedef SCLP23_NAME(PID_DA_ptr) SCLP23_NAME(PID_DA_var); // interface PID_SDAI (ISO/DIS 10303-23:1996(E) 5.3.10.2) // // The PID_SDAI class maintains the persistent object identifier for // a Model_contents object. // class SCLP23_NAME(PID_SDAI) : public SCLP23_NAME(PID) { public: SCLP23_NAME(String) _modelid ; // static PID_SDAI_ptr _duplicate(PID_SDAI_ptr); // static PID_SDAI_ptr _narrow(SCLP23_NAME(sdaiObject_ptr)); // static PID_SDAI_ptr _nil(); // constructor/destructor SCLP23_NAME(PID_SDAI)(); virtual ~SCLP23_NAME(PID_SDAI)(); // Modelid (ISO/DIS 10303-23:1996(E) 5.3.10.3) // // This attribute shall set and return the string representation of // the persistent identifier of the cluster of data for the // Model_contents referred to by this PID. // #ifndef PART26 virtual void Modelid (const char * x) { _modelid = x; } virtual char * Modelid () const { return (char*) _modelid.chars(); } #else virtual void Modelid (const char * x, CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { _modelid = x; } virtual char * Modelid (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { return CORBA::string_dupl(_modelid); } #endif #ifdef __OSTORE__ static os_typespec* get_os_typespec(); #endif }; #ifdef PART26 //DEF_TIE_PID_SDAI( SCLP23(PID_SDAI) ) #endif typedef SCLP23_NAME(PID_SDAI)* SCLP23_NAME(PID_SDAI_ptr); typedef SCLP23_NAME(PID_SDAI_ptr) SCLP23_NAME(PID_SDAI_var); // interface DAObject (ISO/DIS 10303-23:1996(E) 5.3.10.5) // Also, CORBA POS Section 5.10.2, Direct Access Protocol. // // From POS: The DAObject interface provides operations that many data // object clients need. A Datastore implementation may provide support // for these operations automatically for its data objects. A data object // is not required to support this interface. A client can obtain access // to these operations by narrowing a data object reference to the // DAObject interface. // // predefine these _ptr since they are used inside this class class SCLP23_NAME(DAObject); typedef SCLP23_NAME(DAObject)* SCLP23_NAME(DAObject_ptr); typedef SCLP23_NAME(DAObject_ptr) SCLP23_NAME(DAObject_var); class SCLP23_NAME(DAObject) : public SCLP23_NAME(sdaiObject) //class DAObject : public SCLP23_NAME(sdaiObject) { public: SCLP23_NAME(String) _dado_oid; // static DAObject_ptr _duplicate(DAObject_ptr); // static DAObject_ptr _narrow(SCLP23_NAME(sdaiObject_ptr)); // static DAObject_ptr _nil(); // dado_same (ISO/DIS 10303-23:1996(E) 5.3.10.5) // // Returns TRUE if obj points to the same object as self // // POS specification description: This returns true if the target // data object and the parameter data object are the same data object. // This operation can be used to test data object references for // identity. // // constructor/destructor SCLP23_NAME(DAObject)(); virtual ~SCLP23_NAME(DAObject)(); #ifdef PART26 // virtual SCLP26(Application_instance_ptr) create_TIE(); virtual IDL_Application_instance_ptr create_TIE(); #endif #ifndef PART26 SCLBOOL_H(Bool) dado_same(SCLP23_NAME(DAObject_ptr) obj) { // this will make the compiler happy that we used obj strcmp(obj->dado_oid(),dado_oid()); return SCLBOOL_H(BUnset); } #else virtual SCLBOOL_H(Bool) dado_same (SCLP23_NAME(DAObject_ptr) obj, CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { return SCLBOOL_H(BUnset); } #endif // Get persistent label (ISO/DIS 10303-22:1996(E) 10.11.6) // // This operation returns a persistent label for the specified // application instance. The label shall be unique within the // repository containing the SDAI-model containing the application // instance. Any subsequent request for a persistent label for the // same application instance shall return the same persistent label // in the current or nay subsequent SDAI session. // // Possible Error indicators: // // sdaiTR_NEXS The transaction has not been started // sdaiTR_NAVL The transaction is currently not available // sdaiTR_EAB The transaction ended abnormally // sdaiRP_NOPN The repository is not open // sdaiEI_NEXS The entity instance does not exist // sdaiFN_NAVL This function is not supported by the implementation // sdaiSY_ERR An underlying system error occurred // // POS specification description: This returns the object identifier // for the data object. The scope of data object identifiers is // implementation-specific, but is not guaranteed to be global. // /* jg == The return value of this function in Part 23 is PID_DA which seems wrong. We follow the CORBAservices specification here. (Persistent Object Service Specification, Section 5.10). Also note that the return value as described in the text above should be a string type. */ #ifndef PART26 SCLP23_NAME(DAObjectID) dado_oid() { return (char*) _dado_oid.chars(); } #else // virtual SCLP26(DAObjectID) dado_oid (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) virtual DAObjectID dado_oid (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { return CORBA::string_dupl(_dado_oid); } #endif // dado_pid // // POS specification description: This returns a PID_DA for the // data object. // /* jg == This function is not included in Part 23 and 26. However, it is part of interface DAObject in the specification of the Persistent Object Service. */ #ifndef PART26 SCLP23_NAME(PID_DA_ptr) dado_pid() { return 0; } #else virtual SCLP23_NAME(PID_DA_ptr) dado_pid (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { return 0; } #endif // dado_remove (ISO/DIS 10303-23:1996(E) 5.3.10.5) // // This function shall delete the object from persistent store and // releases its resources. The function need not delete the aggregate- // valued attributes of an object. // // POS specification description: This deletes the object from the // persistent store and deletes the in-memory data object. // #ifndef PART26 void dado_remove() { } #else virtual void dado_remove (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { } #endif // dado_free (ISO/DIS 10303-23:1996(E) 5.3.10.5) // // This function shall inform the implementation that it is free // to move the object back to the persistent store. // // POS specification description: This informs the PDS (Persistent // Data Service) that the data object is not required for the time // being, and the PDS may move it back to persistent store. The data // object must be preserved and must be brought back the next time it is // referenced. This operation is only a hint and is provided to improve // performance and resource usage. // #ifndef PART26 void dado_free() { } #else virtual void dado_free (CORBA::Environment &IT_env=CORBA::IT_chooseDefaultEnv ()) throw (CORBA::SystemException) { } #endif #ifdef __OSTORE__ static os_typespec* get_os_typespec(); virtual void Access_hook_in(void *object, enum os_access_reason reason, void *user_data, void *start_range, void *end_range); #endif }; /* 5.3.10.1 DAObject_SDAI */ class SCLP23_NAME(DAObject_SDAI) : public SCLP23_NAME(DAObject) { public: SCLP23_NAME(DAObject_SDAI)(); // SCLP23_NAME(DAObject_SDAI)(const SCLP23_NAME(DAObject_SDAI)&); virtual ~SCLP23_NAME(DAObject_SDAI)(); #ifdef PART26 // virtual SCLP26(Application_instance_ptr) create_TIE(); virtual IDL_Application_instance_ptr create_TIE(); #endif /* 5.3.10.1.1 Find entity instance SDAI-model */ // Model_ptr Owning_model() const; /* The Owning_model function shall implement the SDAI operation, Find entity instance SDAI-model. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ ------ ------- Object receiver Model return value 5.3.10.1.2 Find entity instance users */ // Object__list_var FindObjectUsers(const // Schema_instance__list_var& aggr) const; /* The FindObjectUsers function shall implement the SDAI operation, Find entity instance users. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ -------- -------- Instance receiver Domain aggr Result return value 5.3.10.1.3 Is same */ SCLLOG_H(Logical) IsSame(const SCLP23_NAME(sdaiObject_ptr)& otherEntity) const; /* Function: The IsSame function shall determine whether the parameter otherEntity refers to the same instance as the receiver. This function shall implement the behaviour of the EXPRESS operator (:=:). Output: This function shall return TRUE if the two instances are identical. This function shall return FALSE if the two instances are not identical. This function shall return UNKNOWN if either instance is unset. Possible error indicators: sdaiMX_NDEF // SDAI-model access not defined sdaiEI_NEXS // Entity instance does not exist sdaiTY_NDEF // Type not defined sdaiSY_ERR // Underlying system error Origin: Convenience function 5.3.10.1.4 Get attribute */ #ifdef SDAI_CPP_LATE_BINDING Any_var GetAttr(const Attribute_ptr& attDef); Any_var GetAttr(const char* attName); #endif /* The GetAttr functions shall implement the SDAI operation, Get attribute. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ ------ --------- Object receiver Attribute attDef, attName Value return value 5.3.10.1.5 Get instance type */ #ifdef SDAI_CPP_LATE_BINDING const Entity_ptr GetInstanceType() const; #endif /* Function: The GetInstanceType functions shall implement the SDAI operation, Get instance type. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ ------ -------- Object receiver Type return value 5.3.10.1.6 Is instance of */ SCLBOOL_H(Bool) IsInstanceOf(const char* typeName) const; #ifdef SDAI_CPP_LATE_BINDING SCLBOOL_H(Bool) IsInstanceOf(const Entity_ptr& otherEntity) const; #endif /* Function: The IsInstanceOf functions shall implement the SDAI operation Is instance of. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ ------ -------- Object receiver Type typeName, otherEntity Result return value 5.3.10.1.7 Is kind of */ SCLBOOL_H(Bool) IsKindOf(const char* typeName) const; #ifdef SDAI_CPP_LATE_BINDING SCLBOOL_H(Bool) IsKindOf(const Entity_ptr& theType) const; #endif /* The IsKindOf functions shall implement the SDAI operation, Is kind of. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ ------ -------- Object receiver Type typeName, theType Result return value 5.3.10.1.8 Is SDAI kind of */ SCLBOOL_H(Bool) IsSDAIKindOf(const char* typeName) const; #ifdef SDAI_CPP_LATE_BINDING SCLBOOL_H(Bool) IsSDAIKindOf(const Entity_ptr& theType) const; #endif /* The IsSDAIKindOf functions shall implement the SDAI operation, Is SDAI Kind Of. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ ------ -------- Object receiver Type typeName, theType Result return value 5.3.10.1.9 Test attribute */ #ifdef SDAI_CPP_LATE_BINDING SCLBOOL_H(Bool) TestAttr(const Attribute_ptr& attDef); SCLBOOL_H(Bool) TestAttr(const char* attName) const; #endif /* The TestAttr functions shall implement the SDAI operation, Test attribute. The following specifies the coorespondence between each SDAI input/output and its equivalent specified in this Part. SDAI C++ ------ --------- Object receiver Attribute attDef, attName Result return value 5.3.10.1.10 Get instance type name */ #ifndef SDAI_CPP_LATE_BINDING char * GetInstanceTypeName() const; #endif /* Function: The GetInstanceType function shall retrieve the name of the type of the receiver. Output: This function shall return a String which contains the name of the type of the receiver. The returned name shall be the name as it appears in the Dictionary Model. Possible error indicators: sdaiMX_NDEF // SDAI-model access not defined sdaiEI_NEXS // Entity instance does not exist sdaiSY_ERR // Underlying system error Origin: Convenience function */ #ifdef __OSTORE__ static os_typespec* get_os_typespec(); virtual void Access_hook_in(void *object, enum os_access_reason reason, void *user_data, void *start_range, void *end_range); #endif }; typedef SCLP23_NAME(DAObject_SDAI)* SCLP23_NAME(DAObject_SDAI_ptr); typedef SCLP23_NAME(DAObject_SDAI_ptr) SCLP23_NAME(DAObject_SDAI_var); class SCLP23_NAME(DAObject__set) { public: #ifdef __OSTORE__ os_Collection &_rep; os_Cursor _cursor; SCLBOOL_H(Bool) _first; #endif SCLP23_NAME(DAObject__set)(int = 16); ~SCLP23_NAME(DAObject__set)(); SCLP23_NAME(DAObject_ptr) retrieve(int index); int is_empty(); #ifndef __OSTORE__ SCLP23_NAME(DAObject_ptr)& operator[](int index); #endif void Insert(SCLP23_NAME(DAObject_ptr), int index); void Append(SCLP23_NAME(DAObject_ptr)); void Remove(int index); #ifndef __OSTORE__ int Index(SCLP23_NAME(DAObject_ptr)); void Clear(); #endif int Count(); #ifdef __OSTORE__ // cursor stuff SCLP23_NAME(DAObject_ptr) first(); SCLP23_NAME(DAObject_ptr) next(); SCLP23_NAME(Integer) more(); #endif private: void Check(int index); private: SCLP23_NAME(DAObject_ptr)* _buf; int _bufsize; int _count; public: #ifdef __OSTORE__ static os_typespec* get_os_typespec(); #endif }; typedef SCLP23_NAME(DAObject__set)* SCLP23_NAME(DAObject__set_ptr); typedef SCLP23_NAME(DAObject__set_ptr) SCLP23_NAME(DAObject__set_var); #endif