From 779787d958e63090d267651d97c3c6a693f3a620 Mon Sep 17 00:00:00 2001 From: sige Date: Thu, 21 Mar 2024 14:12:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diframe/DiDeviceActuatorManager.java | 52 ++++++++++++++++------ 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceActuatorManager.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceActuatorManager.java index 57f6bb6..46e5380 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceActuatorManager.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceActuatorManager.java @@ -44,22 +44,10 @@ public class DiDeviceActuatorManager { throw new RuntimeException("Invalid actuators config"); } + @SuppressWarnings("unchecked") List> actuators = (List>) config; for ( Map actuatorConfig : actuators ) { - // find actuator class - String type = (String)actuatorConfig.get("type"); - Class actClazz = null; - try { - actClazz = Class.forName(type); - } catch (ClassNotFoundException e) { - String actClassName = "com.my.graphiteDigesterBg.diframe.actuator.DiAct" + type; - try { - actClazz = Class.forName(actClassName); - } catch (ClassNotFoundException ex) { - throw new RuntimeException(ex); - } - } - + Class actClazz = this.getActuatorClassByOptions(actuatorConfig); // create actuator instance Constructor actuatorConstructor = null; try { @@ -80,4 +68,40 @@ public class DiDeviceActuatorManager { this.actuators.put((String)actuatorConfig.get("key"), actuator); } } + + // get actuator class by options + private Class getActuatorClassByOptions(Map options) { + // find actuator class + String type = (String)options.get("type"); + Class actClazz = null; + try { + actClazz = Class.forName(type); + } catch (ClassNotFoundException e) { + String actClassName = "com.my.graphiteDigesterBg.diframe.actuator.DiAct" + type; + try { + actClazz = Class.forName(actClassName); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + + if ( !actClazz.isInterface() ) { + return actClazz; + } + + // find implement class if actuator class is an interface + String actImplName = (String)options.get("implement"); + try { + actClazz = Class.forName(actImplName); + } catch (ClassNotFoundException e) { + String actImplClassName = "com.my.graphiteDigesterBg.diframe.actuator.impl.DiAct" + actImplName; + try { + actClazz = Class.forName(actImplClassName); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + + return actClazz; + } }