You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2018/10/27 07:00:53 UTC

[incubator-plc4x] branch master updated: [OPM] Small refactoring, introduced OpmUtils.

This is an automated email from the ASF dual-hosted git repository.

jfeinauer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git


The following commit(s) were added to refs/heads/master by this push:
     new d168e12  [OPM] Small refactoring, introduced OpmUtils.
d168e12 is described below

commit d168e12462a5fd77c8a99029779c840ac874e1ba
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Sat Oct 27 08:59:43 2018 +0200

    [OPM] Small refactoring, introduced OpmUtils.
---
 .../java/org/apache/plc4x/java/opm/OpmUtils.java   | 36 ++++++++++++++++++++++
 .../apache/plc4x/java/opm/PlcEntityManager.java    | 34 +++-----------------
 2 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/plc4j/utils/opm/src/main/java/org/apache/plc4x/java/opm/OpmUtils.java b/plc4j/utils/opm/src/main/java/org/apache/plc4x/java/opm/OpmUtils.java
new file mode 100644
index 0000000..0f05dc1
--- /dev/null
+++ b/plc4j/utils/opm/src/main/java/org/apache/plc4x/java/opm/OpmUtils.java
@@ -0,0 +1,36 @@
+package org.apache.plc4x.java.opm;
+
+import java.lang.reflect.Field;
+
+/**
+ * Utility methods for usage with OPM.
+ */
+public class OpmUtils {
+
+    static <T> PlcEntity getPlcEntityAndCheckPreconditions(Class<T> clazz) {
+        PlcEntity annotation = clazz.getAnnotation(PlcEntity.class);
+        if (annotation == null) {
+            throw new IllegalArgumentException("Given Class is no Plc Entity, i.e., not annotated with @PlcEntity");
+        }
+        // Check if default constructor exists
+        try {
+            clazz.getConstructor();
+        } catch (NoSuchMethodException e) {
+            throw new IllegalArgumentException("Cannot use PlcEntity without default constructor", e);
+        }
+        return annotation;
+    }
+
+    static String extractAddress(Object proxy) throws OPMException {
+        String address;
+        try {
+            Field field = proxy.getClass().getDeclaredField(PlcEntityManager.PLC_ADDRESS_FIELD_NAME);
+            field.setAccessible(true);
+            address = (String) field.get(proxy);
+        } catch (IllegalAccessException | NoSuchFieldException e) {
+            throw new OPMException("Problem with accessing internal plc address", e);
+        }
+        return address;
+    }
+
+}
diff --git a/plc4j/utils/opm/src/main/java/org/apache/plc4x/java/opm/PlcEntityManager.java b/plc4j/utils/opm/src/main/java/org/apache/plc4x/java/opm/PlcEntityManager.java
index 487a479..d6d6de6 100644
--- a/plc4j/utils/opm/src/main/java/org/apache/plc4x/java/opm/PlcEntityManager.java
+++ b/plc4j/utils/opm/src/main/java/org/apache/plc4x/java/opm/PlcEntityManager.java
@@ -86,11 +86,11 @@ import static net.bytebuddy.matcher.ElementMatchers.any;
  */
 public class PlcEntityManager {
 
+    public static final String PLC_ADDRESS_FIELD_NAME = "_plcAddress";
     private static final Logger LOGGER = LoggerFactory.getLogger(PlcEntityManager.class);
 
     private static final Configuration CONF = new SystemConfiguration();
     private static final long READ_TIMEOUT = CONF.getLong("org.apache.plc4x.java.opm.entity_manager.read_timeout", 1_000);
-    public static final String PLC_ADDRESS_FIELD_NAME = "_plcAddress";
 
     private final PlcDriverManager driverManager;
 
@@ -103,7 +103,7 @@ public class PlcEntityManager {
     }
 
     public <T> T read(Class<T> clazz, String address) throws OPMException {
-        PlcEntity annotation = getPlcEntityAndCheckPreconditions(clazz);
+        PlcEntity annotation = OpmUtils.getPlcEntityAndCheckPreconditions(clazz);
 
         try (PlcConnection connection = driverManager.getConnection(address)) {
             if (!connection.getMetadata().canRead()) {
@@ -156,7 +156,7 @@ public class PlcEntityManager {
      * @throws OPMException when proxy can't be build.
      */
     public <T> T connect(Class<T> clazz, String address) throws OPMException {
-        getPlcEntityAndCheckPreconditions(clazz);
+        OpmUtils.getPlcEntityAndCheckPreconditions(clazz);
         try {
             // Use Byte Buddy to generate a subclassed proxy that delegates all PlcField Methods
             // to the intercept method
@@ -181,20 +181,6 @@ public class PlcEntityManager {
         }
     }
 
-    private <T> PlcEntity getPlcEntityAndCheckPreconditions(Class<T> clazz) {
-        PlcEntity annotation = clazz.getAnnotation(PlcEntity.class);
-        if (annotation == null) {
-            throw new IllegalArgumentException("Given Class is no Plc Entity, i.e., not annotated with @PlcEntity");
-        }
-        // Check if default constructor exists
-        try {
-            clazz.getConstructor();
-        } catch (NoSuchMethodException e) {
-            throw new IllegalArgumentException("Cannot use PlcEntity without default constructor", e);
-        }
-        return annotation;
-    }
-
     //------------------------------------------------------------------------------------------------
     //
     //  Methods for interception for the proxy object
@@ -222,7 +208,7 @@ public class PlcEntityManager {
         LOGGER.trace("Invoked method {} on connected PlcEntity {}", method.getName(), entity);
 
         // Fetch connection from internal variable
-        String address = extractAddress(proxy);
+        String address = OpmUtils.extractAddress(proxy);
 
         if (method.getName().startsWith("get")) {
             if (method.getParameterCount() > 0) {
@@ -303,18 +289,6 @@ public class PlcEntityManager {
         }
     }
 
-    private static String extractAddress(Object proxy) throws OPMException {
-        String address;
-        try {
-            Field field = proxy.getClass().getDeclaredField(PLC_ADDRESS_FIELD_NAME);
-            field.setAccessible(true);
-            address = (String) field.get(proxy);
-        } catch (IllegalAccessException | NoSuchFieldException e) {
-            throw new OPMException("Problem with accessing internal plc address", e);
-        }
-        return address;
-    }
-
 
     private Object fetchValueForIsGetter(Method m, String address) throws OPMException {
         return fetchValueForGetter(m, 2, address);