]> git.basschouten.com Git - openhab-addons.git/commitdiff
[Homematic] Removed Apache Commons (#10035)
authorMartin Herbst <develop@mherbst.de>
Mon, 8 Feb 2021 22:26:56 +0000 (23:26 +0100)
committerGitHub <noreply@github.com>
Mon, 8 Feb 2021 22:26:56 +0000 (23:26 +0100)
Signed-off-by: Martin Herbst <develop@mherbst.de>
36 files changed:
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/common/HomematicConfig.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/AbstractHomematicGateway.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/CcuGateway.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/client/RpcClient.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/message/BinRpcMessage.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/message/XmlRpcRequest.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/CcuParamsetDescriptionParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/CcuVariablesAndScriptsParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/CommonRpcParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/DeleteDevicesParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/DisplayOptionsParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/EventParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/GetAllScriptsParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/ListBidcosInterfacesParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/ListDevicesParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/NewDevicesParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/parser/RpcResponseParser.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/server/RpcResponseHandler.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/virtual/ButtonVirtualDatapointHandler.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/virtual/DeleteDeviceModeVirtualDatapointHandler.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/virtual/DisplayOptionsVirtualDatapointHandler.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/communicator/virtual/DisplayTextVirtualDatapoint.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/discovery/eq3udp/Eq3UdpResponse.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/handler/HomematicThingHandler.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/misc/MiscUtils.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/model/HmChannel.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/model/HmDatapoint.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/model/HmDatapointConfig.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/model/HmDatapointInfo.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/model/HmDevice.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/model/HmGatewayInfo.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/model/HmRssiInfo.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/type/HomematicTypeGeneratorImpl.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/type/MetadataUtils.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/type/UidUtils.java
bundles/org.openhab.binding.homematic/src/main/java/org/openhab/binding/homematic/internal/type/generator/CcuMetadataExtractor.java

index d90cc66addb266444be1123d838ecf8a3964d95c..f8ca3f7bc06c8383ca90b0bd1e409dc5a644eac2 100644 (file)
@@ -12,8 +12,6 @@
  */
 package org.openhab.binding.homematic.internal.common;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmGatewayInfo;
 import org.openhab.binding.homematic.internal.model.HmInterface;
@@ -405,14 +403,12 @@ public class HomematicConfig {
 
     @Override
     public String toString() {
-        ToStringBuilder tsb = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
-        tsb.append("gatewayAddress", gatewayAddress).append("callbackHost", callbackHost)
-                .append("bindAddress", bindAddress).append("xmlCallbackPort", xmlCallbackPort)
-                .append("binCallbackPort", binCallbackPort).append("gatewayType", gatewayType)
-                .append("rfPort", getRfPort()).append("wiredPort", getWiredPort()).append("hmIpPort", getHmIpPort())
-                .append("cuxdPort", getCuxdPort()).append("groupPort", getGroupPort()).append("timeout", timeout)
-                .append("discoveryTimeToLive", discoveryTimeToLive).append("installModeDuration", installModeDuration)
-                .append("socketMaxAlive", socketMaxAlive);
-        return tsb.toString();
+        return String.format(
+                "%s[gatewayAddress=%s,callbackHost=%s,bindAddress=%s,xmlCallbackPort=%d,binCallbackPort=%d,"
+                        + "gatewayType=%s,rfPort=%d,wiredPort=%d,hmIpPort=%d,cuxdPort=%d,groupPort=%d,timeout=%d,"
+                        + "discoveryTimeToLive=%d,installModeDuration=%d,socketMaxAlive=%d]",
+                getClass().getSimpleName(), gatewayAddress, callbackHost, bindAddress, xmlCallbackPort, binCallbackPort,
+                gatewayType, getRfPort(), getWiredPort(), getHmIpPort(), getCuxdPort(), getGroupPort(), timeout,
+                discoveryTimeToLive, installModeDuration, socketMaxAlive);
     }
 }
index cf4d59f5b09b7f69f8c999fe1f0e22a356feef49..d834ec1f89f76222508bd2da58d4acffab54d238 100644 (file)
@@ -29,7 +29,6 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.lang.StringUtils;
 import org.eclipse.jetty.client.HttpClient;
 import org.openhab.binding.homematic.internal.common.HomematicConfig;
 import org.openhab.binding.homematic.internal.communicator.client.BinRpcClient;
@@ -800,7 +799,7 @@ public abstract class AbstractHomematicGateway implements RpcEventListener, Home
      * Creates a virtual device for handling variables, scripts and other special gateway functions.
      */
     private HmDevice createGatewayDevice() {
-        String type = String.format("%s-%s", HmDevice.TYPE_GATEWAY_EXTRAS, StringUtils.upperCase(id));
+        String type = String.format("%s-%s", HmDevice.TYPE_GATEWAY_EXTRAS, id.toUpperCase());
         HmDevice device = new HmDevice(HmDevice.ADDRESS_GATEWAY_EXTRAS, getDefaultInterface(), type,
                 config.getGatewayInfo().getId(), null, null);
         device.setName(HmDevice.TYPE_GATEWAY_EXTRAS);
index 7e3835611cab805bd95d34b865a4f7e266dc10d9..5810194cd420ee45725d024eb70f70d47b29bcfe 100644 (file)
@@ -18,10 +18,9 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
 import org.eclipse.jetty.client.HttpClient;
 import org.eclipse.jetty.client.api.ContentResponse;
 import org.eclipse.jetty.client.util.StringContentProvider;
@@ -123,7 +122,7 @@ public class CcuGateway extends AbstractHomematicGateway {
                 HmDevice device = channel.getDevice();
                 String channelName = String.format("%s.%s:%s.", device.getHmInterface().getName(), device.getAddress(),
                         channel.getNumber());
-                String datapointNames = StringUtils.join(dpNames.toArray(), "\\t");
+                String datapointNames = String.join("\\t", dpNames);
                 TclScriptDataList resultList = sendScriptByName("getAllChannelValues", TclScriptDataList.class,
                         new String[] { "channel_name", "datapoint_names" },
                         new String[] { channelName, datapointNames });
@@ -151,7 +150,7 @@ public class CcuGateway extends AbstractHomematicGateway {
 
     @Override
     protected void setVariable(HmDatapoint dp, Object value) throws IOException {
-        String strValue = StringUtils.replace(ObjectUtils.toString(value), "\"", "\\\"");
+        String strValue = Objects.toString(value, "").replace("\"", "\\\"");
         if (dp.isStringType()) {
             strValue = "\"" + strValue + "\"";
         }
@@ -184,8 +183,10 @@ public class CcuGateway extends AbstractHomematicGateway {
     private <T> T sendScriptByName(String scriptName, Class<T> clazz, String[] variableNames, String[] values)
             throws IOException {
         String script = tclregaScripts.get(scriptName);
-        for (int i = 0; i < variableNames.length; i++) {
-            script = StringUtils.replace(script, "{" + variableNames[i] + "}", values[i]);
+        if (script != null) {
+            for (int i = 0; i < variableNames.length; i++) {
+                script = script.replace("{" + variableNames[i] + "}", values[i]);
+            }
         }
         return sendScript(script, clazz);
     }
@@ -196,8 +197,8 @@ public class CcuGateway extends AbstractHomematicGateway {
     @SuppressWarnings("unchecked")
     private synchronized <T> T sendScript(String script, Class<T> clazz) throws IOException {
         try {
-            script = StringUtils.trim(script);
-            if (StringUtils.isEmpty(script)) {
+            script = script == null ? null : script.trim();
+            if (script == null || script.isEmpty()) {
                 throw new RuntimeException("Homematic TclRegaScript is empty!");
             }
             if (logger.isTraceEnabled()) {
@@ -210,7 +211,10 @@ public class CcuGateway extends AbstractHomematicGateway {
                     .header(HttpHeader.CONTENT_TYPE, "text/plain;charset=" + config.getEncoding()).send();
 
             String result = new String(response.getContent(), config.getEncoding());
-            result = StringUtils.substringBeforeLast(result, "<xml><exec>");
+            int lastPos = result.lastIndexOf("<xml><exec>");
+            if (lastPos != -1) {
+                result = result.substring(0, lastPos);
+            }
             if (logger.isTraceEnabled()) {
                 logger.trace("Result TclRegaScript: {}", result);
             }
@@ -231,7 +235,8 @@ public class CcuGateway extends AbstractHomematicGateway {
             Map<String, String> result = new HashMap<>();
             if (scriptList.getScripts() != null) {
                 for (TclScript script : scriptList.getScripts()) {
-                    result.put(script.name, StringUtils.trimToNull(script.data));
+                    String value = script.data.trim();
+                    result.put(script.name, value.isEmpty() ? null : value);
                 }
             }
             return result;
index 244c1891c47073362d634c703842f399ae3b6ec2..4f2fab2c823c902fe493a3ed9dc0a11e2f538ccb 100644 (file)
@@ -20,7 +20,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.HomematicBindingConstants;
 import org.openhab.binding.homematic.internal.common.HomematicConfig;
 import org.openhab.binding.homematic.internal.communicator.message.RpcRequest;
@@ -34,6 +33,7 @@ import org.openhab.binding.homematic.internal.communicator.parser.HomegearLoadDe
 import org.openhab.binding.homematic.internal.communicator.parser.ListBidcosInterfacesParser;
 import org.openhab.binding.homematic.internal.communicator.parser.ListDevicesParser;
 import org.openhab.binding.homematic.internal.communicator.parser.RssiInfoParser;
+import org.openhab.binding.homematic.internal.misc.MiscUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmDevice;
@@ -233,7 +233,7 @@ public abstract class RpcClient<T> {
 
         try {
             ddParser = getDeviceDescription(HmInterface.RF);
-            isHomegear = StringUtils.equalsIgnoreCase(ddParser.getType(), "Homegear");
+            isHomegear = "Homegear".equalsIgnoreCase(ddParser.getType());
         } catch (IOException ex) {
             // can't load gateway infos via RF interface
             ddParser = new GetDeviceDescriptionParser();
@@ -247,21 +247,23 @@ public abstract class RpcClient<T> {
 
         HmGatewayInfo gatewayInfo = new HmGatewayInfo();
         gatewayInfo.setAddress(biParser.getGatewayAddress());
+        String gwType = biParser.getType();
         if (isHomegear) {
             gatewayInfo.setId(HmGatewayInfo.ID_HOMEGEAR);
             gatewayInfo.setType(ddParser.getType());
             gatewayInfo.setFirmware(ddParser.getFirmware());
-        } else if ((StringUtils.startsWithIgnoreCase(biParser.getType(), "CCU")
-                || StringUtils.startsWithIgnoreCase(biParser.getType(), "HMIP_CCU")
-                || StringUtils.startsWithIgnoreCase(ddParser.getType(), "HM-RCV-50") || config.isCCUType())
+        } else if ((MiscUtils.strStartsWithIgnoreCase(gwType, "CCU")
+                || MiscUtils.strStartsWithIgnoreCase(gwType, "HMIP_CCU")
+                || MiscUtils.strStartsWithIgnoreCase(ddParser.getType(), "HM-RCV-50") || config.isCCUType())
                 && !config.isNoCCUType()) {
             gatewayInfo.setId(HmGatewayInfo.ID_CCU);
-            String type = StringUtils.isBlank(biParser.getType()) ? "CCU" : biParser.getType();
+            String type = gwType.isBlank() ? "CCU" : gwType;
             gatewayInfo.setType(type);
-            gatewayInfo.setFirmware(ddParser.getFirmware() != null ? ddParser.getFirmware() : biParser.getFirmware());
+            gatewayInfo
+                    .setFirmware(!ddParser.getFirmware().isEmpty() ? ddParser.getFirmware() : biParser.getFirmware());
         } else {
             gatewayInfo.setId(HmGatewayInfo.ID_DEFAULT);
-            gatewayInfo.setType(biParser.getType());
+            gatewayInfo.setType(gwType);
             gatewayInfo.setFirmware(biParser.getFirmware());
         }
 
index 8f7b3b36849e8c62ac5234cef67922f562c17202..a94f38d2d4490574ee26d59dfcb68f5ec512e728 100644 (file)
@@ -29,7 +29,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.apache.commons.lang.ArrayUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,7 +83,7 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
         if (length != 4) {
             throw new EOFException("Only " + length + " bytes received reading message length");
         }
-        int datasize = (new BigInteger(ArrayUtils.subarray(sig, 4, 8))).intValue();
+        int datasize = (new BigInteger(Arrays.copyOfRange(sig, 4, 8))).intValue();
         byte payload[] = new byte[datasize];
         int offset = 0;
         int currentLength;
@@ -96,7 +95,10 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
             throw new EOFException("Only " + offset + " bytes received while reading message payload, expected "
                     + datasize + " bytes");
         }
-        byte[] message = ArrayUtils.addAll(sig, payload);
+        byte[] message = new byte[sig.length + payload.length];
+        System.arraycopy(sig, 0, message, 0, sig.length);
+        System.arraycopy(payload, 0, message, sig.length, payload.length);
+
         decodeMessage(message, methodHeader);
     }
 
index 43ea90b47c727c277f5a05cdc4383c4a442066cb..874ed7d5607015e31b065dfcd09e85f541579406 100644 (file)
@@ -23,8 +23,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.commons.lang.StringEscapeUtils;
-
 /**
  * A XML-RPC request for sending data to the Homematic server.
  *
@@ -124,7 +122,7 @@ public class XmlRpcRequest implements RpcRequest<String> {
         } else {
             Class<?> clazz = value.getClass();
             if (clazz == String.class || clazz == Character.class) {
-                sb.append(StringEscapeUtils.escapeXml(value.toString()));
+                sb.append(escapeXml(value.toString()));
             } else if (clazz == Long.class || clazz == Integer.class || clazz == Short.class || clazz == Byte.class) {
                 tag("int", value.toString());
             } else if (clazz == Double.class) {
@@ -176,4 +174,30 @@ public class XmlRpcRequest implements RpcRequest<String> {
             }
         }
     }
+
+    private StringBuilder escapeXml(String inValue) {
+        StringBuilder outValue = new StringBuilder(inValue.length());
+        for (int i = 0; i < inValue.length(); i++) {
+            switch (inValue.charAt(i)) {
+                case '<':
+                    outValue.append("&lt;");
+                    break;
+                case '>':
+                    outValue.append("&gt;");
+                    break;
+                case '&':
+                    outValue.append("&amp;");
+                    break;
+                case '\'':
+                    outValue.append("&apost;");
+                    break;
+                case '"':
+                    outValue.append("&quot;");
+                    break;
+                default:
+                    outValue.append(inValue.charAt(i));
+            }
+        }
+        return outValue;
+    }
 }
index ec35af77bdb2197da11da4ded3fa341172eb005e..84badc29fefe51e232e50389ec557b51c2b7ed24 100644 (file)
@@ -14,7 +14,6 @@ package org.openhab.binding.homematic.internal.communicator.parser;
 
 import java.io.IOException;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmInterface;
@@ -52,7 +51,7 @@ public class CcuParamsetDescriptionParser extends CommonRpcParser<TclScriptDataL
     }
 
     private String[] toOptionList(String options) {
-        String[] result = StringUtils.splitByWholeSeparatorPreserveAllTokens(options, ";");
+        String[] result = options == null ? null : options.split(";");
         return result == null || result.length == 0 ? null : result;
     }
 }
index 4795120a3422cd21d8c88a8ef7f0347314b7f8a8..17ff956ede68f6afa9a15aa645c694594f0a63a6 100644 (file)
@@ -14,7 +14,6 @@ package org.openhab.binding.homematic.internal.communicator.parser;
 
 import java.io.IOException;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmParamsetType;
@@ -57,8 +56,7 @@ public class CcuVariablesAndScriptsParser extends CommonRpcParser<TclScriptDataL
                     }
                     dp.setReadOnly(entry.readOnly);
                     dp.setUnit(entry.unit);
-
-                    String[] result = StringUtils.splitByWholeSeparatorPreserveAllTokens(entry.options, ";");
+                    String[] result = entry.options == null ? null : entry.options.split(";");
                     dp.setOptions(result == null || result.length == 0 ? null : result);
 
                     if (dp.getOptions() != null) {
index aa87ae4e2cf0fd63731905d21d3da75bcb02eea3..2196ea2ce216fa70c6afecb570bc1d9daa46cd47 100644 (file)
 package org.openhab.binding.homematic.internal.communicator.parser;
 
 import java.io.IOException;
+import java.util.Objects;
 
-import org.apache.commons.lang.BooleanUtils;
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.NumberUtils;
+import org.eclipse.jdt.annotation.NonNull;
 import org.openhab.binding.homematic.internal.misc.MiscUtils;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmParamsetType;
@@ -38,7 +36,8 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
      * Converts the object to a string.
      */
     protected String toString(Object object) {
-        return StringUtils.trimToNull(ObjectUtils.toString(object));
+        String value = Objects.toString(object, "").trim();
+        return value.isEmpty() ? null : value;
     }
 
     /**
@@ -49,7 +48,7 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
             return (Integer) object;
         }
         try {
-            return Double.valueOf(ObjectUtils.toString(object)).intValue();
+            return Double.valueOf(object.toString()).intValue();
         } catch (NumberFormatException ex) {
             logger.debug("Failed converting {} to a Double", object, ex);
             return null;
@@ -64,7 +63,7 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
             return (Double) object;
         }
         try {
-            return Double.valueOf(ObjectUtils.toString(object));
+            return Double.valueOf(object.toString());
         } catch (NumberFormatException ex) {
             logger.debug("Failed converting {} to a Double", object, ex);
             return null;
@@ -79,7 +78,12 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
             return (Number) object;
         }
         try {
-            return NumberUtils.createNumber(ObjectUtils.toString(object));
+            String value = object.toString();
+            if (value.contains(".")) {
+                return Float.parseFloat(value);
+            } else {
+                return Integer.parseInt(value);
+            }
         } catch (NumberFormatException ex) {
             logger.debug("Failed converting {} to a Number", object, ex);
             return null;
@@ -93,7 +97,7 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
         if (object == null || object instanceof Boolean) {
             return (Boolean) object;
         }
-        return BooleanUtils.toBoolean(ObjectUtils.toString(object));
+        return "true".equals(object.toString().toLowerCase());
     }
 
     /**
@@ -114,9 +118,10 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
     /**
      * Returns the address of a device, replacing group address identifier and illegal characters.
      */
+    @NonNull
     protected String getSanitizedAddress(Object object) {
-        String address = StringUtils.trimToNull(StringUtils.replaceOnce(toString(object), "*", "T-"));
-        return MiscUtils.validateCharacters(address, "Address", "_");
+        String address = Objects.toString(object, "").trim().replaceFirst("\\*", "T-");
+        return MiscUtils.validateCharacters(address.isEmpty() ? null : address, "Address", "_");
     }
 
     /**
@@ -167,8 +172,11 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
         HmDatapoint dp = new HmDatapoint();
         dp.setName(name);
         dp.setDescription(name);
-        dp.setUnit(StringUtils.replace(StringUtils.trimToNull(unit), "\ufffd", "°"));
-        if (dp.getUnit() == null && StringUtils.startsWith(dp.getName(), "RSSI_")) {
+        if (unit != null) {
+            unit = unit.trim().replace("\ufffd", "°");
+        }
+        dp.setUnit(unit == null || unit.isEmpty() ? null : unit);
+        if (dp.getUnit() == null && dp.getName() != null && dp.getName().startsWith("RSSI_")) {
             dp.setUnit("dBm");
         }
 
@@ -210,7 +218,7 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
      * Converts a string value to the type.
      */
     protected Object convertToType(String value) {
-        if (StringUtils.isBlank(value)) {
+        if (value == null || value.isBlank()) {
             return null;
         }
         if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("on")) {
index d038b78f65797c3a76b59a32699a53d69c3a3f4d..5a7701b2e09ae14416e2ce96e6a035580cf77fc3 100644 (file)
@@ -16,7 +16,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.lang.StringUtils;
+import org.openhab.binding.homematic.internal.misc.MiscUtils;
 
 /**
  * Parses a delete device event received from a Homematic gateway.
@@ -31,12 +31,9 @@ public class DeleteDevicesParser extends CommonRpcParser<Object[], List<String>>
             Object[] data = (Object[]) message[1];
             for (int i = 0; i < message.length; i++) {
                 String address = getSanitizedAddress(data[i]);
-                boolean isDevice = !StringUtils.contains(address, ":")
-                        && !StringUtils.startsWithIgnoreCase(address, "BidCos");
-                if (isDevice) {
+                if (MiscUtils.isDevice(address)) {
                     adresses.add(address);
                 }
-
             }
         }
         return adresses;
index 9ad2bbb92db3788d1a9fe915134ac9de2383c015..6ee848e4db7f659b8761f35b786bebc6fac9c01b 100644 (file)
@@ -16,10 +16,9 @@ import static org.openhab.binding.homematic.internal.misc.HomematicConstants.*;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmDatapointInfo;
@@ -36,7 +35,7 @@ import org.slf4j.LoggerFactory;
 public class DisplayOptionsParser extends CommonRpcParser<Object, Void> {
     private final Logger logger = LoggerFactory.getLogger(DisplayOptionsParser.class);
     private static final String[] onOff = new String[] { "ON", "OFF" };
-
+    private static final int IDX_NOT_FOUND = -1;
     private HmChannel channel;
     private String text;
     private int beep = 0;
@@ -50,7 +49,8 @@ public class DisplayOptionsParser extends CommonRpcParser<Object, Void> {
 
     @Override
     public Void parse(Object value) throws IOException {
-        String optionsString = StringUtils.remove(toString(value), ' ');
+        String valueString = toString(value);
+        String optionsString = valueString == null ? null : valueString.replace(" ", "");
         if (optionsString != null) {
             int idxFirstSep = optionsString.indexOf(",");
             if (idxFirstSep == -1) {
@@ -61,7 +61,7 @@ public class DisplayOptionsParser extends CommonRpcParser<Object, Void> {
                 optionsString = optionsString.substring(idxFirstSep + 1);
             }
 
-            String[] options = StringUtils.split(optionsString, ",");
+            String[] options = optionsString.split(",");
 
             String[] availableSymbols = getAvailableSymbols(channel);
             String[] availableBeepOptions = getAvailableOptions(channel, DATAPOINT_NAME_BEEP);
@@ -87,7 +87,7 @@ public class DisplayOptionsParser extends CommonRpcParser<Object, Void> {
                             DATAPOINT_NAME_BACKLIGHT, deviceAddress);
                     unit = getIntParameter(availableUnitOptions, unit, parameter, DATAPOINT_NAME_UNIT, deviceAddress);
 
-                    if (ArrayUtils.contains(availableSymbols, parameter)) {
+                    if (findInArray(availableSymbols, parameter) != IDX_NOT_FOUND) {
                         logger.debug("Symbol '{}' found for remote control '{}'", parameter, deviceAddress);
                         symbols.add(parameter);
                     }
@@ -102,8 +102,8 @@ public class DisplayOptionsParser extends CommonRpcParser<Object, Void> {
      */
     private int getIntParameter(String[] options, int currentValue, String parameter, String parameterName,
             String deviceAddress) {
-        int idx = ArrayUtils.indexOf(options, parameter);
-        if (idx != -1) {
+        int idx = findInArray(options, parameter);
+        if (idx != IDX_NOT_FOUND) {
             if (currentValue == 0) {
                 logger.debug("{} option '{}' found at index {} for remote control '{}'", parameterName, parameter,
                         idx + 1, deviceAddress);
@@ -125,10 +125,12 @@ public class DisplayOptionsParser extends CommonRpcParser<Object, Void> {
         HmDatapointInfo dpInfo = HmDatapointInfo.createValuesInfo(channel, datapointName);
         HmDatapoint dp = channel.getDatapoint(dpInfo);
         if (dp != null) {
-            String[] options = (String[]) ArrayUtils.remove(dp.getOptions(), 0);
+            String[] dpOpts = dp.getOptions();
+            String[] options = new String[dpOpts.length - 1];
+            options = Arrays.copyOfRange(dpOpts, 1, dpOpts.length);
             for (String onOffString : onOff) {
-                int onIdx = ArrayUtils.indexOf(options, onOffString);
-                if (onIdx != -1) {
+                int onIdx = findInArray(options, onOffString);
+                if (onIdx != IDX_NOT_FOUND) {
                     options[onIdx] = datapointName + "_" + onOffString;
                 }
             }
@@ -137,6 +139,18 @@ public class DisplayOptionsParser extends CommonRpcParser<Object, Void> {
         return new String[0];
     }
 
+    private int findInArray(String[] arr, String searchString) {
+        if (arr.length == 0) {
+            return IDX_NOT_FOUND;
+        }
+        for (int i = 0; i < arr.length; i++) {
+            if (arr[i].equals(searchString)) {
+                return i;
+            }
+        }
+        return IDX_NOT_FOUND;
+    }
+
     /**
      * Returns all possible symbols from the remote control.
      */
index 237bc28373ebdf4b8265d7102c9a6273e837e23b..7cf06ce6863d72554d2cf57bd0ccbe77df261eaf 100644 (file)
@@ -14,8 +14,6 @@ package org.openhab.binding.homematic.internal.communicator.parser;
 
 import java.io.IOException;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.NumberUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapointInfo;
 import org.openhab.binding.homematic.internal.model.HmDevice;
@@ -38,10 +36,11 @@ public class EventParser extends CommonRpcParser<Object[], HmDatapointInfo> {
             address = HmDevice.ADDRESS_GATEWAY_EXTRAS;
             channel = HmChannel.CHANNEL_NUMBER_VARIABLE;
         } else {
-            String[] configParts = StringUtils.trimToEmpty(addressWithChannel).split(":");
+            String addrChannel = addressWithChannel == null ? "" : addressWithChannel.trim();
+            String[] configParts = addrChannel.split(":");
             address = getSanitizedAddress(configParts[0]);
             if (configParts.length > 1) {
-                channel = NumberUtils.createInteger(configParts[1]);
+                channel = configParts[1] == null ? null : Integer.valueOf(configParts[1]);
             }
         }
 
index d33229280b3b8106159a8adf421b0f397578692f..14b11cb18537863e74b98425795c37a09349d919 100644 (file)
@@ -13,8 +13,8 @@
 package org.openhab.binding.homematic.internal.communicator.parser;
 
 import java.io.IOException;
+import java.util.Objects;
 
-import org.apache.commons.lang.ObjectUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmParamsetType;
@@ -36,7 +36,7 @@ public class GetAllScriptsParser extends CommonRpcParser<Object[], Void> {
     public Void parse(Object[] message) throws IOException {
         message = (Object[]) message[0];
         for (int i = 0; i < message.length; i++) {
-            String scriptName = ObjectUtils.toString(message[i]);
+            String scriptName = Objects.toString(message[i], "");
             HmDatapoint dpScript = new HmDatapoint(scriptName, scriptName, HmValueType.BOOL, Boolean.FALSE, false,
                     HmParamsetType.VALUES);
             dpScript.setInfo(scriptName);
index 6c63dd5330166c44b1a8e2dddf291eb36df17891..53446f024cfead869c9962028a11f350872ded24 100644 (file)
@@ -50,7 +50,7 @@ public class ListBidcosInterfacesParser extends CommonRpcParser<Object[], ListBi
      * Returns the parsed type.
      */
     public String getType() {
-        return type;
+        return type == null ? "" : type;
     }
 
     /**
index 41e168f1b0604c2f9161349ffe4e1cf59d8dacb9..fb1ee5cffc35dcd17f2646ff1fbb8b9870d4de22 100644 (file)
@@ -19,7 +19,6 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.common.HomematicConfig;
 import org.openhab.binding.homematic.internal.misc.MiscUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
@@ -48,9 +47,7 @@ public class ListDevicesParser extends CommonRpcParser<Object[], Collection<HmDe
 
         for (int i = 0; i < message.length; i++) {
             Map<String, ?> data = (Map<String, ?>) message[i];
-            boolean isDevice = !StringUtils.contains(toString(data.get("ADDRESS")), ":");
-
-            if (isDevice) {
+            if (MiscUtils.isDevice(toString(data.get("ADDRESS")), true)) {
                 String address = getSanitizedAddress(data.get("ADDRESS"));
                 String type = MiscUtils.validateCharacters(toString(data.get("TYPE")), "Device type", "-");
                 String id = toString(data.get("ID"));
index 92b97056692e92d98d1970de605cafd7ba141f36..8ec4bee27115b9a03f8151acb91585495f8c1873 100644 (file)
@@ -17,7 +17,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
+import org.openhab.binding.homematic.internal.misc.MiscUtils;
 
 /**
  * Parses a new device event received from a Homematic gateway.
@@ -35,9 +35,7 @@ public class NewDevicesParser extends CommonRpcParser<Object[], List<String>> {
                 Map<String, ?> data = (Map<String, ?>) message[i];
 
                 String address = toString(data.get("ADDRESS"));
-                boolean isDevice = !StringUtils.contains(address, ":")
-                        && !StringUtils.startsWithIgnoreCase(address, "BidCos");
-                if (isDevice) {
+                if (MiscUtils.isDevice(address)) {
                     adresses.add(getSanitizedAddress(address));
                 }
             }
index 241b48257d7de28371b49c4c6d2f473a6d15c7df..ca796488e7c4e36a8abc42a6b98e39602ef6e835 100644 (file)
@@ -15,7 +15,6 @@ package org.openhab.binding.homematic.internal.communicator.parser;
 import java.io.IOException;
 import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.communicator.client.UnknownParameterSetException;
 import org.openhab.binding.homematic.internal.communicator.client.UnknownRpcFailureException;
 import org.openhab.binding.homematic.internal.communicator.message.RpcRequest;
@@ -43,9 +42,9 @@ public class RpcResponseParser extends CommonRpcParser<Object[], Object[]> {
                     Number faultCode = toNumber(map.get("faultCode"));
                     String faultString = toString(map.get("faultString"));
                     String faultMessage = String.format("%s %s (sending %s)", faultCode, faultString, request);
-                    if (faultCode.intValue() == -1 && StringUtils.equals("Failure", faultString)) {
+                    if (faultCode.intValue() == -1 && "Failure".equals(faultString)) {
                         throw new UnknownRpcFailureException(faultMessage);
-                    } else if (faultCode.intValue() == -3 && StringUtils.equals("Unknown paramset", faultString)) {
+                    } else if (faultCode.intValue() == -3 && "Unknown paramset".equals(faultString)) {
                         throw new UnknownParameterSetException(faultMessage);
                     }
                     throw new IOException(faultMessage);
index 431f3e8bae1c2a238c4a61613bb3e998ead43e6d..010dc88df370022ed1f08fdde48b9e1f8c13b399 100644 (file)
@@ -18,8 +18,8 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
-import org.apache.commons.lang.ObjectUtils;
 import org.openhab.binding.homematic.internal.communicator.message.RpcRequest;
 import org.openhab.binding.homematic.internal.communicator.parser.DeleteDevicesParser;
 import org.openhab.binding.homematic.internal.communicator.parser.EventParser;
@@ -63,7 +63,7 @@ public abstract class RpcResponseHandler<T> {
             for (Object o : (Object[]) responseData[0]) {
                 Map<?, ?> call = (Map<?, ?>) o;
                 if (call != null) {
-                    String method = ObjectUtils.toString(call.get("methodName"));
+                    String method = Objects.toString(call.get("methodName"), "");
                     Object[] data = (Object[]) call.get("params");
                     handleMethodCall(method, data);
                 }
index 43fce06e2fba5f47c6855bb9294ce96f7b03514d..b4feca685fad37505a2105f9a571a8fda2d1752d 100644 (file)
@@ -14,13 +14,13 @@ package org.openhab.binding.homematic.internal.communicator.virtual;
 
 import static org.openhab.binding.homematic.internal.misc.HomematicConstants.VIRTUAL_DATAPOINT_NAME_BUTTON;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.misc.MiscUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmDevice;
 import org.openhab.binding.homematic.internal.model.HmValueType;
 import org.openhab.core.thing.CommonTriggerEvents;
+import org.openhab.core.thing.DefaultSystemChannelTypeProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,7 +59,8 @@ public class ButtonVirtualDatapointHandler extends AbstractVirtualDatapointHandl
     public void handleEvent(VirtualGateway gateway, HmDatapoint dp) {
         HmDatapoint vdp = getVirtualDatapoint(dp.getChannel());
         if (MiscUtils.isTrueValue(dp.getValue())) {
-            String pressType = StringUtils.substringAfter(dp.getName(), "_");
+            int usPos = dp.getName().indexOf("_");
+            String pressType = usPos == -1 ? dp.getName() : dp.getName().substring(usPos + 1);
             switch (pressType) {
                 case "SHORT":
                     if (dp.getValue() == null || !dp.getValue().equals(dp.getPreviousValue())) {
index dbbaf8bac314c82be92e73bd6dede80b1844dbcf..c79263dd57a8dcf53b8eec933df933d63a8d3b83 100644 (file)
@@ -16,7 +16,6 @@ import static org.openhab.binding.homematic.internal.misc.HomematicConstants.VIR
 
 import java.io.IOException;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.misc.HomematicClientException;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmDatapointConfig;
@@ -61,7 +60,7 @@ public class DeleteDeviceModeVirtualDatapointHandler extends AbstractVirtualData
     public void handleCommand(VirtualGateway gateway, HmDatapoint dp, HmDatapointConfig dpConfig, Object value)
             throws IOException, HomematicClientException {
         dp.setValue(value);
-        if (!StringUtils.equals(dp.getOptionValue(), MODE_LOCKED)) {
+        if (!MODE_LOCKED.equals(dp.getOptionValue())) {
             gateway.disableDatapoint(dp, DELETE_MODE_DURATION);
         }
     }
index ce45dcaa5899489b5d08ee07a9bde638371763f6..eaf1a8b39e5521dc075473ec5990b5e5ebdeffc9 100644 (file)
@@ -16,7 +16,6 @@ import static org.openhab.binding.homematic.internal.misc.HomematicConstants.*;
 
 import java.io.IOException;
 
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.communicator.parser.DisplayOptionsParser;
 import org.openhab.binding.homematic.internal.misc.HomematicClientException;
 import org.openhab.binding.homematic.internal.model.HmChannel;
@@ -60,8 +59,9 @@ public class DisplayOptionsVirtualDatapointHandler extends AbstractVirtualDatapo
         DisplayOptionsParser rcOptionsParser = new DisplayOptionsParser(channel);
         rcOptionsParser.parse(value);
 
-        if (StringUtils.isNotBlank(rcOptionsParser.getText())) {
-            sendDatapoint(gateway, channel, DATAPOINT_NAME_TEXT, rcOptionsParser.getText());
+        String dpNameText = rcOptionsParser.getText();
+        if (dpNameText != null && !dpNameText.isBlank()) {
+            sendDatapoint(gateway, channel, DATAPOINT_NAME_TEXT, dpNameText);
         }
 
         sendDatapoint(gateway, channel, DATAPOINT_NAME_BEEP, rcOptionsParser.getBeep());
index 4c33ae02337ecee8d0eb04a115f71afdc23514d7..8a23ecb4423e3471ff9416e09d719e847e7d3c76 100644 (file)
@@ -21,9 +21,8 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
 import org.openhab.binding.homematic.internal.misc.HomematicClientException;
 import org.openhab.binding.homematic.internal.misc.MiscUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
@@ -328,9 +327,9 @@ public class DisplayTextVirtualDatapoint extends AbstractVirtualDatapointHandler
             }
 
             for (int i = 1; i <= getLineCount(channel.getDevice()); i++) {
-                String line = ObjectUtils.toString(
-                        channel.getDatapoint(HmParamsetType.VALUES, DATAPOINT_NAME_DISPLAY_LINE + i).getValue());
-                if (StringUtils.isEmpty(line)) {
+                String line = Objects.toString(
+                        channel.getDatapoint(HmParamsetType.VALUES, DATAPOINT_NAME_DISPLAY_LINE + i).getValue(), "");
+                if (line.isEmpty()) {
                     line = " ";
                 }
                 message.add(LINE);
@@ -340,12 +339,12 @@ public class DisplayTextVirtualDatapoint extends AbstractVirtualDatapointHandler
                             .getOptionValue();
                     message.add(COLOR);
                     String colorCode = Color.getCode(color);
-                    message.add(StringUtils.isBlank(colorCode) ? Color.WHITE.getCode() : colorCode);
+                    message.add(colorCode == null || colorCode.isBlank() ? Color.WHITE.getCode() : colorCode);
                 }
                 String icon = channel.getDatapoint(HmParamsetType.VALUES, DATAPOINT_NAME_DISPLAY_ICON + i)
                         .getOptionValue();
                 String iconCode = Icon.getCode(icon);
-                if (StringUtils.isNotBlank(iconCode)) {
+                if (iconCode != null && !iconCode.isBlank()) {
                     message.add(ICON);
                     message.add(iconCode);
                 }
@@ -374,7 +373,7 @@ public class DisplayTextVirtualDatapoint extends AbstractVirtualDatapointHandler
             message.add(STOP);
 
             gateway.sendDatapoint(channel.getDatapoint(HmParamsetType.VALUES, DATAPOINT_NAME_SUBMIT),
-                    new HmDatapointConfig(), StringUtils.join(message, ","), null);
+                    new HmDatapointConfig(), String.join(",", message), null);
         }
     }
 
index 5a6dd08934aed6cb42755f1934419d443b1c5b61..6956c049e510391aa327d3e1adbe940389a64f8f 100644 (file)
@@ -12,9 +12,6 @@
  */
 package org.openhab.binding.homematic.internal.discovery.eq3udp;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
 /**
  * Extracts a UDP response from a Homematic CCU gateway.
  *
@@ -86,7 +83,7 @@ public class Eq3UdpResponse {
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("deviceTypeId", deviceTypeId)
-                .append("serialNumber", serialNumber).toString();
+        return String.format("%s[deviceTypeId=%s,serialNumber=%s]", getClass().getSimpleName(), deviceTypeId,
+                serialNumber);
     }
 }
index 0ac53954a681dc5e130ae7588b6f11e0414f06ee..05bcf0048d87588f5007c46651fba8366d949a8c 100644 (file)
@@ -23,11 +23,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.concurrent.Future;
 
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.NumberUtils;
 import org.openhab.binding.homematic.internal.HomematicBindingConstants;
 import org.openhab.binding.homematic.internal.common.HomematicConfig;
 import org.openhab.binding.homematic.internal.communicator.HomematicGateway;
@@ -216,8 +214,8 @@ public class HomematicThingHandler extends BaseThingHandler {
     private static boolean containsChannel(List<Channel> channels, ChannelUID channelUID) {
         for (Channel channel : channels) {
             ChannelUID uid = channel.getUID();
-            if (StringUtils.equals(channelUID.getGroupId(), uid.getGroupId())
-                    && StringUtils.equals(channelUID.getId(), uid.getId())) {
+            if (Objects.equals(channelUID.getGroupId(), uid.getGroupId())
+                    && Objects.equals(channelUID.getId(), uid.getId())) {
                 return true;
             }
         }
@@ -232,7 +230,7 @@ public class HomematicThingHandler extends BaseThingHandler {
         HmDatapoint dp = channelZero
                 .getDatapoint(new HmDatapointInfo(HmParamsetType.VALUES, channelZero, datapointName));
         if (dp != null) {
-            properties.put(propertyName, ObjectUtils.toString(dp.getValue()));
+            properties.put(propertyName, Objects.toString(dp.getValue(), ""));
         }
     }
 
@@ -375,7 +373,7 @@ public class HomematicThingHandler extends BaseThingHandler {
             throws IOException, GatewayNotAvailableException, ConverterException {
         if (dp.isTrigger()) {
             if (dp.getValue() != null) {
-                triggerChannel(channel.getUID(), ObjectUtils.toString(dp.getValue()));
+                triggerChannel(channel.getUID(), dp.getValue() == null ? "" : dp.getValue().toString());
             }
         } else if (isLinked(channel)) {
             loadHomematicChannelValues(dp.getChannel());
@@ -495,9 +493,10 @@ public class HomematicThingHandler extends BaseThingHandler {
                 Object newValue = configurationParameter.getValue();
 
                 if (key.startsWith("HMP_")) {
-                    key = StringUtils.removeStart(key, "HMP_");
-                    Integer channelNumber = NumberUtils.toInt(StringUtils.substringBefore(key, "_"));
-                    String dpName = StringUtils.substringAfter(key, "_");
+                    key = key.substring(4);
+                    int sepPos = key.indexOf("_");
+                    Integer channelNumber = Integer.valueOf(key.substring(0, sepPos));
+                    String dpName = key.substring(sepPos + 1);
 
                     HmDatapointInfo dpInfo = new HmDatapointInfo(device.getAddress(), HmParamsetType.MASTER,
                             channelNumber, dpName);
@@ -514,8 +513,7 @@ public class HomematicThingHandler extends BaseThingHandler {
                                         newValue = decimal.doubleValue();
                                     }
                                 }
-                                if (ObjectUtils.notEqual(dp.isEnumType() ? dp.getOptionValue() : dp.getValue(),
-                                        newValue)) {
+                                if (!Objects.equals(dp.isEnumType() ? dp.getOptionValue() : dp.getValue(), newValue)) {
                                     sendDatapoint(dp, new HmDatapointConfig(), newValue);
                                 }
                             }
index 20f54e5211460af27a03bc8e14063d4a2146a8d8..d41aaad9e5a98ee5ccd321c70426ec348df00f0f 100644 (file)
@@ -50,4 +50,62 @@ public class MiscUtils {
     public static boolean isFalseValue(Object value) {
         return value != null && value == Boolean.FALSE;
     }
+
+    /**
+     * Returns true, if str starts with search. Check is done case-insensitive.
+     */
+    public static boolean strStartsWithIgnoreCase(String str, String search) {
+        if (str == null || search == null || search.length() > str.length()) {
+            return false;
+        }
+        return str.substring(0, search.length()).equalsIgnoreCase(search);
+    }
+
+    /**
+     * Returns true if address is a device
+     */
+    public static boolean isDevice(String address) {
+        return isDevice(address, false);
+    }
+
+    /**
+     * Returns true if address is a device. If allowBidCos ist true then addresses starting with "BidCos" classified as
+     * devices, too.
+     */
+    public static boolean isDevice(String address, boolean allowBidCos) {
+        if (address == null) {
+            return false;
+        }
+        if (address.contains(":")) {
+            return false;
+        }
+        if (allowBidCos && strStartsWithIgnoreCase(address.trim(), "BidCos")) {
+            return true;
+        }
+        return !strStartsWithIgnoreCase(address.trim(), "BidCos");
+    }
+
+    /**
+     * Changes all characters after whitespace to upper-case and all other character to lower case.
+     */
+    public static String capitalize(String value) {
+        if (value == null) {
+            return null;
+        }
+        char[] chars = value.toCharArray();
+        boolean capitalizeNextChar = true;
+        for (int i = 0; i < chars.length; i++) {
+            if (Character.isWhitespace(chars[i])) {
+                capitalizeNextChar = true;
+            } else {
+                if (capitalizeNextChar) {
+                    chars[i] = Character.toTitleCase(chars[i]);
+                    capitalizeNextChar = false;
+                } else {
+                    chars[i] = Character.toLowerCase(chars[i]);
+                }
+            }
+        }
+        return new String(chars);
+    }
 }
index 4214d73b558a11cba3a066b9e222a24378eb07b5..75eece216b28a09855fe089b394eadc0e1fb42fe 100644 (file)
@@ -18,8 +18,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
 import org.openhab.binding.homematic.internal.misc.HomematicConstants;
 
 /**
@@ -216,7 +214,6 @@ public class HmChannel {
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("number", number).append("type", type)
-                .append("initialized", initialized).toString();
+        return String.format("%s[number=%d,initialized=%b]", getClass().getSimpleName(), number, initialized);
     }
 }
index d54d2f7fd43ce35a46b323228060efbf97dd649f..7203179bf2765356ede0aaa9c2ce53a2e4244007 100644 (file)
@@ -12,9 +12,6 @@
  */
 package org.openhab.binding.homematic.internal.model;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
 import org.openhab.binding.homematic.internal.misc.MiscUtils;
 
 /**
@@ -431,11 +428,10 @@ public class HmDatapoint implements Cloneable {
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("name", name).append("value", value)
-                .append("defaultValue", defaultValue).append("type", type).append("minValue", minValue)
-                .append("maxValue", maxValue).append("step", step).append("options", StringUtils.join(options, ";"))
-                .append("readOnly", readOnly).append("readable", readable).append("unit", unit)
-                .append("description", description).append("info", info).append("paramsetType", paramsetType)
-                .append("virtual", virtual).append("trigger", trigger).toString();
+        return String.format("%s[name=%s,value=%s,defaultValue=%s,type=%s,minValue=%s,maxValue=%s,step=%s,options=%s,"
+                + "readOnly=%b,readable=%b,unit=%s,description=%s,info=%s,paramsetType=%s,virtual=%b,trigger=%b]",
+                getClass().getSimpleName(), name, value, defaultValue, type, minValue, maxValue, step,
+                (options == null ? null : String.join(";", options)), readOnly, readable, unit, description, info,
+                paramsetType, virtual, trigger);
     }
 }
index 75c9a23a0225d8dcdffa37b9b27445168fbd078f..11f1a0eb021ed230f84625265dd6090ca00a9a99 100644 (file)
@@ -12,9 +12,6 @@
  */
 package org.openhab.binding.homematic.internal.model;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
 /**
  * Configuration object for sending a datapoint.
  *
@@ -54,7 +51,6 @@ public class HmDatapointConfig {
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("delay", delay)
-                .append("receiveDelay", receiveDelay).toString();
+        return String.format("%s[delay=%f,receiveDelay=%f]", getClass().getSimpleName(), delay, receiveDelay);
     }
 }
index 67ac4a7bdc9039fe344e0277a5be3d298b700952..e0374d16243d069ff9fca6607ad7746b97eb684b 100644 (file)
@@ -12,8 +12,7 @@
  */
 package org.openhab.binding.homematic.internal.model;
 
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
+import java.util.Objects;
 
 /**
  * Simple representation of a datapoint.
@@ -92,7 +91,7 @@ public class HmDatapointInfo {
 
     @Override
     public int hashCode() {
-        return new HashCodeBuilder().append(address).append(paramsetType).append(channel).append(name).toHashCode();
+        return Objects.hash(address, paramsetType, channel, name);
     }
 
     @Override
@@ -101,8 +100,8 @@ public class HmDatapointInfo {
             return false;
         }
         HmDatapointInfo comp = (HmDatapointInfo) obj;
-        return new EqualsBuilder().append(address, comp.getAddress()).append(paramsetType, comp.getParamsetType())
-                .append(channel, comp.getChannel()).append(name, comp.getName()).isEquals();
+        return Objects.equals(address, comp.getAddress()) && Objects.equals(paramsetType, comp.getParamsetType())
+                && Objects.equals(channel, comp.getChannel()) && Objects.equals(name, comp.getName());
     }
 
     @Override
index 8f265ced3c2f4c7939c855c8fcac352d98d12cae..abd814f5beb6bb7a56f558882091b31ec2a7a72d 100644 (file)
@@ -16,11 +16,8 @@ import static org.openhab.binding.homematic.internal.misc.HomematicConstants.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
 import org.openhab.binding.homematic.internal.misc.MiscUtils;
 
 /**
@@ -202,7 +199,7 @@ public class HmDevice {
 
     @Override
     public int hashCode() {
-        return new HashCodeBuilder().append(address).toHashCode();
+        return Objects.hash(address);
     }
 
     @Override
@@ -211,13 +208,12 @@ public class HmDevice {
             return false;
         }
         HmDevice comp = (HmDevice) obj;
-        return new EqualsBuilder().append(address, comp.getAddress()).isEquals();
+        return Objects.equals(address, comp.getAddress());
     }
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("hmInterface", hmInterface)
-                .append("address", address).append("type", type).append("name", name).append("firmware", firmware)
-                .append("gatewayId", gatewayId).toString();
+        return String.format("%s[hmInterface=%s,address=%s,type=%s,name=%s,firmware=%s,gatewayId=%s]",
+                getClass().getSimpleName(), hmInterface, address, type, name, firmware, gatewayId);
     }
 }
index 1bfbfb5b9c3b0f37e23a2d588a8d6ff9c1af1158..fc77be6b29d7375f4bc85ef3c0504a5b7fa5aec5 100644 (file)
@@ -12,9 +12,6 @@
  */
 package org.openhab.binding.homematic.internal.model;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
 /**
  * Info object which holds gateway specific informations.
  *
@@ -184,9 +181,8 @@ public class HmGatewayInfo {
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("id", id).append("type", type)
-                .append("firmware", firmware).append("address", address).append("rf", rfInterface)
-                .append("wired", wiredInterface).append("hmip", hmipInterface).append("cuxd", cuxdInterface)
-                .append("group", groupInterface).toString();
+        return String.format("%s[id=%s,type=%s,firmware=%s,address=%s,rf=%b,wired=%b,hmip=%b,cuxd=%b,group=%b]",
+                getClass().getSimpleName(), id, type, firmware, address, rfInterface, wiredInterface, hmipInterface,
+                cuxdInterface, groupInterface);
     }
 }
index ebae8c1c5e13feadf95f71d1ec73d9906f2eac8d..2978f4b921f7788e27551f0b380abd35dfdc3d15 100644 (file)
@@ -12,9 +12,6 @@
  */
 package org.openhab.binding.homematic.internal.model;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
 /**
  * Object that holds the rssi infos for a RF device.
  *
@@ -65,7 +62,6 @@ public class HmRssiInfo {
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("address", address)
-                .append("device", device).append("peer", peer).toString();
+        return String.format("%s[address=%s,device=%d,peer=%i]", getClass().getSimpleName(), address, device, peer);
     }
 }
index ce10bca8e611348d7f03bbfd9c087d473c0e57af..a3ea8000e88e7c99c58e1deb58687597998ecb88 100644 (file)
@@ -23,11 +23,10 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
+import org.openhab.binding.homematic.internal.misc.MiscUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmDevice;
@@ -171,7 +170,7 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
                     ChannelGroupType groupType = channelGroupTypeProvider.getInternalChannelGroupType(groupTypeUID);
                     if (groupType == null || device.isGatewayExtras()) {
                         String groupLabel = String.format("%s",
-                                WordUtils.capitalizeFully(StringUtils.replace(channel.getType(), "_", " ")));
+                                MiscUtils.capitalize(channel.getType().replace("_", " ")));
                         groupType = ChannelGroupTypeBuilder.instance(groupTypeUID, groupLabel)
                                 .withChannelDefinitions(channelDefinitions).build();
                         channelGroupTypeProvider.addChannelGroupType(groupType);
@@ -195,7 +194,7 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
                         "Multiple firmware versions for device type '{}' found ({}). "
                                 + "Make sure, all devices of the same type have the same firmware version, "
                                 + "otherwise you MAY have channel and/or datapoint errors in the logfile",
-                        deviceType, StringUtils.join(firmwares, ", "));
+                        deviceType, String.join(", ", firmwares));
             }
         }
     }
@@ -204,7 +203,7 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
      * Adds the firmware version for validation.
      */
     private void addFirmware(HmDevice device) {
-        if (!StringUtils.equals(device.getFirmware(), "?") && !DEVICE_TYPE_VIRTUAL.equals(device.getType())
+        if (!"?".equals(device.getFirmware()) && !DEVICE_TYPE_VIRTUAL.equals(device.getType())
                 && !DEVICE_TYPE_VIRTUAL_WIRED.equals(device.getType())) {
             Set<String> firmwares = firmwaresByType.get(device.getType());
             if (firmwares == null) {
@@ -237,7 +236,8 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
 
         List<ChannelGroupDefinition> groupDefinitions = new ArrayList<>();
         for (ChannelGroupType groupType : groupTypes) {
-            String id = StringUtils.substringAfterLast(groupType.getUID().getId(), "_");
+            int usPos = groupType.getUID().getId().lastIndexOf("_");
+            String id = usPos == -1 ? groupType.getUID().getId() : groupType.getUID().getId().substring(usPos + 1);
             groupDefinitions.add(new ChannelGroupDefinition(id, groupType.getUID()));
         }
 
@@ -337,7 +337,7 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
                             MetadataUtils.getParameterName(dp), MetadataUtils.getConfigDescriptionParameterType(dp));
 
                     builder.withLabel(MetadataUtils.getLabel(dp));
-                    builder.withDefault(ObjectUtils.toString(dp.getDefaultValue()));
+                    builder.withDefault(Objects.toString(dp.getDefaultValue(), ""));
                     builder.withDescription(MetadataUtils.getDatapointDescription(dp));
 
                     if (dp.isEnumType()) {
@@ -383,6 +383,11 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
      * Returns true, if the given datapoint can be ignored for metadata generation.
      */
     public static boolean isIgnoredDatapoint(HmDatapoint dp) {
-        return StringUtils.indexOfAny(dp.getName(), IGNORE_DATAPOINT_NAMES) != -1;
+        for (String testValue : IGNORE_DATAPOINT_NAMES) {
+            if (dp.getName().indexOf(testValue) > -1) {
+                return true;
+            }
+        }
+        return false;
     }
 }
index ef5178b285fad97854653803281e4e51ec5c0a3b..75e182667e8e1bcf99a79463f4ab2d59987f0173 100644 (file)
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -29,8 +30,7 @@ import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
+import org.openhab.binding.homematic.internal.misc.MiscUtils;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmDevice;
 import org.openhab.core.config.core.ConfigDescriptionParameter.Type;
@@ -77,9 +77,16 @@ public class MetadataUtils {
                 BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) {
             String line;
             while ((line = reader.readLine()) != null) {
-                if (StringUtils.trimToNull(line) != null && !StringUtils.startsWith(line, "#")) {
-                    String channelType = StringUtils.trimToNull(StringUtils.substringBefore(line, "|"));
-                    String datapointName = StringUtils.trimToNull(StringUtils.substringAfter(line, "|"));
+                if (!line.trim().isEmpty() && !line.startsWith("#")) {
+                    String[] parts = line.split("\\|");
+                    String channelType = null;
+                    String datapointName = null;
+                    if (parts.length > 0) {
+                        channelType = parts[0].trim();
+                        if (parts.length > 1) {
+                            datapointName = parts[1].trim();
+                        }
+                    }
 
                     Set<String> channelDatapoints = standardDatapoints.get(channelType);
                     if (channelDatapoints == null) {
@@ -142,8 +149,7 @@ public class MetadataUtils {
      */
     public static String getUnit(HmDatapoint dp) {
         if (dp.getUnit() != null) {
-            String unit = StringUtils.replace(dp.getUnit(), "100%", "%");
-            return StringUtils.replace(unit, "%", "%%");
+            return dp.getUnit().replace("100%", "%").replace("%", "%%");
         }
         return null;
     }
@@ -182,7 +188,7 @@ public class MetadataUtils {
      * Returns the label string for the given Datapoint.
      */
     public static String getLabel(HmDatapoint dp) {
-        return WordUtils.capitalizeFully(StringUtils.replace(dp.getName(), "_", " "));
+        return MiscUtils.capitalize(dp.getName().replace("_", " "));
     }
 
     /**
@@ -198,7 +204,7 @@ public class MetadataUtils {
     public static String getDescription(String... keys) {
         StringBuilder sb = new StringBuilder();
         for (int startIdx = 0; startIdx < keys.length; startIdx++) {
-            String key = StringUtils.join(keys, "|", startIdx, keys.length);
+            String key = String.join("|", Arrays.copyOfRange(keys, startIdx, keys.length));
             if (key.endsWith("|")) {
                 key = key.substring(0, key.length() - 1);
             }
@@ -209,7 +215,7 @@ public class MetadataUtils {
             sb.append(key).append(", ");
         }
         if (logger.isTraceEnabled()) {
-            logger.trace("Description not found for: {}", StringUtils.substring(sb.toString(), 0, -2));
+            logger.trace("Description not found for: {}", sb.toString().substring(0, sb.length() - 2));
         }
         return null;
     }
@@ -224,9 +230,8 @@ public class MetadataUtils {
 
         String deviceDescription = null;
         boolean isTeam = device.getType().endsWith("-Team");
-        String type = isTeam ? StringUtils.remove(device.getType(), "-Team") : device.getType();
+        String type = isTeam ? device.getType().replace("-Team", "") : device.getType();
         deviceDescription = getDescription(type);
-
         if (deviceDescription != null && isTeam) {
             deviceDescription += " Team";
         }
@@ -276,7 +281,10 @@ public class MetadataUtils {
      */
     public static String getItemType(HmDatapoint dp) {
         String dpName = dp.getName();
-        String channelType = StringUtils.defaultString(dp.getChannel().getType());
+        String channelType = dp.getChannel().getType();
+        if (channelType == null) {
+            channelType = "";
+        }
 
         if (dp.isBooleanType()) {
             if (((dpName.equals(DATAPOINT_NAME_STATE) || dpName.equals(VIRTUAL_DATAPOINT_NAME_STATE_CONTACT))
@@ -359,7 +367,10 @@ public class MetadataUtils {
      */
     public static String getCategory(HmDatapoint dp, String itemType) {
         String dpName = dp.getName();
-        String channelType = StringUtils.defaultString(dp.getChannel().getType());
+        String channelType = dp.getChannel().getType();
+        if (channelType == null) {
+            channelType = "";
+        }
 
         if (dpName.equals(DATAPOINT_NAME_BATTERY_TYPE) || dpName.equals(DATAPOINT_NAME_LOWBAT)
                 || dpName.equals(DATAPOINT_NAME_LOWBAT_IP)) {
index c2aa4d161f4cd394c53e2bb6415772f9b4214437..b04f28687cde1cdcd8bd2b8514cf301c2fddbbab 100644 (file)
@@ -14,7 +14,6 @@ package org.openhab.binding.homematic.internal.type;
 
 import static org.openhab.binding.homematic.internal.HomematicBindingConstants.BINDING_ID;
 
-import org.apache.commons.lang.math.NumberUtils;
 import org.openhab.binding.homematic.internal.model.HmChannel;
 import org.openhab.binding.homematic.internal.model.HmDatapoint;
 import org.openhab.binding.homematic.internal.model.HmDatapointInfo;
@@ -83,8 +82,15 @@ public class UidUtils {
      * Generates the HmDatapointInfo for the given thing and channelUID.
      */
     public static HmDatapointInfo createHmDatapointInfo(ChannelUID channelUID) {
-        return new HmDatapointInfo(channelUID.getThingUID().getId(), HmParamsetType.VALUES,
-                NumberUtils.toInt(channelUID.getGroupId()), channelUID.getIdWithoutGroup());
+        int value;
+        try {
+            String groupID = channelUID.getGroupId();
+            value = groupID == null ? 0 : Integer.parseInt(groupID);
+        } catch (NumberFormatException e) {
+            value = 0;
+        }
+        return new HmDatapointInfo(channelUID.getThingUID().getId(), HmParamsetType.VALUES, value,
+                channelUID.getIdWithoutGroup());
     }
 
     /**
index e232c8d32192a7c3f5a487f59638c2fd2ac36c40..0dc6f526521e93653d56e5f9a396cb0a3924bc59 100644 (file)
@@ -25,9 +25,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.TreeMap;
 
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
-
 /**
  * The CcuMetadataExtractor loads some JavaScript files from the CCU and generates the device and datapoint
  * descriptions into the file generated-descriptions.properties.
@@ -122,7 +119,7 @@ public class CcuMetadataExtractor {
      */
     private Map<String, String> loadJsonLangDescriptionFile(String url, String lang) throws IOException {
         final Map<String, String> descriptions = new TreeMap<>();
-        String descriptionUrl = StringUtils.replace(url, "{LANGUAGE}", lang);
+        String descriptionUrl = url.replace("{LANGUAGE}", lang);
 
         String startLine = "  \"" + lang + "\" : {";
         String endLine = "  },";
@@ -132,7 +129,7 @@ public class CcuMetadataExtractor {
             public void line(String line) {
                 String[] entry = handleStringTable(line);
                 if (entry != null) {
-                    descriptions.put(StringUtils.trim(entry[0]), unescape(StringUtils.trim(entry[1])));
+                    descriptions.put(entry[0].trim(), unescape(entry[1].trim()));
                 }
             }
         };
@@ -150,20 +147,24 @@ public class CcuMetadataExtractor {
             @Override
             public void line(String line) {
                 if (line.startsWith("elvST['")) {
-                    line = StringUtils.remove(line, "elvST['");
-                    line = StringUtils.replace(line, "'] = '", "=");
-                    line = StringUtils.remove(line, "';");
-                    line = StringUtils.remove(line, "$");
-                    line = StringUtils.remove(line, "{");
-                    line = StringUtils.remove(line, "}");
-
-                    int count = StringUtils.countMatches(line, "=");
+                    line = line.replace("elvST['", "");
+                    line = line.replace("'] = '", "=");
+                    line = line.replace("';", "");
+                    line = line.replace("$", "");
+                    line = line.replace("{", "");
+                    line = line.replace("}", "");
+
+                    int count = 0;
+                    for (int i = 0; i < line.length(); i++) {
+                        if (line.charAt(i) == '=') {
+                            count++;
+                        }
+                    }
                     if (count > 1) {
-                        line = StringUtils.replace(line, "=", "|", 1);
+                        line = line.replaceFirst("=", "|");
                     }
-
-                    String[] split = StringUtils.split(line, "=", 2);
-                    deviceKeys.put(StringUtils.trim(split[0]), StringUtils.trim(split[1]));
+                    String[] split = line.split("=", 2);
+                    deviceKeys.put(split[0].trim(), split[1].trim());
                 }
             }
         };
@@ -174,11 +175,11 @@ public class CcuMetadataExtractor {
      * Splits a JSON JavaScript entry.
      */
     private String[] handleStringTable(String line) {
-        line = StringUtils.remove(line, "    \"");
-        line = StringUtils.remove(line, "\",");
-        line = StringUtils.remove(line, "\"");
+        line = line.replace("    \"", "");
+        line = line.replace("\",", "");
+        line = line.replace("\"", "");
 
-        String[] splitted = StringUtils.split(line, ":", 2);
+        String[] splitted = line.split(":", 2);
         return splitted.length != 2 ? null : splitted;
     }
 
@@ -186,16 +187,21 @@ public class CcuMetadataExtractor {
      * Transforms a string for a Java property file.
      */
     private String unescape(String str) {
-        str = StringUtils.replace(str, "%FC", "ü");
-        str = StringUtils.replace(str, "%DC", "Ü");
-        str = StringUtils.replace(str, "%E4", "ä");
-        str = StringUtils.replace(str, "%C4", "Ä");
-        str = StringUtils.replace(str, "%F6", "ö");
-        str = StringUtils.replace(str, "%D6", "Ö");
-        str = StringUtils.replace(str, "%DF", "ß");
-        str = StringUtils.remove(str, "&nbsp;");
-        str = StringUtils.replace(str, "<br/>", " ");
-        str = StringEscapeUtils.unescapeHtml(str);
+        str = str.replace("%FC", "ü");
+        str = str.replace("%DC", "Ü");
+        str = str.replace("%E4", "ä");
+        str = str.replace("%C4", "Ä");
+        str = str.replace("%F6", "ö");
+        str = str.replace("%D6", "Ö");
+        str = str.replace("%DF", "ß");
+        str = str.replace("&nbsp;", "");
+        str = str.replace("<br/>", " ");
+        str = str.replace("&uuml;", "ü");
+        str = str.replace("&auml;", "ä");
+        str = str.replace("&ouml;", "ö");
+        str = str.replace("&Uuml;", "Ü");
+        str = str.replace("&Auml;", "Ä");
+        str = str.replace("&Ouml;", "Ö");
         return str;
     }
 
@@ -222,7 +228,7 @@ public class CcuMetadataExtractor {
                         includeLine = false;
                     }
                 }
-                if ((includeLine == null || includeLine) && StringUtils.isNotBlank(line)) {
+                if ((includeLine == null || includeLine) && !line.isBlank()) {
                     line(line);
                 }
             }