getOptionalParameter(@NonNull String parameter) {
+ return ofNullable(parameters.get(parameter));
+ }
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/Rika2MqttPlugin.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/Rika2MqttPlugin.java
new file mode 100644
index 00000000..23502c38
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/Rika2MqttPlugin.java
@@ -0,0 +1,48 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import lombok.Getter;
+import lombok.NonNull;
+import org.pf4j.Plugin;
+
+/**
+ * Base class for Rika2Mqtt plugins
+ *
+ * @author Sebastien Vermeille
+ */
+@Beta
+@Getter
+public abstract class Rika2MqttPlugin extends Plugin {
+
+ private PluginConfiguration pluginConfiguration;
+
+ public void preStart(@NonNull PluginConfiguration pluginConfiguration) {
+ this.pluginConfiguration = pluginConfiguration;
+ }
+
+ public String getPluginConfigurationParameter(@NonNull String parameterName) {
+ return pluginConfiguration.getParameter(parameterName);
+ }
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/StoveStatusExtension.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/StoveStatusExtension.java
new file mode 100644
index 00000000..5d389f2a
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/StoveStatusExtension.java
@@ -0,0 +1,42 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import dev.cookiecode.rika2mqtt.plugins.api.v1.model.StoveStatus;
+import org.pf4j.ExtensionPoint;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Beta
+public interface StoveStatusExtension extends ExtensionPoint {
+
+ /**
+ * RIKA stove status is regularly polled by Rika2Mqtt. Each time a scheduled poll succeed this
+ * hook will be invoked and forwarded to plugins.
+ *
+ * @param stoveStatus the status retrieved from rika-firenet
+ */
+ void onPollStoveStatusSucceed(StoveStatus stoveStatus);
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/annotations/ConfigurablePlugin.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/annotations/ConfigurablePlugin.java
new file mode 100644
index 00000000..7b0c3860
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/annotations/ConfigurablePlugin.java
@@ -0,0 +1,51 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.annotations;
+
+import dev.cookiecode.rika2mqtt.plugins.api.v1.model.plugins.OptionalPluginConfigurationParameter;
+import dev.cookiecode.rika2mqtt.plugins.api.v1.model.plugins.PluginConfigurationParameter;
+import dev.cookiecode.rika2mqtt.plugins.api.v1.model.plugins.RequiredPluginConfigurationParameter;
+import java.util.List;
+
+/**
+ * Plugins that require external configuration should implement this interface. This way, they
+ * benefit from Rika2Mqtt configuration check at startup time. The bridge will verify that the
+ * required parameters are provided and then only start the plugin.
+ *
+ * @author Sebastien Vermeille
+ */
+public interface ConfigurablePlugin {
+
+ /**
+ * Declare parameters supported by a plugin. This allows to define some mandatory parameters,
+ * specify their types and default values. At startup when loading plugins Rika2Mqtt will check
+ * for availability of required parameters and display log errors in case of failure.
+ *
+ * These parameters can be build using fluent coding via the following builders: {@link
+ * RequiredPluginConfigurationParameter#builder()}, {@link
+ * OptionalPluginConfigurationParameter#builder()}
+ *
+ * @return a list of plugin configuration parameters
+ */
+ List declarePluginConfigurationParameters();
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/annotations/Nullable.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/annotations/Nullable.java
new file mode 100644
index 00000000..f2481c60
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/annotations/Nullable.java
@@ -0,0 +1,30 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.annotations;
+
+/**
+ * Explicitly document that a parameter can be null
+ *
+ * @author Sebastien Vermeille
+ */
+public @interface Nullable {}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/exceptions/InvalidPluginConfigurationException.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/exceptions/InvalidPluginConfigurationException.java
new file mode 100644
index 00000000..67817874
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/exceptions/InvalidPluginConfigurationException.java
@@ -0,0 +1,36 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.exceptions;
+
+import dev.cookiecode.rika2mqtt.plugins.api.v1.annotations.ConfigurablePlugin;
+import lombok.experimental.StandardException;
+
+/**
+ * Exception thrown by Rika2Mqtt when a plugin specify some configuration via {@link
+ * ConfigurablePlugin#declarePluginConfigurationParameters()} method and the provided configuration
+ * is not satisfying it.
+ *
+ * @author Sebastien Vermeille
+ */
+@StandardException
+public class InvalidPluginConfigurationException extends PluginException {}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/exceptions/PluginException.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/exceptions/PluginException.java
new file mode 100644
index 00000000..64e54e07
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/exceptions/PluginException.java
@@ -0,0 +1,33 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.exceptions;
+
+import lombok.experimental.StandardException;
+
+/**
+ * Base exception regarding to Rika2Mqtt plugins
+ *
+ * @author Sebastien Vermeille
+ */
+@StandardException
+public class PluginException extends Exception {}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/Controls.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/Controls.java
new file mode 100644
index 00000000..dfb738ef
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/Controls.java
@@ -0,0 +1,150 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import static lombok.AccessLevel.NONE;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import java.time.DayOfWeek;
+import java.util.List;
+import java.util.Map;
+import lombok.Builder;
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Data
+@Builder
+@Beta
+public class Controls {
+
+ private long revision;
+ private boolean on;
+ private int operatingMode;
+ private int heatingPower;
+ private int targetTemperature;
+ private int bakeTemperature;
+ private boolean ecoModeEnabled;
+
+ // region HeatingTime
+ // TODO: consider removing these properties handled in getHeatingTimes()
+ @Getter(NONE)
+ private TimeRange heatingTimeMon1;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeMon2;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeTue1;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeTue2;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeWed1;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeWed2;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeThu1;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeThu2;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeFri1;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeFri2;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeSat1;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeSat2;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeSun1;
+
+ @Getter(NONE)
+ private TimeRange heatingTimeSun2;
+
+ // endregion
+ private Map> heatingTimes;
+
+ private Boolean heatingTimesActiveForComfort;
+ private Integer setBackTemperature;
+
+ // region Fan
+ // TODO: consider removing these properties handled in getFans()
+ @Getter(NONE)
+ private boolean convectionFan1Active;
+
+ @Getter(NONE)
+ private int convectionFan1Level;
+
+ @Getter(NONE)
+ private int convectionFan1Area;
+
+ @Getter(NONE)
+ private boolean convectionFan2Active;
+
+ @Getter(NONE)
+ private int convectionFan2Level;
+
+ @Getter(NONE)
+ private int convectionFan2Area;
+
+ // endregion
+ private List fans;
+
+ private boolean frostProtectionActive;
+ private int frostProtectionTemperature;
+ private double temperatureOffset;
+
+ // @SerializedName("RoomPowerRequest") // for coherence (the rest of the api is using camelCase)
+ private int roomPowerRequest;
+
+ // region Debug
+ // TODO: consider removing these properties handled in getDebugs()
+ @Getter(NONE)
+ private int debug0;
+
+ @Getter(NONE)
+ private int debug1;
+
+ @Getter(NONE)
+ private int debug2;
+
+ @Getter(NONE)
+ private int debug3;
+
+ @Getter(NONE)
+ private int debug4;
+
+ // endregion
+ private List debugs;
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ConvectionFan.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ConvectionFan.java
new file mode 100644
index 00000000..197e9db1
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ConvectionFan.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import lombok.*;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Data
+@Builder
+@Beta
+public class ConvectionFan {
+ private int identifier;
+ private boolean active;
+ private int level;
+ private int area;
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ParameterDebug.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ParameterDebug.java
new file mode 100644
index 00000000..05cc7017
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ParameterDebug.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Data
+@Builder
+@Beta
+public class ParameterDebug {
+
+ private int number;
+ private int value;
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ParameterErrorCount.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ParameterErrorCount.java
new file mode 100644
index 00000000..4d8d812d
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/ParameterErrorCount.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Data
+@Builder
+@Beta
+public class ParameterErrorCount {
+
+ private int number;
+ private int value;
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/Sensors.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/Sensors.java
new file mode 100644
index 00000000..ec1ee1d1
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/Sensors.java
@@ -0,0 +1,221 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import static lombok.AccessLevel.NONE;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import java.util.List;
+import lombok.Builder;
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Data
+@Builder
+@Beta
+public class Sensors {
+
+ private Double inputRoomTemperature;
+ private Integer inputFlameTemperature;
+ private Integer inputBakeTemperature;
+ private Integer statusError;
+ private Integer statusSubError;
+ private Integer statusWarning;
+ private Integer statusService;
+ private Integer outputDischargeMotor;
+ private Integer outputDischargeCurrent;
+ private Integer outputIdFan;
+ private Integer outputIdFanTarget;
+ private Integer outputInsertionMotor;
+ private Integer outputInsertionCurrent;
+ private Integer outputAirFlaps;
+ private Integer outputAirFlapsTargetPosition;
+ private Boolean outputBurnBackFlapMagnet;
+ private Boolean outputGridMotor;
+ private Boolean outputIgnition;
+ private Boolean inputUpperTemperatureLimiter;
+ private Boolean inputPressureSwitch;
+ private Integer inputPressureSensor;
+ private Boolean inputGridContact;
+ private Boolean inputDoor;
+ private Boolean inputCover;
+ private Boolean inputExternalRequest;
+ private Boolean inputBurnBackFlapSwitch;
+ private Boolean inputFlueGasFlapSwitch;
+ private Double inputBoardTemperature;
+ private Integer inputCurrentStage;
+
+ // @SerializedName("inputTargetStagePID") // for coherence (the rest of the api is using
+ // camelCase)
+ private Integer inputTargetStagePid;
+
+ // @SerializedName("inputCurrentStagePID") // for coherence (the rest of the api is using
+ // camelCase)
+ private Integer inputCurrentStagePid;
+
+ private Integer statusMainState;
+ private Integer statusSubState;
+ private Integer statusWifiStrength;
+ private Boolean parameterEcoModePossible;
+ private Integer parameterFabricationNumber;
+ private Integer parameterStoveTypeNumber;
+ private Integer parameterLanguageNumber;
+ private Integer parameterVersionMainBoard;
+
+ // @SerializedName("parameterVersionTFT") // for coherence (the rest of the api is using
+ // camelCase)
+ private Integer parameterVersionTft;
+
+ // @SerializedName("parameterVersionWiFi") // for coherence (the rest of the api use Wifi not
+ // WiFi)
+ private Integer parameterVersionWifi;
+
+ private Integer parameterVersionMainBoardBootLoader;
+
+ // @SerializedName("parameterVersionTFTBootLoader")
+ // for coherence (the rest of the api is using camelCase)
+ private Integer parameterVersionTftBootLoader;
+
+ // @SerializedName("parameterVersionWiFiBootLoader")
+ // for coherence (the rest of the api is using camelCase)
+ private Integer parameterVersionWifiBootLoader;
+
+ private Integer parameterVersionMainBoardSub;
+
+ // @SerializedName("parameterVersionTFTSub")
+ // for coherence (the rest of the api is using camelCase)
+ private Integer parameterVersionTftSub;
+
+ // @SerializedName("parameterVersionWiFiSub")
+ // for coherence (the rest of the api use Wifi not WiFi)
+ private Integer parameterVersionWifiSub;
+
+ private Integer parameterRuntimePellets;
+ private Integer parameterRuntimeLogs;
+ private Integer parameterFeedRateTotal;
+ private Integer parameterFeedRateService;
+ private Integer parameterServiceCountdownKg;
+ private Integer parameterServiceCountdownTime;
+ private Integer parameterIgnitionCount;
+ private Integer parameterOnOffCycleCount;
+ private Integer parameterFlameSensorOffset;
+ private Integer parameterPressureSensorOffset;
+
+ // region HeatingTime
+ // TODO: consider removing these properties handled in getParametersErrorCount()
+ @Getter(NONE)
+ private Integer parameterErrorCount0;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount1;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount2;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount3;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount4;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount5;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount6;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount7;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount8;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount9;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount10;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount11;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount12;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount13;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount14;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount15;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount16;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount17;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount18;
+
+ @Getter(NONE)
+ private Integer parameterErrorCount19;
+
+ // endregion
+ private List parametersErrorCount;
+
+ private Boolean statusHeatingTimesNotProgrammed;
+ private Boolean statusFrostStarted;
+ private Integer parameterSpiralMotorsTuning;
+
+ // @SerializedName("parameterIDFanTuning") // for coherence (the rest of the api is using
+ // camelCase)
+ private Integer parameterIdFanTuning;
+
+ private Integer parameterCleanIntervalBig;
+ private Integer parameterKgTillCleaning;
+
+ // region ParameterDebug
+ @Getter(NONE)
+ private Integer parameterDebug0;
+
+ @Getter(NONE)
+ private Integer parameterDebug1;
+
+ @Getter(NONE)
+ private Integer parameterDebug2;
+
+ @Getter(NONE)
+ private Integer parameterDebug3;
+
+ @Getter(NONE)
+ private Integer parameterDebug4;
+
+ // endregion
+ private List parametersDebug;
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/StoveId.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/StoveId.java
new file mode 100644
index 00000000..b6f0392b
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/StoveId.java
@@ -0,0 +1,36 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Beta
+public record StoveId(Long id) {
+
+ public static StoveId of(Long id) {
+ return new StoveId(id);
+ }
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/StoveStatus.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/StoveStatus.java
new file mode 100644
index 00000000..ff6a6c4b
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/StoveStatus.java
@@ -0,0 +1,44 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import lombok.Data;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Data
+@Beta
+public class StoveStatus {
+
+ private String name;
+ private StoveId stoveId;
+
+ private Long lastSeenMinutes;
+ private Long lastConfirmedRevision;
+ private String oem;
+ private String stoveType;
+ private Sensors sensors;
+ private Controls controls;
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/TimeDefinition.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/TimeDefinition.java
new file mode 100644
index 00000000..e3b6e575
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/TimeDefinition.java
@@ -0,0 +1,54 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import lombok.Builder;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+
+/**
+ * Class to represent time schedules such as : 10:00 - 12:30
+ *
+ * @author Sebastien Vermeille
+ */
+@Builder
+@Getter
+@EqualsAndHashCode
+@Beta
+public class TimeDefinition {
+ private final int hours;
+ private final int minutes;
+
+ private static final Double ONE_MINUTE_DURATION_IN_SECONDS = 60.0;
+
+ @Override
+ public String toString() {
+ return String.format("%s:%02d", hours, minutes);
+ }
+
+ /** Helper method to return 9.5 given 9h30 */
+ public Double asDecimal() {
+ return this.getHours() + (this.getMinutes() / ONE_MINUTE_DURATION_IN_SECONDS);
+ }
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/TimeRange.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/TimeRange.java
new file mode 100644
index 00000000..eb5f46b8
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/TimeRange.java
@@ -0,0 +1,45 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model;
+
+import dev.cookiecode.rika2mqtt.plugins.api.Beta;
+import lombok.Builder;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Builder
+@Getter
+@EqualsAndHashCode
+@Beta
+public class TimeRange {
+ private final TimeDefinition from;
+ private final TimeDefinition to;
+
+ @Override
+ public String toString() {
+ return String.format("%s - %s", from.toString(), to.toString());
+ }
+}
diff --git a/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/plugins/OptionalPluginConfigurationParameter.java b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/plugins/OptionalPluginConfigurationParameter.java
new file mode 100644
index 00000000..90cd063d
--- /dev/null
+++ b/plugins-api/src/main/java/dev/cookiecode/rika2mqtt/plugins/api/v1/model/plugins/OptionalPluginConfigurationParameter.java
@@ -0,0 +1,142 @@
+/*
+ * The MIT License
+ * Copyright © 2022 Sebastien Vermeille
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package dev.cookiecode.rika2mqtt.plugins.api.v1.model.plugins;
+
+import java.util.Optional;
+import javax.annotation.processing.Generated;
+import lombok.Getter;
+
+/**
+ * @author Sebastien Vermeille
+ */
+@Generated(
+ value = "Step Builder generator Idea Plugin",
+ date = "2023-12-31T09:40:55+0100",
+ comments = "parsely adapted by hands to handle optional props")
+@Getter
+public class OptionalPluginConfigurationParameter {
+ private final String parameterName;
+ private final String description;
+ private final Class> valueType;
+
+ private final String example;
+ private final Object defaultValue;
+
+ private OptionalPluginConfigurationParameter(Builder builder) {
+ parameterName = builder.parameterName;
+ description = builder.description;
+ valueType = builder.valueType;
+ example = builder.example;
+ defaultValue = builder.defaultValue;
+ }
+
+ public static IParameterName builder() {
+ return new Builder();
+ }
+
+ public interface IBuild {
+ IBuild withDefaultValue(Object val);
+
+ IBuild withExample(String val);
+
+ PluginConfigurationParameter build();
+ }
+
+ public interface IDefaultValue {
+ IBuild withDefaultValue(Object val);
+ }
+
+ public interface IExample {
+ IBuild withExample(String val);
+ }
+
+ public interface IValueType {
+ IBuild withValueType(Class> val);
+ }
+
+ public interface IDescription {
+ IValueType withDescription(String val);
+ }
+
+ public interface IParameterName {
+ IDescription withParameterName(String val);
+ }
+
+ public static final class Builder
+ implements IDefaultValue, IExample, IValueType, IDescription, IParameterName, IBuild {
+ private Object defaultValue;
+ private String example;
+ private Class> valueType;
+ private String description;
+ private String parameterName;
+
+ private Builder() {}
+
+ @Override
+ public IBuild withDefaultValue(Object val) {
+ defaultValue = val;
+ return this;
+ }
+
+ @Override
+ public IBuild withExample(String val) {
+ example = val;
+ return this;
+ }
+
+ @Override
+ public IBuild withValueType(Class> val) {
+ valueType = val;
+ return this;
+ }
+
+ @Override
+ public IValueType withDescription(String val) {
+ description = val;
+ return this;
+ }
+
+ @Override
+ public IDescription withParameterName(String val) {
+ parameterName = val;
+ return this;
+ }
+
+ public PluginConfigurationParameter build() {
+ return asPluginConfigurationParameter(new OptionalPluginConfigurationParameter(this));
+ }
+ }
+
+ public Optional