OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
IPluginComponentInfo.hpp
Go to the documentation of this file.
1
33#ifndef OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP
34#define OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP
35
36#include <string>
37#include <vector>
38#include "PluginState.hpp"
39
40namespace openswmm {
41
42/* Forward declarations */
43class IInputPlugin;
44class IOutputPlugin;
45class IReportPlugin;
46class IStateIOPlugin;
47
59enum class PluginType {
60 INPUT,
61 OUTPUT,
62 REPORT,
64};
65
77enum class PluginRole : int {
83};
84
91inline const char* plugin_role_to_string(PluginRole role) noexcept {
92 switch (role) {
93 case PluginRole::INPUT_READ: return "INPUT_READ";
94 case PluginRole::OUTPUT_WRITE: return "OUTPUT_WRITE";
95 case PluginRole::REPORT_WRITE: return "REPORT_WRITE";
96 case PluginRole::STATE_READ: return "STATE_READ";
97 case PluginRole::STATE_WRITE: return "STATE_WRITE";
98 default: return "UNKNOWN";
99 }
100}
101
123 std::string description;
124
132 std::vector<std::string> patterns;
133
141
148 std::vector<std::string> mime_types;
149};
150
162 std::string license_key;
163 std::string organization;
164 std::string contact_email;
165 std::string deployment_id;
166};
167
180public:
181 virtual ~IPluginComponentInfo() = default;
182
183 // -----------------------------------------------------------------------
184 // Identity & metadata
185 // -----------------------------------------------------------------------
186
191 virtual std::string id() const = 0;
192
197 virtual std::string caption() const = 0;
198
202 virtual std::string description() const = 0;
203
208 virtual std::string version() const = 0;
209
214 virtual std::string vendor() const = 0;
215
220 virtual std::string url() const = 0;
221
226 virtual std::vector<std::string> tags() const { return {}; }
227
228 // -----------------------------------------------------------------------
229 // Licensing
230 // -----------------------------------------------------------------------
231
237 virtual std::string license_type() const = 0;
238
244 virtual std::string license_text() const = 0;
245
246 // -----------------------------------------------------------------------
247 // Capability queries
248 // -----------------------------------------------------------------------
249
254 virtual bool has_input() const noexcept { return false; }
255
260 virtual bool has_output() const noexcept { return false; }
261
266 virtual bool has_report() const noexcept { return false; }
267
272 virtual bool has_state_io() const noexcept { return false; }
273
274 // -----------------------------------------------------------------------
275 // File-filter advertisement (every plugin)
276 // -----------------------------------------------------------------------
277
294 virtual std::vector<FileFilter> file_filters() const { return {}; }
295
296 // -----------------------------------------------------------------------
297 // Registration
298 // -----------------------------------------------------------------------
299
310 virtual bool register_plugin(const RegistrationInfo& info) {
311 (void)info;
312 return true;
313 }
314
323 virtual bool registered() const noexcept { return true; }
324
333 virtual RegistrationInfo registration_info() const { return {}; }
334
335 // -----------------------------------------------------------------------
336 // Factory methods
337 // -----------------------------------------------------------------------
338
348 virtual IInputPlugin* create_input_plugin() const { return nullptr; }
349
359 virtual IOutputPlugin* create_output_plugin() const { return nullptr; }
360
368 virtual IReportPlugin* create_report_plugin() const { return nullptr; }
369
379 virtual IStateIOPlugin* create_state_io_plugin() const { return nullptr; }
380};
381
382// ---------------------------------------------------------------------------
383// C factory function signature that plugin .so/.dylib/.dll must export
384// ---------------------------------------------------------------------------
385
403
404} /* namespace openswmm */
405
406#endif /* OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP */
Plugin lifecycle state enumerator.
Interface for input file reader/writer plugins.
Definition IInputPlugin.hpp:43
Interface for output-writing plugins.
Definition IOutputPlugin.hpp:57
Describes a plugin component: metadata, capabilities, and factory methods.
Definition IPluginComponentInfo.hpp:179
virtual IStateIOPlugin * create_state_io_plugin() const
Create a new IStateIOPlugin instance.
Definition IPluginComponentInfo.hpp:379
virtual IInputPlugin * create_input_plugin() const
Create a new IInputPlugin instance.
Definition IPluginComponentInfo.hpp:348
virtual std::vector< std::string > tags() const
Additional tags or keywords for discovery.
Definition IPluginComponentInfo.hpp:226
virtual std::string description() const =0
Detailed description of what this plugin does.
virtual bool has_state_io() const noexcept
True if this plugin can create an IStateIOPlugin.
Definition IPluginComponentInfo.hpp:272
virtual IReportPlugin * create_report_plugin() const
Create a new IReportPlugin instance.
Definition IPluginComponentInfo.hpp:368
virtual ~IPluginComponentInfo()=default
virtual bool registered() const noexcept
Check whether the plugin is currently registered.
Definition IPluginComponentInfo.hpp:323
virtual bool has_input() const noexcept
True if this plugin can create an IInputPlugin.
Definition IPluginComponentInfo.hpp:254
virtual bool has_output() const noexcept
True if this plugin can create an IOutputPlugin.
Definition IPluginComponentInfo.hpp:260
virtual RegistrationInfo registration_info() const
Get the current registration information.
Definition IPluginComponentInfo.hpp:333
virtual bool register_plugin(const RegistrationInfo &info)
Register the plugin with the provided registration information.
Definition IPluginComponentInfo.hpp:310
virtual bool has_report() const noexcept
True if this plugin can create an IReportPlugin.
Definition IPluginComponentInfo.hpp:266
virtual std::string url() const =0
URL to the plugin's home page or documentation.
virtual std::string id() const =0
Unique plugin identifier in reverse-DNS notation.
virtual std::vector< FileFilter > file_filters() const
File-format filters this plugin handles.
Definition IPluginComponentInfo.hpp:294
virtual std::string caption() const =0
Human-readable display name of the plugin.
virtual IOutputPlugin * create_output_plugin() const
Create a new IOutputPlugin instance.
Definition IPluginComponentInfo.hpp:359
virtual std::string license_text() const =0
Full license text for this plugin.
virtual std::string license_type() const =0
SPDX license identifier for this plugin.
virtual std::string vendor() const =0
Vendor / author name.
virtual std::string version() const =0
Plugin version string (Semantic Versioning recommended).
Interface for report-writing plugins.
Definition IReportPlugin.hpp:45
Interface for state / hot-start IO plugins.
Definition IStateIOPlugin.hpp:53
PluginRole
Identifies the I/O direction and category of a file filter entry.
Definition IPluginComponentInfo.hpp:77
const char * plugin_role_to_string(PluginRole role) noexcept
Convert a PluginRole to a stable, human-readable string.
Definition IPluginComponentInfo.hpp:91
PluginType
Identifies a plugin capability.
Definition IPluginComponentInfo.hpp:59
@ OUTPUT_WRITE
Plugin writes a time-series results file (e.g. *.out).
@ REPORT_WRITE
Plugin writes a summary report file (e.g. *.rpt).
@ STATE_READ
Plugin reads a hot-start / state file.
@ INPUT_READ
Plugin reads a model input file (e.g. *.inp).
@ STATE_WRITE
Plugin writes a hot-start / state file.
@ OUTPUT
Writes time-series results during simulation.
@ STATE_IO
Reads / writes simulation state (hot-start)
@ INPUT
Reads model data into SimulationContext.
@ REPORT
Writes summary statistics post-simulation.
Definition NodeCoupling.cpp:15
IPluginComponentInfo *(*)() PluginInfoFactory
Typedef for the C factory function that plugin libraries must export.
Definition IPluginComponentInfo.hpp:402
A file-format filter advertised by a plugin.
Definition IPluginComponentInfo.hpp:115
PluginRole role
I/O role this filter applies to.
Definition IPluginComponentInfo.hpp:140
std::string description
Human-readable format name shown to the user.
Definition IPluginComponentInfo.hpp:123
std::vector< std::string > mime_types
Optional MIME types for hosts that need them (web, mobile).
Definition IPluginComponentInfo.hpp:148
std::vector< std::string > patterns
Glob patterns that match files in this format.
Definition IPluginComponentInfo.hpp:132
Registration information for plugin activation.
Definition IPluginComponentInfo.hpp:161
std::string contact_email
Contact email for the registrant.
Definition IPluginComponentInfo.hpp:164
std::string deployment_id
Unique deployment or instance ID.
Definition IPluginComponentInfo.hpp:165
std::string license_key
License key or activation token (may be empty for open plugins)
Definition IPluginComponentInfo.hpp:162
std::string organization
Registering organization name.
Definition IPluginComponentInfo.hpp:163