This is an automated email from the ASF dual-hosted git repository. sruehl pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit 20090bb78993256448cb79c2b17580c65c859eb7 Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Wed Jun 13 10:06:22 2018 +0200 fixed device name handling --- .../plc4x/java/ads/api/commands/types/Device.java | 27 +++++++++++++--- .../java/ads/api/commands/types/DeviceTest.java | 37 ++++++++++++++++++++++ 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/Device.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/Device.java index e7f31af..414b997 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/Device.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/Device.java @@ -19,10 +19,13 @@ package org.apache.plc4x.java.ads.api.commands.types; import io.netty.buffer.ByteBuf; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.plc4x.java.ads.api.util.ByteValue; +import org.apache.plc4x.java.api.exceptions.PlcProtocolPayloadTooBigException; +import org.apache.plc4x.java.api.exceptions.PlcRuntimeException; import java.nio.charset.Charset; +import java.util.Arrays; import static java.util.Objects.requireNonNull; @@ -46,13 +49,17 @@ public class Device extends ByteValue { } public static Device of(String value) { - requireNonNull(value); - return new Device(StringUtils.leftPad(value, NUM_BYTES).getBytes()); + return of(value, Charset.defaultCharset()); } public static Device of(String value, Charset charset) { requireNonNull(value); - return new Device(StringUtils.leftPad(value, NUM_BYTES).getBytes(charset)); + requireNonNull(charset); + byte[] bytes = value.getBytes(charset); + if (bytes.length > NUM_BYTES) { + throw new PlcRuntimeException(new PlcProtocolPayloadTooBigException("ADS/AMS", NUM_BYTES, bytes.length, value)); + } + return new Device(Arrays.copyOf(bytes, NUM_BYTES)); } @Override @@ -60,9 +67,19 @@ public class Device extends ByteValue { return NUM_BYTES; } + public String getAsString() { + return getAsString(Charset.defaultCharset()); + } + + public String getAsString(Charset charset) { + int nullTermination = ArrayUtils.indexOf(value, (byte) 0); + byte[] reducedValue = Arrays.copyOfRange(value, 0, nullTermination); + return new String(reducedValue, charset); + } + @Override public String toString() { // TODO: this might break some outputs like surefire if this id can contain non printable characters - return "Device{" + new String(value) + "} " + super.toString(); + return "Device{" + getAsString() + "} " + super.toString(); } } diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/DeviceTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/DeviceTest.java new file mode 100644 index 0000000..4c4de45 --- /dev/null +++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/DeviceTest.java @@ -0,0 +1,37 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ +package org.apache.plc4x.java.ads.api.commands.types; + +import org.apache.plc4x.java.api.exceptions.PlcRuntimeException; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class DeviceTest { + + @Test + public void stringEquals() { + assertEquals("HelloWorld!", Device.of("HelloWorld!").getAsString()); + } + + @Test(expected = PlcRuntimeException.class) + public void overflow() { + Device.of("asdasdasdsadssdasdasddsaasdasddsasadsadsadsdasadsadsdsadasd"); + } +} \ No newline at end of file -- To stop receiving notification emails like this one, please contact sru...@apache.org.