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.

Reply via email to