1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef COLLABORATION_EDIT_RD_UTILS_H 17 #define COLLABORATION_EDIT_RD_UTILS_H 18 19 #include <map> 20 21 #include <string> 22 #include "grd_error.h" 23 #include "grd_type_export.h" 24 #include "napi_errno.h" 25 26 namespace OHOS::CollaborationEdit { 27 static std::map<int32_t, int32_t> g_errMap = { 28 {GRD_OK, Status::SUCCESS}, 29 {GRD_ARRAY_INDEX_NOT_FOUND, Status::INDEX_OUT_OF_RANGE} 30 }; 31 class RdUtils { 32 public: 33 // 1. Database open/close library interface encapsulation 34 static int RdDbOpen(const char *dbFile, const char *configStr, uint32_t flags, GRD_DB **db); 35 static int RdDbClose(GRD_DB *db, uint32_t flags); 36 static int RdSetLocalId(GRD_DB *db, const char *equipId); 37 static int RdGetLocalId(GRD_DB *db, char **equipId); 38 static int RdApplyUpdate(GRD_DB *db, char **applyInfo); 39 static int RdWriteUpdate( 40 GRD_DB *db, const char *equipId, const uint8_t *data, uint32_t size, const std::string &watermark); 41 static int RdGetRelativePos(GRD_DB *db, const char *tableName, const char *nodeSize, uint32_t pos, char **relPos); 42 static int RdGetAbsolutePos( 43 GRD_DB *db, const char *tableName, const char *relPos, const char *nodeSize, uint32_t *pos); 44 // 2. Node operation inter 45 static int RdInsertElements(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, uint32_t index, GRD_DocNodeInfoT *nodeInfo, 46 GRD_ElementIdT **outElementId); 47 static int RdDeleteElements(GRD_DB *db, const char *tableName, const GRD_ElementIdT *elementId, uint32_t index, 48 uint32_t length); 49 static int RdGetElements(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, uint32_t index, uint32_t length, 50 char **respXml); 51 static int RdFragmentToString(GRD_DB *db, const char *fragmentName, const GRD_ElementIdT *elementId, 52 char **replyJson); 53 // 3. XmlElement attribute operation interface encapsulation 54 static int RdElementSetAttribute(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, const char *attributeName, 55 const char *attributeValue, uint32_t flags); 56 static int RdElementRemoveAttribute(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, const char *attributeName); 57 static int RdElementGetAttributes(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, char **allAttributes); 58 // 4. Text operation interface encapsulation 59 static int RdTextInsert(GRD_DB *db, GRD_XmlOpPositionT *opPos, uint32_t index, const char *content, 60 const char *formatStr); 61 static int RdTextDelete(GRD_DB *db, GRD_XmlOpPositionT *opPos, uint32_t index, uint32_t length); 62 static int RdTextFormat(GRD_DB *db, GRD_XmlOpPositionT *opPos, uint32_t index, uint32_t length, 63 const char *formatStr); 64 static int RdTextGetLength(GRD_DB *db, GRD_XmlOpPositionT *opPos, uint32_t *length); 65 static int RdTextReadInStrMode(GRD_DB *db, GRD_XmlOpPositionT *opPos, char **value); 66 static int RdTextReadInDeltaMode(GRD_DB *db, GRD_XmlOpPositionT *opPos, const char *snapshot, 67 const char *snapshotPerv, char **delta); 68 // 5. Undo/Redo operation interface encapsulation 69 static int RdDocUndoManager(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, GRD_UndoParamT *param); 70 static int RdDocCloseUndoManager(GRD_DB *db, GRD_XmlOpPositionT *elementAddr); 71 static int RdDocUndo(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, char **modify); 72 static int RdDocRedo(GRD_DB *db, GRD_XmlOpPositionT *elementAddr, char **modify); 73 static int RdDocStopCapturing(GRD_DB *db, GRD_XmlOpPositionT *elementAddr); 74 // 6. Sync operation interface encapsulation 75 static int RdSync(GRD_DB *db, GRD_SyncConfig *config); 76 static int RdRegistryThreadPool(GRD_DB *db, GRD_ThreadPoolT *threadPool); 77 // Last. Memory free and others 78 static void RdFreeElementId(GRD_ElementIdT *outElementId); 79 static int RdFreeValue(char *value); 80 static int RdSetCloudDb(GRD_DB *db, GRD_ICloudDBT *iCloud); 81 82 static int32_t TransferToNapiErrNo(int32_t originNo); 83 }; 84 85 } // namepace OHOS::CollaborationEdit 86 87 #endif // COLLABORATION_EDIT_RD_UTILS_H 88