From 829193afecb7ac9639ad4964a5a58844ed579225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nagy=20Attila=20G=C3=A1bor?= Date: Sun, 7 Oct 2018 21:15:41 +0200 Subject: [PATCH] [modbus] Export thing handler interface for upcoming bundles (#4077) * [modbus] Export thing handler interface for upcoming bundles Exporting the thing handler interface and the required other interfaces makes it possible to textend this binding by other bundles. Such an use case is when custom handlers are written to specific devices. * [modbus] Renamed internal constants class to ModbusBindingConstantsInternal Signed-off-by: Nagy Attila Gabor Signed-off-by: Pascal Larin --- .../internal/ModbusDataHandlerTest.java | 153 ++++++++++-------- .../ModbusPollerThingHandlerTest.java | 12 +- .../internal/ModbusTcpThingHandlerTest.java | 6 +- .../META-INF/MANIFEST.MF | 2 + .../modbus/ModbusBindingConstants.java | 25 +++ .../EndpointNotInitializedException.java | 2 +- .../handler/ModbusEndpointThingHandler.java | 2 +- ...va => ModbusBindingConstantsInternal.java} | 6 +- .../modbus/internal/ModbusHandlerFactory.java | 2 +- .../AbstractModbusEndpointThingHandler.java | 1 + .../handler/ModbusDataThingHandler.java | 28 ++-- .../handler/ModbusPollerThingHandlerImpl.java | 10 +- 12 files changed, 147 insertions(+), 102 deletions(-) create mode 100644 addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/ModbusBindingConstants.java rename addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/{internal => }/handler/EndpointNotInitializedException.java (93%) rename addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/{internal => }/handler/ModbusEndpointThingHandler.java (96%) rename addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/{ModbusBindingConstants.java => ModbusBindingConstantsInternal.java} (96%) diff --git a/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusDataHandlerTest.java b/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusDataHandlerTest.java index 31706ace376bb..688849926623d 100644 --- a/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusDataHandlerTest.java +++ b/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusDataHandlerTest.java @@ -83,11 +83,13 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import org.openhab.binding.modbus.internal.ModbusBindingConstants; +import org.openhab.binding.modbus.internal.ModbusBindingConstantsInternal; import org.openhab.binding.modbus.internal.handler.ModbusDataThingHandler; import org.openhab.binding.modbus.internal.handler.ModbusPollerThingHandler; import org.openhab.binding.modbus.internal.handler.ModbusPollerThingHandlerImpl; import org.openhab.binding.modbus.internal.handler.ModbusTcpThingHandler; +import org.openhab.io.transport.modbus.BasicModbusRegister; +import org.openhab.io.transport.modbus.BasicModbusRegisterArray; import org.openhab.io.transport.modbus.BitArray; import org.openhab.io.transport.modbus.ModbusConstants; import org.openhab.io.transport.modbus.ModbusConstants.ValueType; @@ -96,8 +98,6 @@ import org.openhab.io.transport.modbus.ModbusReadRequestBlueprint; import org.openhab.io.transport.modbus.ModbusRegister; import org.openhab.io.transport.modbus.ModbusRegisterArray; -import org.openhab.io.transport.modbus.BasicModbusRegisterArray; -import org.openhab.io.transport.modbus.BasicModbusRegister; import org.openhab.io.transport.modbus.ModbusResponse; import org.openhab.io.transport.modbus.ModbusWriteCoilRequestBlueprint; import org.openhab.io.transport.modbus.ModbusWriteFunctionCode; @@ -225,13 +225,13 @@ public ItemBuilder newItemBuilder(String itemType, String itemName) { private static final Map> channelToItemClass = new HashMap<>(); static { - channelToItemClass.put(ModbusBindingConstants.CHANNEL_SWITCH, SwitchItem.class); - channelToItemClass.put(ModbusBindingConstants.CHANNEL_CONTACT, ContactItem.class); - channelToItemClass.put(ModbusBindingConstants.CHANNEL_DATETIME, DateTimeItem.class); - channelToItemClass.put(ModbusBindingConstants.CHANNEL_DIMMER, DimmerItem.class); - channelToItemClass.put(ModbusBindingConstants.CHANNEL_NUMBER, NumberItem.class); - channelToItemClass.put(ModbusBindingConstants.CHANNEL_STRING, StringItem.class); - channelToItemClass.put(ModbusBindingConstants.CHANNEL_ROLLERSHUTTER, RollershutterItem.class); + channelToItemClass.put(ModbusBindingConstantsInternal.CHANNEL_SWITCH, SwitchItem.class); + channelToItemClass.put(ModbusBindingConstantsInternal.CHANNEL_CONTACT, ContactItem.class); + channelToItemClass.put(ModbusBindingConstantsInternal.CHANNEL_DATETIME, DateTimeItem.class); + channelToItemClass.put(ModbusBindingConstantsInternal.CHANNEL_DIMMER, DimmerItem.class); + channelToItemClass.put(ModbusBindingConstantsInternal.CHANNEL_NUMBER, NumberItem.class); + channelToItemClass.put(ModbusBindingConstantsInternal.CHANNEL_STRING, StringItem.class); + channelToItemClass.put(ModbusBindingConstantsInternal.CHANNEL_ROLLERSHUTTER, RollershutterItem.class); } private List things = new ArrayList<>(); @@ -256,15 +256,17 @@ public ItemBuilder newItemBuilder(String itemType, String itemName) { Map> stateUpdates = new HashMap<>(); private Map channelToAcceptedType = ImmutableMap. builder() - .put(ModbusBindingConstants.CHANNEL_SWITCH, "Switch").put(ModbusBindingConstants.CHANNEL_CONTACT, "Contact") - .put(ModbusBindingConstants.CHANNEL_DATETIME, "DateTime") - .put(ModbusBindingConstants.CHANNEL_DIMMER, "Dimmer").put(ModbusBindingConstants.CHANNEL_NUMBER, "Number") - .put(ModbusBindingConstants.CHANNEL_STRING, "String") - .put(ModbusBindingConstants.CHANNEL_ROLLERSHUTTER, "Rollershutter") - .put(ModbusBindingConstants.CHANNEL_LAST_READ_SUCCESS, "DateTime") - .put(ModbusBindingConstants.CHANNEL_LAST_WRITE_SUCCESS, "DateTime") - .put(ModbusBindingConstants.CHANNEL_LAST_WRITE_ERROR, "DateTime") - .put(ModbusBindingConstants.CHANNEL_LAST_READ_ERROR, "DateTime").build(); + .put(ModbusBindingConstantsInternal.CHANNEL_SWITCH, "Switch") + .put(ModbusBindingConstantsInternal.CHANNEL_CONTACT, "Contact") + .put(ModbusBindingConstantsInternal.CHANNEL_DATETIME, "DateTime") + .put(ModbusBindingConstantsInternal.CHANNEL_DIMMER, "Dimmer") + .put(ModbusBindingConstantsInternal.CHANNEL_NUMBER, "Number") + .put(ModbusBindingConstantsInternal.CHANNEL_STRING, "String") + .put(ModbusBindingConstantsInternal.CHANNEL_ROLLERSHUTTER, "Rollershutter") + .put(ModbusBindingConstantsInternal.CHANNEL_LAST_READ_SUCCESS, "DateTime") + .put(ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_SUCCESS, "DateTime") + .put(ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_ERROR, "DateTime") + .put(ModbusBindingConstantsInternal.CHANNEL_LAST_READ_ERROR, "DateTime").build(); private void registerThingToMockRegistry(Thing thing) { things.add(thing); @@ -330,8 +332,8 @@ private void hookStateUpdates(Thing thing) { private Bridge createPollerMock(String pollerId, PollTask task) { final Bridge poller; - ThingUID thingUID = new ThingUID(ModbusBindingConstants.THING_TYPE_MODBUS_POLLER, pollerId); - BridgeBuilder builder = BridgeBuilder.create(ModbusBindingConstants.THING_TYPE_MODBUS_POLLER, thingUID) + ThingUID thingUID = new ThingUID(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_POLLER, pollerId); + BridgeBuilder builder = BridgeBuilder.create(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_POLLER, thingUID) .withLabel("label for " + pollerId); for (Entry entry : channelToAcceptedType.entrySet()) { String channelId = entry.getKey(); @@ -379,8 +381,8 @@ private ModbusDataThingHandler createDataHandler(String id, Bridge bridge, private ModbusDataThingHandler createDataHandler(String id, Bridge bridge, Function builderConfigurator, BundleContext context, boolean autoCreateItemsAndLinkToChannels) { - ThingUID thingUID = new ThingUID(ModbusBindingConstants.THING_TYPE_MODBUS_DATA, id); - ThingBuilder builder = ThingBuilder.create(ModbusBindingConstants.THING_TYPE_MODBUS_DATA, thingUID) + ThingUID thingUID = new ThingUID(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_DATA, id); + ThingBuilder builder = ThingBuilder.create(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_DATA, thingUID) .withLabel("label for " + id); for (Entry entry : channelToAcceptedType.entrySet()) { String channelId = entry.getKey(); @@ -701,31 +703,32 @@ public void testOnError() { assertThat(stateUpdates.size(), is(equalTo(1))); assertThat( - stateUpdates.get( - dataHandler.getThing().getChannel(ModbusBindingConstants.CHANNEL_LAST_READ_ERROR).getUID()), + stateUpdates.get(dataHandler.getThing() + .getChannel(ModbusBindingConstantsInternal.CHANNEL_LAST_READ_ERROR).getUID()), is(notNullValue())); } @Test public void testOnRegistersInt16StaticTransformation() { ModbusDataThingHandler dataHandler = testReadHandlingGeneric(ModbusReadFunctionCode.READ_MULTIPLE_REGISTERS, - "0", "-3", ModbusConstants.ValueType.INT16, null, - new BasicModbusRegisterArray(new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), + "0", "-3", ModbusConstants.ValueType.INT16, null, new BasicModbusRegisterArray( + new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), null); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_ERROR, is(nullValue(State.class))); // -3 converts to "true" - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_CONTACT, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_SWITCH, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_DIMMER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_NUMBER, new DecimalType(-3)); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_CONTACT, + is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_SWITCH, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_DIMMER, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_NUMBER, new DecimalType(-3)); // roller shutter fails since -3 is invalid value (not between 0...100) - // assertThatStateContains(state, ModbusBindingConstants.CHANNEL_ROLLERSHUTTER, new PercentType(1)); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_STRING, new StringType("-3")); + // assertThatStateContains(state, ModbusBindingConstantsInternal.CHANNEL_ROLLERSHUTTER, new PercentType(1)); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_STRING, new StringType("-3")); // no datetime, conversion not possible without transformation } @@ -746,22 +749,25 @@ public String transform(String function, String source) throws TransformationExc }); ModbusDataThingHandler dataHandler = testReadHandlingGeneric(ModbusReadFunctionCode.READ_MULTIPLE_REGISTERS, "0", "MULTIPLY(10)", ModbusConstants.ValueType.INT16, null, - new BasicModbusRegisterArray(new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), + new BasicModbusRegisterArray( + new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), null, bundleContext); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_ERROR, is(nullValue(State.class))); // -3 converts to "true" - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_CONTACT, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_SWITCH, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_DIMMER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_NUMBER, new DecimalType(-30)); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_CONTACT, + is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_SWITCH, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_DIMMER, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_NUMBER, new DecimalType(-30)); // roller shutter fails since -3 is invalid value (not between 0...100) - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_ROLLERSHUTTER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_STRING, new StringType("-30")); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_ROLLERSHUTTER, + is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_STRING, new StringType("-30")); // no datetime, conversion not possible without transformation } @@ -776,23 +782,26 @@ public String transform(String function, String source) throws TransformationExc }); ModbusDataThingHandler dataHandler = testReadHandlingGeneric(ModbusReadFunctionCode.READ_MULTIPLE_REGISTERS, "0", "MULTIPLY(10)", ModbusConstants.ValueType.INT16, null, - new BasicModbusRegisterArray(new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), + new BasicModbusRegisterArray( + new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), null, bundleContext, // Not linking items and channels false); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_ERROR, is(nullValue(State.class))); // Since channles are not linked, they are not updated (are null) - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_CONTACT, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_SWITCH, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_DIMMER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_NUMBER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_ROLLERSHUTTER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_STRING, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_CONTACT, + is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_SWITCH, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_DIMMER, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_NUMBER, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_ROLLERSHUTTER, + is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_STRING, is(nullValue(State.class))); } @Test @@ -806,20 +815,24 @@ public String transform(String function, String source) throws TransformationExc }); ModbusDataThingHandler dataHandler = testReadHandlingGeneric(ModbusReadFunctionCode.READ_MULTIPLE_REGISTERS, "0", "ONOFF(10)", ModbusConstants.ValueType.INT16, null, - new BasicModbusRegisterArray(new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), + new BasicModbusRegisterArray( + new ModbusRegister[] { new BasicModbusRegister((byte) 0xff, (byte) 0xfd) }), null, bundleContext); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_READ_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_READ_ERROR, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_CONTACT, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_SWITCH, is(equalTo(OnOffType.ON))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_DIMMER, is(equalTo(OnOffType.ON))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_NUMBER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_ROLLERSHUTTER, is(nullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_STRING, is(equalTo(new StringType("ON")))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_CONTACT, + is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_SWITCH, is(equalTo(OnOffType.ON))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_DIMMER, is(equalTo(OnOffType.ON))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_NUMBER, is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_ROLLERSHUTTER, + is(nullValue(State.class))); + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_STRING, + is(equalTo(new StringType("ON")))); } @Test @@ -835,9 +848,9 @@ public String transform(String function, String source) throws TransformationExc ModbusConstants.ValueType.BIT, "coil", ModbusWriteFunctionCode.WRITE_COIL, "number", new DecimalType("2"), null, bundleContext); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_ERROR, is(nullValue(State.class))); assertThat(writeTasks.size(), is(equalTo(1))); WriteTask writeTask = writeTasks.get(0); @@ -861,9 +874,9 @@ public String transform(String function, String source) throws TransformationExc ModbusConstants.ValueType.BIT, "coil", ModbusWriteFunctionCode.WRITE_COIL, "number", new DecimalType("2"), null, bundleContext); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_ERROR, is(nullValue(State.class))); assertThat(writeTasks.size(), is(equalTo(1))); WriteTask writeTask = writeTasks.get(0); @@ -887,9 +900,9 @@ public String transform(String function, String source) throws TransformationExc ModbusConstants.ValueType.INT16, "holding", ModbusWriteFunctionCode.WRITE_SINGLE_REGISTER, "number", new DecimalType("2"), null, bundleContext); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_ERROR, is(nullValue(State.class))); assertThat(writeTasks.size(), is(equalTo(1))); WriteTask writeTask = writeTasks.get(0); @@ -932,9 +945,9 @@ public String transform(String function, String source) throws TransformationExc ModbusConstants.ValueType.INT16, "holding", ModbusWriteFunctionCode.WRITE_MULTIPLE_REGISTERS, "number", new DecimalType("2"), null, bundleContext); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_SUCCESS, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_SUCCESS, is(notNullValue(State.class))); - assertSingleStateUpdate(dataHandler, ModbusBindingConstants.CHANNEL_LAST_WRITE_ERROR, + assertSingleStateUpdate(dataHandler, ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_ERROR, is(nullValue(State.class))); assertThat(writeTasks.size(), is(equalTo(2))); { diff --git a/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusPollerThingHandlerTest.java b/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusPollerThingHandlerTest.java index 6b08135f49558..e45e25c9ae648 100644 --- a/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusPollerThingHandlerTest.java +++ b/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusPollerThingHandlerTest.java @@ -45,7 +45,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import org.openhab.binding.modbus.internal.ModbusBindingConstants; +import org.openhab.binding.modbus.internal.ModbusBindingConstantsInternal; import org.openhab.binding.modbus.internal.handler.ModbusDataThingHandler; import org.openhab.binding.modbus.internal.handler.ModbusPollerThingHandler; import org.openhab.binding.modbus.internal.handler.ModbusPollerThingHandlerImpl; @@ -77,13 +77,13 @@ public class ModbusPollerThingHandlerTest { private ThingHandlerCallback thingCallback; public static BridgeBuilder createTcpThingBuilder(String id) { - return BridgeBuilder.create(ModbusBindingConstants.THING_TYPE_MODBUS_TCP, - new ThingUID(ModbusBindingConstants.THING_TYPE_MODBUS_TCP, id)).withLabel("label for " + id); + return BridgeBuilder.create(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_TCP, + new ThingUID(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_TCP, id)).withLabel("label for " + id); } public static BridgeBuilder createPollerThingBuilder(String id) { - return BridgeBuilder.create(ModbusBindingConstants.THING_TYPE_MODBUS_POLLER, - new ThingUID(ModbusBindingConstants.THING_TYPE_MODBUS_POLLER, id)).withLabel("label for " + id); + return BridgeBuilder.create(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_POLLER, + new ThingUID(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_POLLER, id)).withLabel("label for " + id); } private void registerThingToMockRegistry(Thing thing) { @@ -168,7 +168,7 @@ public void testInitializeNonPolling() pollerConfig.put("refresh", 0L); // 0 -> non polling pollerConfig.put("start", 5); pollerConfig.put("length", 9); - pollerConfig.put("type", ModbusBindingConstants.READ_TYPE_HOLDING_REGISTER); + pollerConfig.put("type", ModbusBindingConstantsInternal.READ_TYPE_HOLDING_REGISTER); poller = createPollerThingBuilder("poller").withConfiguration(pollerConfig).withBridge(endpoint.getUID()) .build(); registerThingToMockRegistry(poller); diff --git a/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusTcpThingHandlerTest.java b/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusTcpThingHandlerTest.java index 4b3dedd5696e5..3a411b6e11e0f 100644 --- a/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusTcpThingHandlerTest.java +++ b/addons/binding/org.openhab.binding.modbus.test/src/test/java/org/openhab/binding/modbus/internal/ModbusTcpThingHandlerTest.java @@ -28,7 +28,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import org.openhab.binding.modbus.internal.ModbusBindingConstants; +import org.openhab.binding.modbus.internal.ModbusBindingConstantsInternal; import org.openhab.binding.modbus.internal.handler.ModbusTcpThingHandler; import org.openhab.io.transport.modbus.ModbusManager; import org.openhab.io.transport.modbus.endpoint.EndpointPoolConfiguration; @@ -42,8 +42,8 @@ public class ModbusTcpThingHandlerTest { private ModbusManager modbusManager; private static BridgeBuilder createTcpThingBuilder(String id) { - return BridgeBuilder.create(ModbusBindingConstants.THING_TYPE_MODBUS_TCP, - new ThingUID(ModbusBindingConstants.THING_TYPE_MODBUS_TCP, id)); + return BridgeBuilder.create(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_TCP, + new ThingUID(ModbusBindingConstantsInternal.THING_TYPE_MODBUS_TCP, id)); } @SuppressWarnings("null") diff --git a/addons/binding/org.openhab.binding.modbus/META-INF/MANIFEST.MF b/addons/binding/org.openhab.binding.modbus/META-INF/MANIFEST.MF index 07572aea8dbcf..6cc96d0429dfd 100644 --- a/addons/binding/org.openhab.binding.modbus/META-INF/MANIFEST.MF +++ b/addons/binding/org.openhab.binding.modbus/META-INF/MANIFEST.MF @@ -23,4 +23,6 @@ Import-Package: org.apache.commons.lang, org.osgi.framework, org.slf4j Service-Component: OSGI-INF/*.xml +Export-Package: org.openhab.binding.modbus, + org.openhab.binding.modbus.handler Bundle-ActivationPolicy: lazy diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/ModbusBindingConstants.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/ModbusBindingConstants.java new file mode 100644 index 0000000000000..1a59f5638233f --- /dev/null +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/ModbusBindingConstants.java @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2010-2018 by the respective copyright holders. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.openhab.binding.modbus; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * The {@link ModbusBinding} class defines some constants + * public that might be used from other bundles as well. + * + * @author Sami Salonen - Initial contribution + * @author Nagy Attila Gabor - Split the original ModbusBindingConstants in two + */ +@NonNullByDefault +public class ModbusBindingConstants { + + public static final String BINDING_ID = "modbus"; + +} diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/EndpointNotInitializedException.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/handler/EndpointNotInitializedException.java similarity index 93% rename from addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/EndpointNotInitializedException.java rename to addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/handler/EndpointNotInitializedException.java index 4fa295d04399a..59f68ea356736 100644 --- a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/EndpointNotInitializedException.java +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/handler/EndpointNotInitializedException.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.openhab.binding.modbus.internal.handler; +package org.openhab.binding.modbus.handler; import org.eclipse.jdt.annotation.NonNullByDefault; diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusEndpointThingHandler.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/handler/ModbusEndpointThingHandler.java similarity index 96% rename from addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusEndpointThingHandler.java rename to addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/handler/ModbusEndpointThingHandler.java index 9187d9605176a..bf081b604ec5a 100644 --- a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusEndpointThingHandler.java +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/handler/ModbusEndpointThingHandler.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.openhab.binding.modbus.internal.handler; +package org.openhab.binding.modbus.handler; import java.util.function.Supplier; diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusBindingConstants.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusBindingConstantsInternal.java similarity index 96% rename from addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusBindingConstants.java rename to addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusBindingConstantsInternal.java index eb263094c96a4..e38ea31e2f421 100644 --- a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusBindingConstants.java +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusBindingConstantsInternal.java @@ -8,6 +8,8 @@ */ package org.openhab.binding.modbus.internal; +import static org.openhab.binding.modbus.ModbusBindingConstants.BINDING_ID; + import java.util.HashMap; import java.util.Map; @@ -22,9 +24,7 @@ * @author Sami Salonen - Initial contribution */ @NonNullByDefault -public class ModbusBindingConstants { - - public static final String BINDING_ID = "modbus"; +public class ModbusBindingConstantsInternal { // List of all Thing Type UIDs public static final ThingTypeUID THING_TYPE_MODBUS_TCP = new ThingTypeUID(BINDING_ID, "tcp"); diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusHandlerFactory.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusHandlerFactory.java index 6157da28fe9a5..88410437e02ef 100644 --- a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusHandlerFactory.java +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/ModbusHandlerFactory.java @@ -8,7 +8,7 @@ */ package org.openhab.binding.modbus.internal; -import static org.openhab.binding.modbus.internal.ModbusBindingConstants.*; +import static org.openhab.binding.modbus.internal.ModbusBindingConstantsInternal.*; import java.util.HashSet; import java.util.Set; diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/AbstractModbusEndpointThingHandler.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/AbstractModbusEndpointThingHandler.java index fc7f81bd6ee02..ce25f2f5d01c4 100644 --- a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/AbstractModbusEndpointThingHandler.java +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/AbstractModbusEndpointThingHandler.java @@ -18,6 +18,7 @@ import org.eclipse.smarthome.core.thing.ThingStatusDetail; import org.eclipse.smarthome.core.thing.binding.BaseBridgeHandler; import org.eclipse.smarthome.core.types.Command; +import org.openhab.binding.modbus.handler.ModbusEndpointThingHandler; import org.openhab.binding.modbus.internal.ModbusConfigurationException; import org.openhab.io.transport.modbus.ModbusManager; import org.openhab.io.transport.modbus.ModbusManagerListener; diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusDataThingHandler.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusDataThingHandler.java index 34c63cca5495b..2ea909edeb3a4 100644 --- a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusDataThingHandler.java +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusDataThingHandler.java @@ -8,7 +8,7 @@ */ package org.openhab.binding.modbus.internal.handler; -import static org.openhab.binding.modbus.internal.ModbusBindingConstants.*; +import static org.openhab.binding.modbus.internal.ModbusBindingConstantsInternal.*; import java.math.BigDecimal; import java.util.Collection; @@ -46,7 +46,9 @@ import org.eclipse.smarthome.core.types.Command; import org.eclipse.smarthome.core.types.RefreshType; import org.eclipse.smarthome.core.types.State; -import org.openhab.binding.modbus.internal.ModbusBindingConstants; +import org.openhab.binding.modbus.handler.EndpointNotInitializedException; +import org.openhab.binding.modbus.handler.ModbusEndpointThingHandler; +import org.openhab.binding.modbus.internal.ModbusBindingConstantsInternal; import org.openhab.binding.modbus.internal.ModbusConfigurationException; import org.openhab.binding.modbus.internal.Transformation; import org.openhab.binding.modbus.internal.config.ModbusDataConfiguration; @@ -92,19 +94,19 @@ public class ModbusDataThingHandler extends BaseThingHandler implements ModbusRe private static final Map>> CHANNEL_ID_TO_ACCEPTED_TYPES = new HashMap<>(); static { - CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstants.CHANNEL_SWITCH, + CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstantsInternal.CHANNEL_SWITCH, new SwitchItem("").getAcceptedDataTypes()); - CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstants.CHANNEL_CONTACT, + CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstantsInternal.CHANNEL_CONTACT, new ContactItem("").getAcceptedDataTypes()); - CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstants.CHANNEL_DATETIME, + CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstantsInternal.CHANNEL_DATETIME, new DateTimeItem("").getAcceptedDataTypes()); - CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstants.CHANNEL_DIMMER, + CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstantsInternal.CHANNEL_DIMMER, new DimmerItem("").getAcceptedDataTypes()); - CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstants.CHANNEL_NUMBER, + CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstantsInternal.CHANNEL_NUMBER, new NumberItem("").getAcceptedDataTypes()); - CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstants.CHANNEL_STRING, + CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstantsInternal.CHANNEL_STRING, new StringItem("").getAcceptedDataTypes()); - CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstants.CHANNEL_ROLLERSHUTTER, + CHANNEL_ID_TO_ACCEPTED_TYPES.put(ModbusBindingConstantsInternal.CHANNEL_ROLLERSHUTTER, new RollershutterItem("").getAcceptedDataTypes()); } @@ -692,7 +694,7 @@ public synchronized void onError(ModbusReadRequestBlueprint request, Exception e error.getMessage(), error); } Map<@NonNull ChannelUID, @NonNull State> states = new HashMap<>(); - states.put(new ChannelUID(getThing().getUID(), ModbusBindingConstants.CHANNEL_LAST_READ_ERROR), + states.put(new ChannelUID(getThing().getUID(), ModbusBindingConstantsInternal.CHANNEL_LAST_READ_ERROR), new DateTimeType()); synchronized (this) { @@ -727,7 +729,7 @@ public synchronized void onError(ModbusWriteRequestBlueprint request, Exception error.getMessage(), error); } Map<@NonNull ChannelUID, @NonNull State> states = new HashMap<>(); - states.put(new ChannelUID(getThing().getUID(), ModbusBindingConstants.CHANNEL_LAST_WRITE_ERROR), + states.put(new ChannelUID(getThing().getUID(), ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_ERROR), new DateTimeType()); synchronized (this) { @@ -752,7 +754,7 @@ public synchronized void onWriteResponse(ModbusWriteRequestBlueprint request, Mo logger.debug("Successful write, matching request {}", request); DateTimeType now = new DateTimeType(); updateStatus(ThingStatus.ONLINE); - updateState(ModbusBindingConstants.CHANNEL_LAST_WRITE_SUCCESS, now); + updateState(ModbusBindingConstantsInternal.CHANNEL_LAST_WRITE_SUCCESS, now); } /** @@ -813,7 +815,7 @@ private Map processUpdatedValue(DecimalType numericState, boo } }); - states.put(new ChannelUID(getThing().getUID(), ModbusBindingConstants.CHANNEL_LAST_READ_SUCCESS), + states.put(new ChannelUID(getThing().getUID(), ModbusBindingConstantsInternal.CHANNEL_LAST_READ_SUCCESS), new DateTimeType()); synchronized (this) { diff --git a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusPollerThingHandlerImpl.java b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusPollerThingHandlerImpl.java index ace07b5ec0ccf..0da2bc40d893a 100644 --- a/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusPollerThingHandlerImpl.java +++ b/addons/binding/org.openhab.binding.modbus/src/main/java/org/openhab/binding/modbus/internal/handler/ModbusPollerThingHandlerImpl.java @@ -29,8 +29,10 @@ import org.eclipse.smarthome.core.thing.binding.BaseBridgeHandler; import org.eclipse.smarthome.core.thing.binding.ThingHandler; import org.eclipse.smarthome.core.types.Command; +import org.openhab.binding.modbus.handler.EndpointNotInitializedException; +import org.openhab.binding.modbus.handler.ModbusEndpointThingHandler; import org.openhab.binding.modbus.internal.AtomicStampedKeyValue; -import org.openhab.binding.modbus.internal.ModbusBindingConstants; +import org.openhab.binding.modbus.internal.ModbusBindingConstantsInternal; import org.openhab.binding.modbus.internal.config.ModbusPollerConfiguration; import org.openhab.io.transport.modbus.BitArray; import org.openhab.io.transport.modbus.ModbusManager; @@ -222,14 +224,14 @@ public void resetCache() { private static class ModbusPollerReadRequest extends BasicModbusReadRequestBlueprint { private static ModbusReadFunctionCode getFunctionCode(@Nullable String type) { - if (!ModbusBindingConstants.READ_FUNCTION_CODES.containsKey(type)) { - Object[] acceptedTypes = ModbusBindingConstants.READ_FUNCTION_CODES.keySet().toArray(); + if (!ModbusBindingConstantsInternal.READ_FUNCTION_CODES.containsKey(type)) { + Object[] acceptedTypes = ModbusBindingConstantsInternal.READ_FUNCTION_CODES.keySet().toArray(); Arrays.sort(acceptedTypes); throw new IllegalArgumentException( String.format("No function code found for type='%s'. Was expecting one of: %s", type, StringUtils.join(acceptedTypes, ", "))); } - ModbusReadFunctionCode functionCode = ModbusBindingConstants.READ_FUNCTION_CODES.get(type); + ModbusReadFunctionCode functionCode = ModbusBindingConstantsInternal.READ_FUNCTION_CODES.get(type); return functionCode; }