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; + } }