blob: 20a877de2e91636cf10095bdf25a7b0673dc4d39 [file] [log] [blame]
Václav Kubernát48e9dfa2020-07-08 10:55:12 +02001/*
2 * Copyright (C) 2020 CESNET, https://photonics.cesnet.cz/
3 *
4 * Written by Václav Kubernát <kubernat@cesnet.cz>
5 *
6*/
7
8#pragma once
9#include "datastore_access.hpp"
Václav Kubernáte7248b22020-06-26 15:38:59 +020010#include "yang_access.hpp"
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020011
12/*! \class ProxyDatastore
13 * \brief DatastoreAccess wrapper that handles RPC input
14 */
15class ProxyDatastore {
16public:
Václav Kubernáte7248b22020-06-26 15:38:59 +020017 /**
18 * The createTemporaryDatastore function should create a temporary datastore that's going to be used for RPC input.
19 * This temporary datastore and the main datastore are supposed share the same schemas.
20 * */
21 ProxyDatastore(const std::shared_ptr<DatastoreAccess>& datastore, std::function<std::shared_ptr<DatastoreAccess>(const std::shared_ptr<DatastoreAccess>&)> createTemporaryDatastore);
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020022 [[nodiscard]] DatastoreAccess::Tree getItems(const std::string& path) const;
23 void setLeaf(const std::string& path, leaf_data_ value);
24 void createItem(const std::string& path);
25 void deleteItem(const std::string& path);
26 void moveItem(const std::string& source, std::variant<yang::move::Absolute, yang::move::Relative> move);
27 void commitChanges();
28 void discardChanges();
29 void copyConfig(const Datastore source, const Datastore destination);
30 [[nodiscard]] std::string dump(const DataFormat format) const;
Václav Kubernáte066fe22022-04-06 00:32:26 +020031 DatastoreTarget target() const;
Václav Kubernát162165e2021-02-22 09:46:53 +010032 void setTarget(const DatastoreTarget target);
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020033
Václav Kubernátb3960f82020-12-01 03:21:48 +010034 void initiate(const std::string& path);
Václav Kubernátaa4250a2020-07-22 00:02:23 +020035 [[nodiscard]] DatastoreAccess::Tree execute();
36 void cancel();
Václav Kubernáte7248b22020-06-26 15:38:59 +020037
Václav Kubernát2bed9522020-12-01 03:37:41 +010038 std::optional<std::string> inputDatastorePath();
39
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020040 [[nodiscard]] std::shared_ptr<Schema> schema() const;
Václav Kubernátb4e5b182020-11-16 19:55:09 +010041
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020042private:
Václav Kubernáte7248b22020-06-26 15:38:59 +020043 /** @brief Picks a datastore based on the requested path.
44 *
45 * If the path starts with a currently processed RPC, m_inputDatastore is picked.
46 * Otherwise m_datastore is picked.
47 */
48 [[nodiscard]] std::shared_ptr<DatastoreAccess> pickDatastore(const std::string& path) const;
49
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020050 std::shared_ptr<DatastoreAccess> m_datastore;
Václav Kubernáte7248b22020-06-26 15:38:59 +020051 std::function<std::shared_ptr<DatastoreAccess>(const std::shared_ptr<DatastoreAccess>&)> m_createTemporaryDatastore;
52 std::shared_ptr<DatastoreAccess> m_inputDatastore;
Václav Kubernátaa4250a2020-07-22 00:02:23 +020053
Václav Kubernát2bed9522020-12-01 03:37:41 +010054 std::optional<std::string> m_inputPath;
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020055};