OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
IPluginComponentInfo.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2//
3// Copyright 2026 Caleb Buahin
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
48
49#ifndef OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP
50#define OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP
51
52#include <string>
53#include <vector>
54#include "PluginState.hpp"
55
56namespace openswmm {
57
58/* Forward declarations */
59class IInputPlugin;
60class IOutputPlugin;
61class IReportPlugin;
62class IStateIOPlugin;
63
81
100
107inline const char* plugin_role_to_string(PluginRole role) noexcept {
108 switch (role) {
109 case PluginRole::INPUT_READ: return "INPUT_READ";
110 case PluginRole::OUTPUT_WRITE: return "OUTPUT_WRITE";
111 case PluginRole::REPORT_WRITE: return "REPORT_WRITE";
112 case PluginRole::STATE_READ: return "STATE_READ";
113 case PluginRole::STATE_WRITE: return "STATE_WRITE";
114 default: return "UNKNOWN";
115 }
116}
117
139 std::string description;
140
148 std::vector<std::string> patterns;
149
157
164 std::vector<std::string> mime_types;
165};
166
178 std::string license_key;
179 std::string organization;
180 std::string contact_email;
181 std::string deployment_id;
182};
183
196public:
197 virtual ~IPluginComponentInfo() = default;
198
199 // -----------------------------------------------------------------------
200 // Identity & metadata
201 // -----------------------------------------------------------------------
202
207 virtual std::string id() const = 0;
208
213 virtual std::string caption() const = 0;
214
218 virtual std::string description() const = 0;
219
224 virtual std::string version() const = 0;
225
230 virtual std::string vendor() const = 0;
231
236 virtual std::string url() const = 0;
237
242 virtual std::vector<std::string> tags() const { return {}; }
243
244 // -----------------------------------------------------------------------
245 // Licensing
246 // -----------------------------------------------------------------------
247
253 virtual std::string license_type() const = 0;
254
260 virtual std::string license_text() const = 0;
261
262 // -----------------------------------------------------------------------
263 // Capability queries
264 // -----------------------------------------------------------------------
265
270 virtual bool has_input() const noexcept { return false; }
271
276 virtual bool has_output() const noexcept { return false; }
277
282 virtual bool has_report() const noexcept { return false; }
283
288 virtual bool has_state_io() const noexcept { return false; }
289
290 // -----------------------------------------------------------------------
291 // File-filter advertisement (every plugin)
292 // -----------------------------------------------------------------------
293
310 virtual std::vector<FileFilter> file_filters() const { return {}; }
311
312 // -----------------------------------------------------------------------
313 // Registration
314 // -----------------------------------------------------------------------
315
326 virtual bool register_plugin(const RegistrationInfo& info) {
327 (void)info;
328 return true;
329 }
330
339 virtual bool registered() const noexcept { return true; }
340
349 virtual RegistrationInfo registration_info() const { return {}; }
350
351 // -----------------------------------------------------------------------
352 // Factory methods
353 // -----------------------------------------------------------------------
354
364 virtual IInputPlugin* create_input_plugin() const { return nullptr; }
365
375 virtual IOutputPlugin* create_output_plugin() const { return nullptr; }
376
384 virtual IReportPlugin* create_report_plugin() const { return nullptr; }
385
395 virtual IStateIOPlugin* create_state_io_plugin() const { return nullptr; }
396};
397
398// ---------------------------------------------------------------------------
399// C factory function signature that plugin .so/.dylib/.dll must export
400// ---------------------------------------------------------------------------
401
419
420} /* namespace openswmm */
421
422#endif /* OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP */
Plugin lifecycle state enumerator.
Interface for input file reader/writer plugins.
Definition IInputPlugin.hpp:59
Interface for output-writing plugins.
Definition IOutputPlugin.hpp:73
Describes a plugin component: metadata, capabilities, and factory methods.
Definition IPluginComponentInfo.hpp:195
virtual IStateIOPlugin * create_state_io_plugin() const
Create a new IStateIOPlugin instance.
Definition IPluginComponentInfo.hpp:395
virtual IInputPlugin * create_input_plugin() const
Create a new IInputPlugin instance.
Definition IPluginComponentInfo.hpp:364
virtual std::vector< std::string > tags() const
Additional tags or keywords for discovery.
Definition IPluginComponentInfo.hpp:242
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:288
virtual IReportPlugin * create_report_plugin() const
Create a new IReportPlugin instance.
Definition IPluginComponentInfo.hpp:384
virtual ~IPluginComponentInfo()=default
virtual bool registered() const noexcept
Check whether the plugin is currently registered.
Definition IPluginComponentInfo.hpp:339
virtual bool has_input() const noexcept
True if this plugin can create an IInputPlugin.
Definition IPluginComponentInfo.hpp:270
virtual bool has_output() const noexcept
True if this plugin can create an IOutputPlugin.
Definition IPluginComponentInfo.hpp:276
virtual RegistrationInfo registration_info() const
Get the current registration information.
Definition IPluginComponentInfo.hpp:349
virtual bool register_plugin(const RegistrationInfo &info)
Register the plugin with the provided registration information.
Definition IPluginComponentInfo.hpp:326
virtual bool has_report() const noexcept
True if this plugin can create an IReportPlugin.
Definition IPluginComponentInfo.hpp:282
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:310
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:375
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:61
Interface for state / hot-start IO plugins.
Definition IStateIOPlugin.hpp:69
PluginRole
Identifies the I/O direction and category of a file filter entry.
Definition IPluginComponentInfo.hpp:93
const char * plugin_role_to_string(PluginRole role) noexcept
Convert a PluginRole to a stable, human-readable string.
Definition IPluginComponentInfo.hpp:107
PluginType
Identifies a plugin capability.
Definition IPluginComponentInfo.hpp:75
@ OUTPUT_WRITE
Plugin writes a time-series results file (e.g. *.out).
Definition IPluginComponentInfo.hpp:95
@ REPORT_WRITE
Plugin writes a summary report file (e.g. *.rpt).
Definition IPluginComponentInfo.hpp:96
@ STATE_READ
Plugin reads a hot-start / state file.
Definition IPluginComponentInfo.hpp:97
@ INPUT_READ
Plugin reads a model input file (e.g. *.inp).
Definition IPluginComponentInfo.hpp:94
@ STATE_WRITE
Plugin writes a hot-start / state file.
Definition IPluginComponentInfo.hpp:98
@ OUTPUT
Writes time-series results during simulation.
Definition IPluginComponentInfo.hpp:77
@ STATE_IO
Reads / writes simulation state (hot-start)
Definition IPluginComponentInfo.hpp:79
@ INPUT
Reads model data into SimulationContext.
Definition IPluginComponentInfo.hpp:76
@ REPORT
Writes summary statistics post-simulation.
Definition IPluginComponentInfo.hpp:78
Definition NodeCoupling.cpp:16
IPluginComponentInfo *(*)() PluginInfoFactory
Typedef for the C factory function that plugin libraries must export.
Definition IPluginComponentInfo.hpp:418
A file-format filter advertised by a plugin.
Definition IPluginComponentInfo.hpp:131
PluginRole role
I/O role this filter applies to.
Definition IPluginComponentInfo.hpp:156
std::string description
Human-readable format name shown to the user.
Definition IPluginComponentInfo.hpp:139
std::vector< std::string > mime_types
Optional MIME types for hosts that need them (web, mobile).
Definition IPluginComponentInfo.hpp:164
std::vector< std::string > patterns
Glob patterns that match files in this format.
Definition IPluginComponentInfo.hpp:148
Registration information for plugin activation.
Definition IPluginComponentInfo.hpp:177
std::string contact_email
Contact email for the registrant.
Definition IPluginComponentInfo.hpp:180
std::string deployment_id
Unique deployment or instance ID.
Definition IPluginComponentInfo.hpp:181
std::string license_key
License key or activation token (may be empty for open plugins)
Definition IPluginComponentInfo.hpp:178
std::string organization
Registering organization name.
Definition IPluginComponentInfo.hpp:179