00001
00042 #ifndef INC_RVC_DBELEM_H
00043 #define INC_RVC_DBELEM_H
00044
00045 #ifndef INC_RVC_DBTABLE_H
00046 #include <rvc/dbtable.h>
00047 #endif
00048
00049 #ifndef INC_RVC_ELEMENT_H
00050 #include <rvc/element.h>
00051 #endif
00052
00053
00054 #ifndef GENERATING_DOXYGEN_OUTPUT
00055
00056 struct DBLISTELMT;
00057 namespace RVC {
00058 class GEOSPATIAL;
00059 }
00060 #endif // GENERATING_DOXYGEN_OUTPUT
00061
00062 namespace RVC {
00063
00066 class DBASE_ELEMENT : public DBASE {
00067 public:
00068
00069 class ATTACHMENTITEM;
00070 class GETOBJFILTER_ISSELECTABLE;
00071 typedef SIMPLE_ARRAY<ATTACHMENTITEM> ATTACHMENTARRAY;
00072
00073 typedef SIMPLE_ARRAY<DBLISTELMT> DBLIST;
00074
00076 DBASE_ELEMENT (
00077 OBJTYPE ObjTypeParent,
00078 ELEMTYPE ElemType
00079 );
00080
00082 DBASE_ELEMENT (
00083 const RVC::DBASE_ELEMENT& rhs
00084 );
00085
00087 virtual ~DBASE_ELEMENT (
00088 );
00089
00091 RVC::DBASE_ELEMENT& operator= (
00092 const RVC::DBASE_ELEMENT& rhs
00093 );
00094
00096 ERRVALUE AddAttachment (
00097 const RVC::ELEMENT& elem,
00098 const RVC::DBASE_ELEMENT::ATTACHMENTITEM& item
00099 );
00100
00102 ERRVALUE AddAttachments (
00103 const RVC::ELEMENT& elem,
00104 const RVC::DBASE_ELEMENT::ATTACHMENTARRAY& items
00105 );
00106
00109 INT32 AppendDBList (
00110 INT32 ElemNum,
00111 const DBLIST& DBList
00112 );
00113
00116 INT32 AppendDBList (
00117 INT32 ElemNum,
00118 const DBLISTELMT& item
00119 );
00120
00122 ERRVALUE CleanDBList (
00123 );
00124
00127 bool CompareElementRecords (
00128 INT32 LhsElemNum,
00129 const DBASE_ELEMENT& rhs,
00130 INT32 RhsElemNum,
00131 const SIMPLE_ARRAY<INT32>& TableMatch,
00132 double threshhold = 0.0
00133 ) const;
00134
00137 ERRVALUE ConvertStyleAssignTableTo (
00138 DBASE_ELEMENT& DestDBaseObj
00139 );
00140
00142 ERRVALUE CopyDatabaseTo (
00143 RVC::GEOSPATIAL& DestParentObj,
00144 const SIMPLE_ARRAY<INT32>& TransList,
00145 COPYFLAG flags
00146 );
00147
00149 ERRVALUE CopyDatabaseTo (
00150 RVC::GEOSPATIAL& DestParentObj,
00151 RVC::DBASE_ELEMENT& DestDBaseObj,
00152 const DBASE::ELEMTRANSLIST& TransList,
00153 COPYFLAG flags
00154 );
00155
00157 int GetAttachedElements (
00158 const RVC::DBTABLE::RECORD& record,
00159 SIMPLE_ARRAY<INT32>& ElementList,
00160 ELEMTYPE ElemType = ELEMTYPE_Empty
00161 ) const;
00162
00164 int GetAttachedElements (
00165 const RVC::DBTABLE::RECORD& record,
00166 SIMPLE_ARRAY<RVC::ELEMENT>& ElementList,
00167 ELEMTYPE ElemType = ELEMTYPE_Empty
00168 ) const;
00169
00171 ERRVALUE GetAttachedRecordList (
00172 INT32 ElemNum,
00173 DBLIST& DBList,
00174 FINDFLAG FindFlag = FINDFLAG_AllAttached,
00175 INT32 BaseTableNum = -1
00176 ) const;
00177
00180 INT32 GetAttachedRecordNumbers (
00181 const RVC::ELEMENT& element,
00182 const RVC::DBTABLE& table,
00183 SIMPLE_ARRAY<INT32>& recordnums,
00184 FINDFLAG findflags = FINDFLAG_AllAttached
00185 ) const;
00186
00188 INT32 GetAttachments (
00189 const RVC::ELEMENT& elem,
00190 RVC::DBASE_ELEMENT::ATTACHMENTARRAY& items
00191 ) const;
00192
00195 INT32 GetDBListItemSize (
00196 INT32 ItemNum,
00197 bool ExcludeInternal = false
00198 ) const;
00199
00202 INT32 GetDBListMaxItemSize (
00203 ) const;
00204
00207 INT32 GetDBListNumElements (
00208 ) const;
00209
00212 static ELEMTYPE GetDftElemType (
00213 RVC::OBJTYPE ObjType
00214 );
00215
00217 ELEMTYPE GetElemType (
00218 ) const { return (m_ElemType); }
00219
00222 bool HasAttachedElements (
00223 const RVC::DBTABLE::RECORD& record,
00224 ELEMTYPE ElemType = ELEMTYPE_All
00225 ) const;
00226
00227
00229 ERRVALUE JoinDatabaseTo (
00230 RVC::DBASE_ELEMENT& DestDatabase,
00231 const SIMPLE_ARRAY<INT32>& TransList,
00232 RVC::DBASE::COPYFLAG CopyFlags = RVC::DBASE::COPYFLAG_None,
00233 RVC::DBASE::JOINFLAGS JoinFlags = RVC::DBASE::JOINFLAG_None,
00234 INT32 *pNextElemID = 0,
00235 ELEMTYPE SrcElemType = ELEMTYPE_Empty,
00236 ELEMTYPE DestElemType = ELEMTYPE_Empty
00237 );
00238
00240 ERRVALUE JoinDatabaseTo (
00241 RVC::DBASE_ELEMENT& DestDatabase,
00242 const DBASE::ELEMTRANSLIST& TransList,
00243 RVC::DBASE::COPYFLAG CopyFlags = RVC::DBASE::COPYFLAG_None,
00244 RVC::DBASE::JOINFLAGS JoinFlags = RVC::DBASE::JOINFLAG_None,
00245 INT32 *pNextElemID = 0,
00246 ELEMTYPE SrcElemType = ELEMTYPE_Empty,
00247 ELEMTYPE DestElemType = ELEMTYPE_Empty
00248 );
00249
00251 ERRVALUE OpenAsSubobject (
00252 const RVC::OBJITEM& ParentObjItem,
00253 #ifdef RVC_CREDENTIALS_MANDATORY
00254 OPENMODE mode,
00255 MDLGPARENT dlgparent,
00256 const CREDENTIALS *pCredentials
00257 #else
00258 OPENMODE mode = OPENMODE_Read,
00259 MDLGPARENT dlgparent = 0,
00260 const CREDENTIALS *pCredentials = 0
00261 #endif
00262 );
00263
00265 ERRVALUE OpenAsSubobject (
00266 const RVC::GEOSPATIAL& parent,
00267 #ifdef RVC_CREDENTIALS_MANDATORY
00268 OPENMODE mode,
00269 MDLGPARENT dlgparent,
00270 const CREDENTIALS *pCredentials
00271 #else
00272 OPENMODE mode = OPENMODE_Read,
00273 MDLGPARENT dlgparent = 0,
00274 const CREDENTIALS *pCredentials = 0
00275 #endif
00276 );
00277
00280 INT32 ReadDBList (
00281 INT32 ElemNum,
00282 DBLIST& DBList
00283 ) const;
00284
00286 ERRVALUE RemoveAttachment (
00287 const RVC::ELEMENT& elem,
00288 const RVC::DBASE_ELEMENT::ATTACHMENTITEM& item
00289 );
00290
00292 ERRVALUE RemoveAttachments (
00293 const RVC::ELEMENT& elem,
00294 const RVC::DBASE_ELEMENT::ATTACHMENTARRAY& items
00295 );
00296
00298 ERRVALUE ResizeDBList (
00299 INT32 NumItems
00300 );
00301
00303 ERRVALUE ResizeDBListItem (
00304 INT32 ElemNum,
00305 INT32 NumItems
00306 );
00307
00309 ERRVALUE SwapDBList (
00310 INT32 Item1,
00311 INT32 Item2
00312 );
00313
00316 INT32 WriteDBList (
00317 INT32 ElemNum,
00318 const DBLIST& DBList
00319 );
00320
00323 INT32 UnattachDBList (
00324 INT32 ElemNum,
00325 const DBLIST& DBList
00326 );
00327
00330 ERRVALUE UpdateDBListNumElements (
00331 INT32 NumElements
00332 );
00333
00334 protected:
00335
00336 #ifndef GENERATING_DOXYGEN_OUTPUT
00338 ERRVALUE JoinPointDatabaseToLow (
00339 RVC::DBASE_ELEMENT& DestDatabase,
00340 const SIMPLE_ARRAY<INT32>& PointTransList,
00341 const SIMPLE_ARRAY<INT32>& NodeTransList,
00342 RVC::DBASE::COPYFLAG CopyFlags = RVC::DBASE::COPYFLAG_None,
00343 RVC::DBASE::JOINFLAGS JoinFlags = RVC::DBASE::JOINFLAG_None,
00344 INT32 *pNextElemID = 0,
00345 ELEMTYPE SrcElemType = ELEMTYPE_Empty,
00346 ELEMTYPE DestElemType = ELEMTYPE_Empty
00347 );
00348 #endif // GENERATING_DOXYGEN_OUTPUT
00349
00350 private:
00351 #ifndef GENERATING_DOXYGEN_OUTPUT
00352
00353 OBJTYPE m_ObjType;
00354 ELEMTYPE m_ElemType;
00355
00356
00357 virtual OBJTYPE v_GetDftObjectType () const;
00358 virtual bool v_IsMultiObject () const;
00359
00360 #endif // GENERATING_DOXYGEN_OUTPUT
00361
00362 };
00363
00364
00365 class DBASE_ELEMENT::ATTACHMENTITEM {
00366 public:
00367
00369 ATTACHMENTITEM (
00370 ) : m_TableNum(TABLE_Invalid), m_RecordNum(RECORD_New) {}
00371
00373 ATTACHMENTITEM (
00374 const RVC::DBTABLE& table,
00375 INT32 recordnum
00376 );
00377
00380 INT32 GetTableNum (
00381 ) const {return (m_TableNum);}
00382
00385 INT32 GetRecordNum (
00386 ) const {return (m_RecordNum);}
00387
00389 void SetTableNum (
00390 INT32 TableNum
00391 ) {m_TableNum = TableNum;}
00392
00394 void SetRecordNum (
00395 INT32 RecordNum
00396 ) {m_RecordNum = RecordNum;}
00397
00398 private:
00399 #ifndef GENERATING_DOXYGEN_OUTPUT
00400
00401 INT32 m_TableNum;
00402 INT32 m_RecordNum;
00403
00404 operator const DBLISTELMT* (
00405 ) const {return (reinterpret_cast<const DBLISTELMT*>(this));}
00406
00407 operator DBLISTELMT* (
00408 ) {return (reinterpret_cast<DBLISTELMT*>(this));}
00409
00410 friend class DBASE_ELEMENT;
00411 #endif // GENERATING_DOXYGEN_OUTPUT
00412 };
00413
00415 class DBASE_ELEMENT::GETOBJFILTER_ISSELECTABLE : public RVC::GETOBJFILTER {
00416 public:
00417
00418
00419
00420
00421
00422 GETOBJFILTER_ISSELECTABLE (
00423 bool bCreateIfNotExist = false
00424 );
00425
00426
00427
00428
00429
00430
00431 GETOBJFILTER_ISSELECTABLE (
00432 RVC::OBJTYPESET& type,
00433 bool bCreateIfNotExist = false
00434 );
00435
00436 private:
00437 #ifndef GENERATING_DOXYGEN_OUTPUT
00438 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00439 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00440 virtual bool v_IsValidParent (const RVC::OBJITEM& objitem);
00441 RVC::OBJTYPESET m_Types;
00442 bool m_bCreateIfNotExist;
00443 #endif // GENERATING_DOXYGEN_OUTPUT
00444 };
00445
00446 }
00447
00448 #endif // INC_RVC_DBELEM_H