1 /* 2 * Copyright (c) 2022 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 FLAT_OBJECT_STORE_H 17 #define FLAT_OBJECT_STORE_H 18 19 #include <memory> 20 #include <string> 21 22 #include "bytes.h" 23 #include "flat_object_storage_engine.h" 24 #include "condition_lock.h" 25 26 namespace OHOS::ObjectStore { 27 class FlatObjectWatcher : public TableWatcher { 28 public: FlatObjectWatcher(const std::string & sessionId)29 FlatObjectWatcher(const std::string &sessionId) : TableWatcher(sessionId) 30 { 31 } 32 virtual void OnChanged(const std::string &sessionid, const std::vector<std::string> &changedData) = 0; 33 }; 34 35 class CacheManager { 36 public: 37 CacheManager(); 38 uint32_t Save(const std::string &bundleName, const std::string &sessionId, const std::string &deviceId, 39 const std::map<std::string, std::vector<uint8_t>> &objectData); 40 uint32_t RevokeSave(const std::string &bundleName, const std::string &sessionId); 41 int32_t ResumeObject(const std::string &bundleName, const std::string &sessionId, 42 std::function<void(const std::map<std::string, std::vector<uint8_t>> &data)> &callback); 43 int32_t SubscribeDataChange(const std::string &bundleName, const std::string &sessionId, 44 std::function<void(const std::map<std::string, std::vector<uint8_t>> &data)> &callback); 45 int32_t UnregisterDataChange(const std::string &bundleName, const std::string &sessionId); 46 private: 47 int32_t SaveObject(const std::string &bundleName, const std::string &sessionId, 48 const std::string &deviceId, const std::map<std::string, std::vector<uint8_t>> &objectData, 49 const std::function<void(const std::map<std::string, int32_t> &)> &callback); 50 int32_t RevokeSaveObject( 51 const std::string &bundleName, const std::string &sessionId, std::function<void(int32_t)> &callback); 52 std::mutex mutex_; 53 }; 54 55 class FlatObjectStore { 56 public: 57 explicit FlatObjectStore(const std::string &bundleName); 58 ~FlatObjectStore(); 59 uint32_t CreateObject(const std::string &sessionId); 60 uint32_t Delete(const std::string &objectId); 61 uint32_t Watch(const std::string &objectId, std::shared_ptr<FlatObjectWatcher> watcher); 62 uint32_t UnWatch(const std::string &objectId); 63 uint32_t Put(const std::string &sessionId, const std::string &key, std::vector<uint8_t> value); 64 uint32_t Get(std::string &sessionId, const std::string &key, Bytes &value); 65 uint32_t SetStatusNotifier(std::shared_ptr<StatusWatcher> sharedPtr); 66 uint32_t SyncAllData(const std::string &sessionId, 67 const std::function<void(const std::map<std::string, DistributedDB::DBStatus> &)> &onComplete); 68 uint32_t Save(const std::string &sessionId, const std::string &deviceId); 69 uint32_t RevokeSave(const std::string &sessionId); 70 void CheckRetrieveCache(const std::string &sessionId); 71 void FilterData(const std::string &sessionId, 72 std::map<std::string, std::vector<uint8_t>> &data); 73 74 private: 75 std::shared_ptr<FlatObjectStorageEngine> storageEngine_; 76 CacheManager *cacheManager_; 77 std::mutex mutex_; 78 std::vector<std::string> retrievedCache_ {}; 79 std::string bundleName_; 80 }; 81 } // namespace OHOS::ObjectStore 82 83 #endif // FLAT_OBJECT_STORE_H 84