001package jmri.jmrit.operations.automation.actions;
002
003import jmri.InstanceManager;
004import jmri.jmrit.operations.locations.Location;
005import jmri.jmrit.operations.locations.LocationManager;
006import jmri.jmrit.operations.trains.*;
007import jmri.jmrit.operations.trains.csv.TrainCsvSwitchLists;
008
009public class PrintSwitchListChangesAction extends Action {
010
011    private static final int _code = ActionCodes.PRINT_SWITCHLIST_CHANGES;
012    protected static final boolean IS_CHANGED = true;
013
014    @Override
015    public int getCode() {
016        return _code;
017    }
018
019    @Override
020    public String getName() {
021        if (InstanceManager.getDefault(TrainManager.class).isPrintPreviewEnabled()) {
022            return Bundle.getMessage("PreviewSwitchListChanges");
023        } else {
024            return Bundle.getMessage("PrintSwitchListChanges");
025        }
026    }
027
028    @Override
029    public void doAction() {
030        doAction(IS_CHANGED);
031    }
032
033    protected void doAction(boolean isChanged) {
034        if (getAutomationItem() != null) {
035            setRunning(true);
036            TrainSwitchLists trainSwitchLists = new TrainSwitchLists();
037            TrainCsvSwitchLists trainCsvSwitchLists = new TrainCsvSwitchLists();
038            for (Location location : InstanceManager.getDefault(LocationManager.class).getUniqueLocationsByNameList()) {
039                if (location.isSwitchListEnabled() &&
040                        (!isChanged || location.getStatus().equals(Location.MODIFIED))) {
041                    // also build the CSV switch lists
042                    trainCsvSwitchLists.buildSwitchList(location);
043                    trainSwitchLists.buildSwitchList(location);
044                    trainSwitchLists.printSwitchList(location,
045                            InstanceManager.getDefault(TrainManager.class).isPrintPreviewEnabled());
046                }
047            }
048            // set trains switch lists printed
049            InstanceManager.getDefault(TrainManager.class).setTrainsSwitchListStatus(Train.PRINTED);
050        }
051        finishAction(true);
052    }
053
054    @Override
055    public void cancelAction() {
056        // no cancel for this action
057    }
058}