00001 /******************************************************************************* 00002 * E.S.O. - ACS project 00003 * 00004 * "@(#) $Id: cdbDAOImpl.h,v 1.31 2008/09/29 09:51:19 cparedes Exp $" 00005 * 00006 * who when what 00007 * -------- ---------- ---------------------------------------------- 00008 * dvitas 2002/07/01 created 00009 */ 00010 00011 #ifndef cdbDAOImpl_H_ 00012 #define cdbDAOImpl_H_ 00013 00014 #include <cdb.h> 00015 00017 // internal class for XML tree handling 00018 00019 class CXMLTreeNode 00020 { 00021 public: 00022 CXMLTreeNode( CXMLTreeNode *pParent ); 00023 ~CXMLTreeNode(); 00024 void getAttributeNames( cdb::String &names ); 00025 00026 CXMLTreeNode* m_parent; // parent in access tree 00027 typedef std::map<cdb::String, CXMLTreeNode*> MapStringToNode; 00028 // 00029 MapStringToNode m_subNodesMap; 00030 cdb::MapStringToField m_fieldMap; 00031 cdb::String m_name; 00032 }; 00033 00035 // 00036 #ifdef _DAO_SERVANT_BUILD 00037 #include <cdbDALS.h> 00038 class DAOImpl : public virtual POA_CDB::DAO 00039 #else 00040 #include <cdbDALC.h> 00041 class DAOImpl 00042 #endif 00043 { 00044 public: 00045 //Constructor 00046 DAOImpl ( const char* curl ); 00047 DAOImpl ( CDB::DAO_ptr dao ); 00048 00049 //Destructor 00050 virtual ~DAOImpl (void); 00051 virtual cdb::Boolean isInitialized() { return m_initialized; } 00052 00054 // scalars 00055 /* 00056 * @throw cdbErrType::WrongCDBDataTypeEx 00057 */ 00058 virtual CORBA::Long get_long (const char * propertyName ); 00059 00060 /* 00061 * @throw cdbErrType::WrongCDBDataTypeEx 00062 */ 00063 virtual CORBA::Double get_double (const char * propertyName); 00064 00065 /* 00066 * @throw cdbErrType::WrongCDBDataTypeEx 00067 */ 00068 virtual char * get_string (const char * propertyName ); 00069 00070 /* 00071 * @throw cdbErrType::WrongCDBDataTypeEx 00072 * @throw cdbErrType::CDBFieldDoesNotExistEx 00073 */ 00074 virtual char * get_field_data (const char * propertyName ); 00075 00077 // sequences 00078 /* 00079 * @throw cdbErrType::WrongCDBDataTypeEx 00080 * @throw cdbErrType::CDBFieldDoesNotExistEx 00081 */ 00082 virtual ::CDB::stringSeq * get_string_seq (const char * propertyName ); 00083 00084 /* 00085 * @throw cdbErrType::WrongCDBDataTypeEx 00086 * @throw cdbErrType::CDBFieldDoesNotExistEx 00087 */ 00088 virtual ::CDB::longSeq * get_long_seq (const char * propertyName ); 00089 00090 /* 00091 * @throw cdbErrType::WrongCDBDataTypeEx 00092 * @throw cdbErrType::CDBFieldDoesNotExistEx 00093 */ 00094 virtual ::CDB::doubleSeq * get_double_seq (const char * propertyName ); 00095 00096 cdb::Boolean get_field( const cdb::String &strFieldName, cdb::Field &fld ); 00097 00098 public: 00099 ACE_CString m_name; 00100 ACE_CString m_errorMessage; 00101 00102 // internal operations 00103 protected: 00104 void Start(const char *el, const char **attr); 00105 void End(const char *el); 00106 00107 static void start(void *data, const char *el, const char **attr); 00108 static void end(void *data, const char *el); 00109 00110 // implementation 00111 protected: 00112 ACE_CString m_xml; 00113 cdb::Boolean m_initialized; 00114 00115 // temporary variables for array handling 00116 int m_inArray; 00117 cdb::String m_arrayName; 00118 00119 cdb::String m_arrayType; 00120 cdb::String m_arrayContent; 00121 00122 // XTML tree handling 00123 CXMLTreeNode* m_rootNode; 00124 CXMLTreeNode* m_currNode; 00125 00126 int m_remote; // holding info about current location of this object 00127 CDB::DAO_var m_dao; 00128 }; 00129 00130 #endif /* DAO_H_ */ 00131 00132 00133 00134 00135