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
41
50
51#ifndef OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP
52#define OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP
53
54#include <string>
55#include <vector>
56#include "PluginState.hpp"
57
58namespace openswmm {
59
60/* Forward declarations */
61class IInputPlugin;
62class IOutputPlugin;
63class IReportPlugin;
64class IStateIOPlugin;
65
83
102
107inline const char* plugin_role_to_string(PluginRole role) noexcept {
108 switch (role) {
110 return "INPUT_READ";
112 return "OUTPUT_WRITE";
114 return "REPORT_WRITE";
116 return "STATE_READ";
118 return "STATE_WRITE";
119 default:
120 return "UNKNOWN";
121 }
122}
123
145 std::string description;
146
154 std::vector<std::string> patterns;
155
163
170 std::vector<std::string> mime_types;
171};
172
184 std::string license_key;
185 std::string organization;
186 std::string contact_email;
187 std::string deployment_id;
188};
189
202public:
207 virtual ~IPluginComponentInfo() = default;
208
209 // -----------------------------------------------------------------------
210 // Identity & metadata
211 // -----------------------------------------------------------------------
212
216 virtual std::string id() const = 0;
217
220 virtual std::string caption() const = 0;
221
224 virtual std::string description() const = 0;
225
229 virtual std::string version() const = 0;
230
233 virtual std::string vendor() const = 0;
234
237 virtual std::string url() const = 0;
238
242 virtual std::vector<std::string> tags() const { return {}; }
243
244 // -----------------------------------------------------------------------
245 // Licensing
246 // -----------------------------------------------------------------------
247
251 virtual std::string license_type() const = 0;
252
256 virtual std::string license_text() const = 0;
257
258 // -----------------------------------------------------------------------
259 // Capability queries
260 // -----------------------------------------------------------------------
261
266 virtual bool has_input() const noexcept { return false; }
267
272 virtual bool has_output() const noexcept { return false; }
273
278 virtual bool has_report() const noexcept { return false; }
279
284 virtual bool has_state_io() const noexcept { return false; }
285
286 // -----------------------------------------------------------------------
287 // File-filter advertisement (every plugin)
288 // -----------------------------------------------------------------------
289
295 virtual std::vector<FileFilter> file_filters() const { return {}; }
296
297 // -----------------------------------------------------------------------
298 // Registration
299 // -----------------------------------------------------------------------
300
307 virtual bool register_plugin(const RegistrationInfo& info) {
308 (void)info;
309 return true;
310 }
311
315 virtual bool registered() const noexcept { return true; }
316
321 virtual RegistrationInfo registration_info() const { return {}; }
322
323 // -----------------------------------------------------------------------
324 // Factory methods
325 // -----------------------------------------------------------------------
326
334 virtual IInputPlugin* create_input_plugin() const { return nullptr; }
335
343 virtual IOutputPlugin* create_output_plugin() const { return nullptr; }
344
352 virtual IReportPlugin* create_report_plugin() const { return nullptr; }
353
361 virtual IStateIOPlugin* create_state_io_plugin() const { return nullptr; }
362};
363
364// ---------------------------------------------------------------------------
365// C factory function signature that plugin .so/.dylib/.dll must export
366// ---------------------------------------------------------------------------
367
385
386} /* namespace openswmm */
387
388#endif /* OPENSWMM_IPLUGIN_COMPONENT_INFO_HPP */
Plugin lifecycle state enumerator.
Interface for input file reader/writer plugins.
Definition IInputPlugin.hpp:61
Interface for output-writing plugins.
Definition IOutputPlugin.hpp:77
Describes a plugin component: metadata, capabilities, and factory methods.
Definition IPluginComponentInfo.hpp:201
virtual IStateIOPlugin * create_state_io_plugin() const
Allocate a distinct state_io plugin instance when supported and permitted.
Definition IPluginComponentInfo.hpp:361
virtual IInputPlugin * create_input_plugin() const
Allocate a distinct input plugin instance when supported and permitted.
Definition IPluginComponentInfo.hpp:334
virtual std::vector< std::string > tags() const
Copy optional discovery keywords.
Definition IPluginComponentInfo.hpp:242
virtual std::string description() const =0
Copy the component's descriptive metadata.
virtual bool has_state_io() const noexcept
Query whether this component advertises the state_io capability.
Definition IPluginComponentInfo.hpp:284
virtual IReportPlugin * create_report_plugin() const
Allocate a distinct report plugin instance when supported and permitted.
Definition IPluginComponentInfo.hpp:352
virtual ~IPluginComponentInfo()=default
Destroy component metadata only through its owning library/host lifetime. PluginFactory borrows singl...
virtual bool registered() const noexcept
Query implementation-defined registration readiness.
Definition IPluginComponentInfo.hpp:315
virtual bool has_input() const noexcept
Query whether this component advertises the input capability.
Definition IPluginComponentInfo.hpp:266
virtual bool has_output() const noexcept
Query whether this component advertises the output capability.
Definition IPluginComponentInfo.hpp:272
virtual RegistrationInfo registration_info() const
Copy implementation-reported current registration metadata.
Definition IPluginComponentInfo.hpp:321
virtual bool register_plugin(const RegistrationInfo &info)
Apply implementation-defined registration data before protected factories.
Definition IPluginComponentInfo.hpp:307
virtual bool has_report() const noexcept
Query whether this component advertises the report capability.
Definition IPluginComponentInfo.hpp:278
virtual std::string url() const =0
Copy the declared home/documentation URL.
virtual std::string id() const =0
Copy the stable discovery identifier for this component.
virtual std::vector< FileFilter > file_filters() const
Copy supported format/role filters for host discovery and file dialogs.
Definition IPluginComponentInfo.hpp:295
virtual std::string caption() const =0
Copy the component display name.
virtual IOutputPlugin * create_output_plugin() const
Allocate a distinct output plugin instance when supported and permitted.
Definition IPluginComponentInfo.hpp:343
virtual std::string license_text() const =0
Copy declared license text or a reference URL.
virtual std::string license_type() const =0
Copy the component's declared license identifier.
virtual std::string vendor() const =0
Copy declared vendor/author metadata.
virtual std::string version() const =0
Copy the component's declared version.
Interface for report-writing plugins.
Definition IReportPlugin.hpp:63
Interface for state / hot-start IO plugins.
Definition IStateIOPlugin.hpp:71
PluginRole
Identifies the I/O direction and category of a file filter entry.
Definition IPluginComponentInfo.hpp:95
PluginType
Identifies a plugin capability.
Definition IPluginComponentInfo.hpp:77
@ OUTPUT_WRITE
Plugin writes a time-series results file (e.g. *.out).
Definition IPluginComponentInfo.hpp:97
@ REPORT_WRITE
Plugin writes a summary report file (e.g. *.rpt).
Definition IPluginComponentInfo.hpp:98
@ STATE_READ
Plugin reads a hot-start / state file.
Definition IPluginComponentInfo.hpp:99
@ INPUT_READ
Plugin reads a model input file (e.g. *.inp).
Definition IPluginComponentInfo.hpp:96
@ STATE_WRITE
Plugin writes a hot-start / state file.
Definition IPluginComponentInfo.hpp:100
@ OUTPUT
Writes time-series results during simulation.
Definition IPluginComponentInfo.hpp:79
@ STATE_IO
Reads / writes simulation state (hot-start)
Definition IPluginComponentInfo.hpp:81
@ INPUT
Reads model data into SimulationContext.
Definition IPluginComponentInfo.hpp:78
@ REPORT
Writes summary statistics post-simulation.
Definition IPluginComponentInfo.hpp:80
Definition ExchangeLaw.hpp:60
IPluginComponentInfo *(*)() PluginInfoFactory
Typedef for the C factory function that plugin libraries must export.
Definition IPluginComponentInfo.hpp:384
const char * plugin_role_to_string(PluginRole role) noexcept
Read a stable static spelling for a plugin file role.
Definition IPluginComponentInfo.hpp:107
A file-format filter advertised by a plugin.
Definition IPluginComponentInfo.hpp:137
PluginRole role
I/O role this filter applies to.
Definition IPluginComponentInfo.hpp:162
std::string description
Human-readable format name shown to the user.
Definition IPluginComponentInfo.hpp:145
std::vector< std::string > mime_types
Optional MIME types for hosts that need them (web, mobile).
Definition IPluginComponentInfo.hpp:170
std::vector< std::string > patterns
Glob patterns that match files in this format.
Definition IPluginComponentInfo.hpp:154
Registration information for plugin activation.
Definition IPluginComponentInfo.hpp:183
std::string contact_email
Contact email for the registrant.
Definition IPluginComponentInfo.hpp:186
std::string deployment_id
Unique deployment or instance ID.
Definition IPluginComponentInfo.hpp:187
std::string license_key
License key or activation token (may be empty for open plugins)
Definition IPluginComponentInfo.hpp:184
std::string organization
Registering organization name.
Definition IPluginComponentInfo.hpp:185