blob: e3113dda065556a70803573c370ffc300eb8acec [file] [log] [blame]
Václav Kubernát96344a12018-05-28 16:33:39 +02001/*
2 * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
3 * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
4 *
5 * Written by Václav Kubernát <kubervac@fit.cvut.cz>
6 *
7*/
8
Václav Kubernátb61336d2018-05-28 17:35:03 +02009#include <iostream>
Václav Kubernát6415b822018-08-22 17:40:01 +020010#include "datastore_access.hpp"
Václav Kubernát96344a12018-05-28 16:33:39 +020011#include "interpreter.hpp"
12
Václav Kubernátebca2552018-06-08 19:06:02 +020013struct leafDataToString : boost::static_visitor<std::string> {
14 std::string operator()(const enum_& data) const
15 {
16 return data.m_value;
17 }
18 template <typename T>
19 std::string operator()(const T& data) const
20 {
21 std::stringstream stream;
22 stream << data;
23 return stream.str();
24 }
25};
26
Václav Kubernát07204242018-06-04 18:12:09 +020027void Interpreter::operator()(const set_& set) const
28{
Václav Kubernát6415b822018-08-22 17:40:01 +020029 m_datastore.setLeaf(absolutePathFromCommand(set), set.m_data);
Václav Kubernát07204242018-06-04 18:12:09 +020030}
31
Václav Kubernát96344a12018-05-28 16:33:39 +020032void Interpreter::operator()(const cd_& cd) const
33{
34 m_parser.changeNode(cd.m_path);
35}
36
Václav Kubernátb61336d2018-05-28 17:35:03 +020037void Interpreter::operator()(const create_& create) const
38{
Václav Kubernát6415b822018-08-22 17:40:01 +020039 m_datastore.createPresenceContainer(absolutePathFromCommand(create));
Václav Kubernátb61336d2018-05-28 17:35:03 +020040}
41
42void Interpreter::operator()(const delete_& delet) const
43{
Václav Kubernát6415b822018-08-22 17:40:01 +020044 m_datastore.deletePresenceContainer(absolutePathFromCommand(delet));
Václav Kubernátb61336d2018-05-28 17:35:03 +020045}
46
Václav Kubernát11afac72018-07-18 14:59:53 +020047void Interpreter::operator()(const ls_& ls) const
48{
49 std::cout << "Possible nodes:" << std::endl;
50
51 for (const auto& it : m_parser.availableNodes(ls.m_path))
52 std::cout << it << std::endl;
53}
54
Václav Kubernát6415b822018-08-22 17:40:01 +020055template <typename T>
56std::string Interpreter::absolutePathFromCommand(const T& command) const
57{
Václav Kubernát37171a12018-08-31 17:01:48 +020058 if (command.m_path.m_scope == Scope::Absolute)
59 return "/" + pathToDataString(command.m_path);
60 else
61 return joinPaths(m_parser.currentNode(), pathToDataString(command.m_path));
Václav Kubernát6415b822018-08-22 17:40:01 +020062}
63
64Interpreter::Interpreter(Parser& parser, DatastoreAccess& datastore)
65 : m_parser(parser), m_datastore(datastore)
Václav Kubernát96344a12018-05-28 16:33:39 +020066{
67}