yasmine
json_reader.hpp
Go to the documentation of this file.
1 // //
3 // This file is part of the Seadex yasmine ecosystem (http://yasmine.seadex.de). //
4 // Copyright (C) 2016-2017 Seadex GmbH //
5 // //
6 // Licensing information is available in the folder "license" which is part of this distribution. //
7 // The same information is available on the www @ http://yasmine.seadex.de/Licenses.html. //
8 // //
10 
11 #ifndef JSON_READER_B84EDCFB_85B6_4060_971F_96D6FB6D87B7
12 #define JSON_READER_B84EDCFB_85B6_4060_971F_96D6FB6D87B7
13 
14 
15 #include <document.h>
16 
17 #include "essentials/non_copyable.hpp"
18 #include "essentials/uri.hpp"
19 
21 #include "region_model_fwd.hpp"
24 #include "state_model_fwd.hpp"
29 #include "exit_point_model_fwd.hpp"
33 #include "join_model_fwd.hpp"
34 #include "junction_model_fwd.hpp"
35 #include "fork_model_fwd.hpp"
37 #include "choice_model_fwd.hpp"
38 #include "transition_model_fwd.hpp"
39 #include "consts.hpp"
40 #include "model_element_type.hpp"
41 #include "json_parser_helper.hpp"
42 #include "event_model.hpp"
43 
44 
45 namespace sxy
46 {
47 
50 class json_reader SX_FINAL
51 {
52 public:
55  explicit json_reader( const std::string& _file );
56  ~json_reader() SX_NOEXCEPT;
57  SX_NO_COPY(json_reader)
60  model::state_machine_model_ptr get_model_ptr();
61 
62 
63 private:
64  void read_json_file( const std::string& _file );
65  model::state_machine_model_ptr read_into_model();
66  sxy::model::event_ids read_deferred_events( const rapidjson::Value& _state ) const;
67  model::composite_state_model_uptr read_composite_state( const rapidjson::Value& _root );
68  model::simple_state_model_uptr read_simple_state( const rapidjson::Value& _state, bool _is_async = false );
69  model::final_state_model_uptr read_final_state( const rapidjson::Value& _state );
70  model::region_model_impl_uptr read_region( const rapidjson::Value& _region );
71  model::state_model_uptr read_state( const rapidjson::Value& _state );
72  model::pseudostate_model_uptr read_state_pseudostate( const rapidjson::Value& _state_pseudostate );
73  model::pseudostate_model_uptr read_pseudostate( const rapidjson::Value& _pseudostate );
74  model::initial_pseudostate_model_uptr read_initial_pseudostate( const rapidjson::Value& _pseudostate );
75  model::join_model_uptr read_join( const rapidjson::Value& _pseudostate );
76  model::fork_model_uptr read_fork( const rapidjson::Value& _pseudostate );
77  model::choice_model_uptr read_choice( const rapidjson::Value& _pseudostate );
78  model::junction_model_uptr read_junction( const rapidjson::Value& _pseudostate );
79  model::terminate_pseudostate_model_uptr read_terminate_pseudostate( const rapidjson::Value& _pseudostate );
80  model::deep_history_model_uptr read_deep_history( const rapidjson::Value& _pseudostate );
81  model::shallow_history_model_uptr read_shallow_history( const rapidjson::Value& _pseudostate );
82  model::entry_point_model_uptr read_entry_point( const rapidjson::Value& _pseudostate );
83  model::exit_point_model_uptr read_exit_point( const rapidjson::Value& _pseudostate );
84  model::transition_model_uptr read_transition( const rapidjson::Value& _transition );
85  static sxy::model::transition_model_kind get_transition_kind( unsigned int _kind );
86  sxe::int64_t get_event_id_by_name( const std::string& _name ) const;
87  sxe::int64_t get_event_priority_by_name( const std::string& _name ) const;
88  void get_event_list( model::state_machine_model_ptr& _model );
89  void check_document() const;
90 
91  template< typename pseudostate_impl >
92  sxe::SX_UNIQUE_PTR< pseudostate_impl > function_read_pseudostate( const rapidjson::Value& _pseudostate )
93  {
94  const std::string pseudostate_name = get_object_member_string( sxe::ref( _pseudostate ), model::JSON_NAME_NODE );
95  sxe::SX_UNIQUE_PTR< pseudostate_impl > new_pseudostate =
96  SX_MAKE_UNIQUE< pseudostate_impl >( pseudostate_name );
97  return( sxe::move( new_pseudostate ) );
98  }
99 
100 
101  rapidjson::Document document_;
103 };
104 
105 
106 }
107 
108 
109 #endif
sxe::SX_UNIQUE_PTR< simple_state_model > simple_state_model_uptr
Definition: simple_state_model_fwd.hpp:26
sxe::SX_UNIQUE_PTR< junction_model > junction_model_uptr
Definition: junction_model_fwd.hpp:25
sxe::SX_UNIQUE_PTR< pseudostate_model > pseudostate_model_uptr
Definition: pseudostate_model_fwd.hpp:28
sxe::SX_UNIQUE_PTR< state_model > state_model_uptr
Definition: state_model_fwd.hpp:28
sxe::SX_UNIQUE_PTR< composite_state_model_impl > composite_state_model_uptr
Definition: composite_state_model_fwd.hpp:25
sxe::SX_UNIQUE_PTR< terminate_pseudostate_model > terminate_pseudostate_model_uptr
Definition: terminate_pseudostate_model_fwd.hpp:26
const char *const JSON_NAME_NODE
Definition: consts.cpp:25
sxe::SX_UNIQUE_PTR< final_state_model > final_state_model_uptr
Definition: final_state_model_fwd.hpp:26
sxe::SX_UNIQUE_PTR< fork_model > fork_model_uptr
Definition: fork_model_fwd.hpp:26
sxe::SX_UNIQUE_PTR< deep_history_model > deep_history_model_uptr
Definition: deep_history_model_fwd.hpp:26
Definition: algorithm_parameters.hpp:16
sxe::SX_UNIQUE_PTR< initial_pseudostate_model > initial_pseudostate_model_uptr
Definition: initial_pseudostate_model_fwd.hpp:25
sxe::SX_UNIQUE_PTR< exit_point_model > exit_point_model_uptr
Definition: exit_point_model_fwd.hpp:26
transition_model_kind
Definition: transition_model_kind.hpp:30
Definition: json_writer.hpp:20
sxe::SX_UNIQUE_PTR< entry_point_model > entry_point_model_uptr
Definition: entry_point_model_fwd.hpp:26
sxe::SX_UNIQUE_PTR< region_model_impl > region_model_impl_uptr
Definition: region_model_fwd.hpp:33
Provides the ability to read an yasmine model from a JSON file (.ym).
Definition: state_machine_element_model.hpp:20
sxe::SX_UNIQUE_PTR< join_model > join_model_uptr
Definition: join_model_fwd.hpp:26
sxe::SX_UNIQUE_PTR< shallow_history_model > shallow_history_model_uptr
Definition: shallow_history_model_fwd.hpp:26
std::vector< event_id > event_ids
The type alias for yasmine&#39;s event ID list.
Definition: event_id.hpp:29
sxe::SX_UNIQUE_PTR< choice_model > choice_model_uptr
Definition: choice_model_fwd.hpp:26
sxe::SX_UNIQUE_PTR< transition_model > transition_model_uptr
Definition: transition_model_fwd.hpp:28
std::string get_object_member_string(const rapidjson::Value &_obj, const char *const _name_of_member)
Definition: json_parser_helper.cpp:20
sxe::SX_UNIQUE_PTR< state_machine_model > state_machine_model_ptr
Definition: state_machine_model_fwd.hpp:26