package org.openpnp.machine.reference.signaler; import javax.swing.Action; import javax.swing.Icon; import org.openpnp.ConfigurationListener; import org.openpnp.machine.reference.ReferenceMachine; import org.openpnp.model.Configuration; import org.openpnp.spi.Actuator; import org.openpnp.spi.PropertySheetHolder; import org.openpnp.spi.base.AbstractJobProcessor; import org.openpnp.spi.base.AbstractMachine; import org.openpnp.spi.base.AbstractSignaler; import org.simpleframework.xml.Attribute; /** * An ActuatorSignaler can signal certain device or job states by using a machine actuator e.g. signaling lights */ public class ActuatorSignaler extends AbstractSignaler { protected ReferenceMachine machine; protected Actuator actuator; @Attribute(required = true) protected String actuatorId; @Attribute(required = false) protected AbstractJobProcessor.State jobState; @Attribute(required = false) protected AbstractMachine.State machineState; public ActuatorSignaler() { Configuration.get().addListener(new ConfigurationListener.Adapter() { @Override public void configurationLoaded(Configuration configuration) throws Exception { machine = (ReferenceMachine) configuration.getMachine(); actuator = machine.getActuator(actuatorId); } }); } @Override public void signalMachineState(AbstractMachine.State state) { if(actuator != null && machineState != null) { try { if(state == machineState) { this.actuator.actuate(true); } else { this.actuator.actuate(false); } } catch (Exception e) { e.printStackTrace(); } } } @Override public void signalJobProcessorState(AbstractJobProcessor.State state) { if(actuator != null && jobState != null) { try { if(state == jobState) { this.actuator.actuate(true); } else { this.actuator.actuate(false); } } catch (Exception e) { e.printStackTrace(); } } } @Override public String getPropertySheetHolderTitle() { return getClass().getSimpleName() + " " + getName(); } @Override public PropertySheetHolder[] getChildPropertySheetHolders() { return new PropertySheetHolder[0]; } @Override public PropertySheet[] getPropertySheets() { return new PropertySheet[0]; } @Override public Action[] getPropertySheetHolderActions() { return new Action[0]; } @Override public Icon getPropertySheetHolderIcon() { return null; } }