13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*
23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (C) 2014 The Android Open Source Project
33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License");
53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * you may not use this file except in compliance with the License.
63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * You may obtain a copy of the License at
73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *      http://www.apache.org/licenses/LICENSE-2.0
93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Unless required by applicable law or agreed to in writing, software
113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS,
123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * See the License for the specific language governing permissions and
143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * limitations under the License.
153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef SYNCML_DM_ARCHIVE_H
183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#define SYNCML_DM_ARCHIVE_H
193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef __cplusplus
213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#error "This is a C++ header file; it requires C++ to compile."
223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Header Name: SyncML_DM_Archive.H
273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    General Description: This file contains the declaration for the SyncML_DM_Archive class.
293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SyncML_DM_Archive is the ABC (Abstract Base Class) of all Archive classes
303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "xpl_Time.h"
343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmMemory.h"
353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmEventLogger.h"
363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "SyncML_Commit_Log.H"
383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCLASS DECLARATION
423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyclass DMNode;
453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyclass DMTree;
463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyclass CEnv;
473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyclass SyncML_DM_Archive
493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  public:
513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMEventLogger& GetEventLogger() { return oEventLogger; }
533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Class constructor
553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * The caller is responsible for allocating/freeing the two fields
563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * to this function
573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SyncML_DM_Archive(CEnv* env, CPCHAR pURI, CPCHAR path) ;
593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Class destructor (virtual because of the inheritance of
613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * other classes who might be referenced as SyncML_DM_Archive)
623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual ~SyncML_DM_Archive() ;
643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual SYNCML_DM_RET_STATUS_T Init(DMTree* pTree);
663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Serialization and Deserialization methods must be overridden
683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * by any concrete archive implementation
693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * The caller is responsible for allocating/freeing the DMTree
703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * for the serialize function
713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    */
723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual SYNCML_DM_RET_STATUS_T serialize(DMTree* tree) = 0;
733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual SYNCML_DM_RET_STATUS_T deserialize(DMTree* tree,
743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                               BOOLEAN bIsReload = FALSE) = 0;
753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Operators to allocate and delete memory for operation */
773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    inline void* operator new(size_t sz)
783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return (DmAllocMem(sz));
803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    inline void operator delete(void* buf)
833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       DmFreeMem(buf);
853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Accessor for the last modification time of the archive
883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    */
893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual XPL_CLK_CLOCK_T getLastModifiedTime() = 0;
903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Get last persisted time */
923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual XPL_CLK_CLOCK_T getLastSavedTime() = 0;
933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Check permission */
953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual BOOLEAN verifyPermission(XPL_FS_OPEN_MODE_T permission) const {return TRUE;}
963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Update last accessed time */
983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    void setLastAccessedTime(XPL_CLK_CLOCK_T lastAccessedTime);
993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Get last accessed time */
1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    XPL_CLK_CLOCK_T getLastAccessedTime();
1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    BOOLEAN  isWritableExist() const {return m_bWritableExist;}
1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    void  setWritableExist( BOOLEAN bWritableExist ) {m_bWritableExist = bWritableExist;}
1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    //Re-Set last persisted time
1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual void serializeDone() = 0;
1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Accessors for setting/getting the string representing the URI
1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * of the archive in the memory tree
1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * The caller is responsible for allocating/freeing memory for the
1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * set function but has no responsibilities when using the get
1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * function
1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    CPCHAR getURI() const {return m_pURI;}
1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Accessor for setting the root node of the archive of the DMNode type
1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    * The destructor of this class later frees the created DMAddNodeProp
1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    * object
1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    */
1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual void setRootNode(DMNode* node) { rootTreeNode=node; }
1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual DMNode* getRootNode() { return rootTreeNode; }
1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    BOOLEAN isDirty() { return dirty; }
1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    void setDirty(BOOLEAN dirty) { this->dirty=dirty; }
1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    void getFilePath(char * path, CPCHAR ext);
1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SyncML_DM_Archive * getParentArchive() { return parent; }
1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    void setParentArchive(SyncML_DM_Archive * parent) { this->parent=parent; }
1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    BOOLEAN LoadSkeleton(DMTree* pTree) ;
1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual SYNCML_DM_RET_STATUS_T rollbackESN(DMTree* tree) = 0;
1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual SYNCML_DM_RET_STATUS_T commitESN(DMTree* tree) = 0;
1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual SyncML_Commit_Log*  GetCommitLogHandler() = 0;
1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual  SYNCML_DM_RET_STATUS_T CloseCommitLog() = 0;
1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    virtual SYNCML_DM_RET_STATUS_T  PlayCommitLog() = 0;
1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby protected:
1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMEventLogger oEventLogger;
1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    //Parent archive of this archive. when loaded, parent MUST Have already been loaded
1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SyncML_DM_Archive * parent;
1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* The top-level URI of the archive */
1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    CPCHAR m_pURI;
1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* The filesystem path string of the archive file */
1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    CPCHAR  m_path;
1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* full name to file in WFS */
1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString  m_strWFSFileName;
1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* if the tree associated with the archive is dirty or not.*/
1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    BOOLEAN dirty;
1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    BOOLEAN m_bWritableExist;
1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* permission mask on archive */
1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    int     m_permission;
1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMNode* rootTreeNode; //Different from rootNode which is a serialized form
1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    XPL_CLK_CLOCK_T m_lastAccessedTime;
1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     DMTree*   m_pTree;
1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby};
1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif /* SYNCML_DM_ARCHIVE_H */
175