001package jmri.jmrit.operations.automation.actions; 002 003import java.beans.PropertyChangeEvent; 004import java.beans.PropertyChangeListener; 005 006import javax.swing.JComboBox; 007 008import org.slf4j.Logger; 009import org.slf4j.LoggerFactory; 010 011import jmri.InstanceManager; 012import jmri.jmrit.operations.automation.Automation; 013import jmri.jmrit.operations.automation.AutomationManager; 014import jmri.jmrit.operations.setup.Control; 015 016public class RunAutomationAction extends Action implements PropertyChangeListener { 017 018 private static final int _code = ActionCodes.RUN_AUTOMATION; 019 020 @Override 021 public int getCode() { 022 return _code; 023 } 024 025 @Override 026 public String getName() { 027 return Bundle.getMessage("RunAutomation"); 028 } 029 030 @Override 031 public void doAction() { 032 if (getAutomationItem() != null) { 033 Automation automation = getAutomationItem().getAutomationToRun(); 034 if (automation != null) { 035 automation.removePropertyChangeListener(this); 036 automation.addPropertyChangeListener(this); 037 setRunning(true); 038 automation.run(); 039 } 040 finishAction(automation != null && automation.getSize() > 0); 041 } 042 } 043 044 @Override 045 public String getStatus() { 046 Automation automation = getAutomationItem().getAutomationToRun(); 047 if (getAutomationItem().isActionRan() && getAutomationItem().isActionSuccessful() && automation != null) { 048 // return status of the automation that was selected 049 return automation.getActionStatus(); 050 } 051 return super.getStatus(); 052 } 053 054 @Override 055 public void cancelAction() { 056 // no cancel for this action 057 } 058 059 @Override 060 public JComboBox<Automation> getComboBox() { 061 if (getAutomationItem() != null) { 062 JComboBox<Automation> cb = InstanceManager.getDefault(AutomationManager.class).getComboBox(); 063 cb.setSelectedItem(getAutomationItem().getAutomationToRun()); 064 return cb; 065 } 066 return null; 067 } 068 069 private void automationUpdate(PropertyChangeEvent evt) { 070 if (getAutomationItem() != null) { 071 getAutomationItem().firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue()); 072 } 073 } 074 075 @Override 076 public void propertyChange(PropertyChangeEvent evt) { 077 if (Control.SHOW_PROPERTY) 078 log.debug("Property change AutomationItem {}: ({}) old: ({}) new: ({})", getAutomationItem().getId(), 079 evt.getPropertyName(), evt.getOldValue(), evt.getNewValue()); 080 automationUpdate(evt); 081 } 082 083 private static final Logger log = LoggerFactory.getLogger(RunAutomationAction.class); 084}