--- /dev/null
+
+
+
+Plugin:
+
+foo()
+bar()
+getValue()
+setValue()
+
+
+
+Service:
+
+getPlugins(args...)
+capabilities() -> "pluginid:service"
+
+
+
+SwingConfigurator:
+
+getConfigurationComponent(plugin)
+capabilities() -> "pluginid:config"
+
+
+
+
+OpenRocketSimulationListener extends SimulationListener implements Service, SwingConfigurator:
+
+
+constructor:
+ pluginid = class name
+
+
+getPlugins():
+ return new this
+
+capabilities: pluginid:service, pluginid:config
+
+getConfigurationComponent(plugin)
+ plugin.getConfigurationComponent()
+
+abstract getConfigurationComponent()
+
+
+
+
+
+Types of plugins:
+
+
+AtmosphericModel
+ - Name -> dropdown
+ - Config component -> dialog window (or button)
+ - stateful, non-dynamic
+ - stored
+
+
+SimulationListener
+ - Name + menu position -> Add extension menu
+ - Config component -> dialog after edit button
+ - stateful, (dynamic?)
+ - stored
+
+
+OptimizationModifier
+ - contains its own name, description, related object
+ - config N/A
+ - stateful, dynamic
+ - not stored
+
+
+OptimizationParameter
+ - name
+ - config N/A
+ - stateful, (dynamic?)
+ - not stored
+
+
+PluginDialogWindow
+ - name + menu position -> Menu
+ - stateful, non-dynamic
+ - not stored
+
+
+Motor
+ - Name -> Config tab
+ - Config component -> tab contents ????
+ - or a separate configuration interface?
+ - stored
+
+
+
+Name is common - out, instead have name separately in plugin interfaces?
+Menu position used twice - out
+
+Leave common configuration out
+ -> :config supported by those that make sense
+ -> may have separate interface from SwingConfigurator (e.g. SwingMotorConfigurator)
+
+Motor
+ -> :loader separately? for injecting placeholders
+ or store data and call loaders later
+
+
+
+
+<extension pluginid="com.example.MyFancyExtension">
+ <param type="double" key="altitude">100.0</param>
+ <param type="material" key="mat">
+ <name>Gold</name>
+ <type>bulk</type>
+ <density>16000</density>
+ </param>
+</extension>
+
+
+<extension pluginid="com.example.MyFancyExtension">
+ <param type="double" key="altitude">100.0</param>
+ <param type="material" key="mat">
+ <name>Gold</name>
+ <type>bulk</type>
+ <density>16000</density>
+ </param>
+</extension>
+
+
+<extension pluginid="com.example.MyFancyExtension">
+</extension>
+
+
+<extension pluginid="com.example.MyFancyExtension">
+</extension>
+
+