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 WaitAutomationAction extends Action implements PropertyChangeListener { 017 018 private static final int _code = ActionCodes.WAIT_AUTOMATION; 019 020 @Override 021 public int getCode() { 022 return _code; 023 } 024 025 @Override 026 public String getName() { 027 return Bundle.getMessage("WaitAutomation"); 028 } 029 030 @Override 031 public boolean isConcurrentAction() { 032 return true; 033 } 034 035 @Override 036 public void doAction() { 037 if (getAutomationItem() != null) { 038 Automation automation = getAutomationItem().getAutomationToRun(); 039 if (automation != null) { 040 automation.addPropertyChangeListener(this); 041 if (automation.isRunning()) { 042 setRunning(true); 043 } else { 044 automation.removePropertyChangeListener(this); 045 finishAction(automation.getActionStatus().equals(getActionSuccessfulString())); 046 } 047 } else { 048 finishAction(false); 049 } 050 } 051 } 052 053 /** 054 * Wait for automation to complete. 055 * 056 */ 057 private void automationUpdate(PropertyChangeEvent evt) { 058 if (getAutomationItem() != null) { 059 if (evt.getPropertyName().equals(Automation.RUNNING_CHANGED_PROPERTY)) { 060 Automation automation = getAutomationItem().getAutomationToRun(); 061 automation.removePropertyChangeListener(this); 062 finishAction(automation.getActionStatus().equals(getActionSuccessfulString())); 063 } 064 } 065 } 066 067 @Override 068 public void cancelAction() { 069 if (getAutomationItem() != null) { 070 setRunning(false); 071 Automation automation = getAutomationItem().getAutomationToRun(); 072 if (automation != null) { 073 automation.removePropertyChangeListener(this); 074 } 075 } 076 } 077 078 @Override 079 public JComboBox<Automation> getComboBox() { 080 if (getAutomationItem() != null) { 081 JComboBox<Automation> cb = InstanceManager.getDefault(AutomationManager.class).getComboBox(); 082 cb.setSelectedItem(getAutomationItem().getAutomationToRun()); 083 return cb; 084 } 085 return null; 086 } 087 088 @Override 089 public void propertyChange(PropertyChangeEvent evt) { 090 if (Control.SHOW_PROPERTY) 091 log.debug("Property change AutomationItem {}: ({}) old: ({}) new: ({})", getAutomationItem().getId(), 092 evt.getPropertyName(), evt.getOldValue(), evt.getNewValue()); 093 automationUpdate(evt); 094 } 095 096 private static final Logger log = LoggerFactory.getLogger(WaitAutomationAction.class); 097 098}