You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/06/13 08:06:36 UTC
[incubator-plc4x] 04/04: fixed device name handling
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 <sr...@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
sruehl@apache.org.