001package jmri.jmrit.beantable.routetable;
002
003import java.util.List;
004
005import jmri.InstanceManager;
006
007/**
008 * Table model for selecting Turnouts and Turnout State.
009 *
010 * Split from {@link jmri.jmrit.beantable.RouteTableAction}
011 *
012 * @author Dave Duchamp Copyright (C) 2004
013 * @author Bob Jacobsen Copyright (C) 2007
014 * @author Simon Reader Copyright (C) 2008
015 * @author Pete Cressman Copyright (C) 2009
016 * @author Egbert Broerse Copyright (C) 2016
017 * @author Paul Bender Copyright (C) 2020
018 */
019class RouteTurnoutModel extends RouteOutputModel {
020
021    private final AbstractRouteAddEditFrame routeAddFrame;
022
023    RouteTurnoutModel(AbstractRouteAddEditFrame routeAddFrame) {
024        this.routeAddFrame = routeAddFrame;
025        InstanceManager.turnoutManagerInstance().addPropertyChangeListener(RouteTurnoutModel.this);
026    }
027
028    @Override
029    public int getRowCount() {
030        if (routeAddFrame.isShowAll()) {
031            return routeAddFrame.get_turnoutList().size();
032        } else {
033            return routeAddFrame.get_includedTurnoutList().size();
034        }
035    }
036
037    @Override
038    public Object getValueAt(int r, int c) {
039        List<RouteTurnout> turnoutList;
040        if (routeAddFrame.isShowAll()) {
041            turnoutList = routeAddFrame.get_turnoutList();
042        } else {
043            turnoutList = routeAddFrame.get_includedTurnoutList();
044        }
045        // some error checking
046        if (r >= turnoutList.size()) {
047            log.debug("row is greater than turnout list size");
048            return null;
049        }
050        switch (c) {
051            case INCLUDE_COLUMN:
052                return turnoutList.get(r).isIncluded();
053            case SNAME_COLUMN:  // slot number
054                return turnoutList.get(r).getSysName();
055            case UNAME_COLUMN:  //
056                return turnoutList.get(r).getUserName();
057            case STATE_COLUMN:  //
058                return turnoutList.get(r).getSetToState();
059            default:
060                return null;
061        }
062    }
063
064    @Override
065    public void setValueAt(Object type, int r, int c) {
066        List<RouteTurnout> turnoutList;
067        if (routeAddFrame.isShowAll()) {
068            turnoutList = routeAddFrame.get_turnoutList();
069        } else {
070            turnoutList = routeAddFrame.get_includedTurnoutList();
071        }
072        switch (c) {
073            case INCLUDE_COLUMN:
074                turnoutList.get(r).setIncluded(((Boolean) type));
075                break;
076            case STATE_COLUMN:
077                turnoutList.get(r).setSetToState((String) type);
078                break;
079            default:
080                log.error("RouteTurnoutModel.setValueAt should not be called on column {}", c);
081        }
082    }
083
084    @Override
085    protected void dispose() {
086        InstanceManager.turnoutManagerInstance().removePropertyChangeListener(this);
087    }
088
089    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(RouteTurnoutModel.class);
090
091}