001package jmri.jmrit.operations.locations.gui;
002
003import java.beans.PropertyChangeEvent;
004
005import javax.swing.JTable;
006import javax.swing.SwingUtilities;
007
008import jmri.jmrit.operations.locations.Location;
009import jmri.jmrit.operations.locations.Track;
010import jmri.jmrit.operations.setup.Control;
011
012import org.slf4j.Logger;
013import org.slf4j.LoggerFactory;
014
015/**
016 * Table Model for edit of yards used by operations
017 *
018 * @author Daniel Boudreau Copyright (C) 2008
019 */
020public class YardTableModel extends TrackTableModel {
021
022    public YardTableModel() {
023        super();
024    }
025
026    public void initTable(JTable table, Location location) {
027        super.initTable(table, location, Track.YARD);
028    }
029
030    @Override
031    protected void editTrack(int row) {
032        log.debug("Edit yard");
033        if (tef != null) {
034            tef.dispose();
035        }
036        // use invokeLater so new window appears on top
037        SwingUtilities.invokeLater(() -> {
038            Track yard = _tracksList.get(row);
039            tef = new YardEditFrame(yard);
040        });
041    }
042    
043    @Override
044    public String getColumnName(int col) {
045        switch (col) {
046            case NAME_COLUMN:
047                return Bundle.getMessage("YardName");
048            default:
049                return super.getColumnName(col);
050        }
051    }
052
053    // this table listens for changes to a location and its yards
054    @Override
055    public void propertyChange(PropertyChangeEvent e) {
056        if (Control.SHOW_PROPERTY) {
057            log.debug("Property change: ({}) old: ({}) new: ({})", e.getPropertyName(), e.getOldValue(), e
058                    .getNewValue());
059        }
060        super.propertyChange(e);
061        if (e.getSource().getClass().equals(Track.class)) {
062            Track track = ((Track) e.getSource());
063            if (track.isYard()) {
064                int row = _tracksList.indexOf(track);
065                if (Control.SHOW_PROPERTY) {
066                    log.debug("Update yard table row: {} track: ({})", row, track.getName());
067                }
068                if (row >= 0) {
069                    fireTableRowsUpdated(row, row);
070                }
071            }
072        }
073    }
074
075    private static final Logger log = LoggerFactory.getLogger(YardTableModel.class);
076}