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);