001package jmri.jmrit.beantable;
002
003import jmri.*;
004
005import org.slf4j.Logger;
006import org.slf4j.LoggerFactory;
007
008import javax.annotation.Nonnull;
009import javax.swing.*;
010
011/**
012 * TableDataModel for the Memory Table.
013 *
014 * Split from {@link MemoryTableAction}
015 *
016 * @author Bob Jacobsen Copyright (C) 2003
017 * @author Steve Young Copyright (C) 2021
018 */
019public class MemoryTableDataModel extends BeanTableDataModel<Memory> {
020
021    /**
022     * Create a new Memory Table Data Model.
023     * @param mgr Memory manager to use in the model, default MemoryManager always used.
024     */
025    public MemoryTableDataModel(Manager<Memory> mgr){
026        super();
027        setManager(mgr);
028    }
029
030    /**
031     * Constructor for use by preferences and messages system
032     */
033    public MemoryTableDataModel(){
034        super();
035        setManager(InstanceManager.getDefault(MemoryManager.class));
036    }
037
038    /** {@inheritDoc} */
039    @Override
040    public String getValue(String name) {
041        Memory mem = InstanceManager.getDefault(MemoryManager.class).getBySystemName(name);
042        if (mem == null) {
043            return "?";
044        }
045        Object m = mem.getValue();
046        if (m != null) {
047            if ( m instanceof Reportable) {
048                return ((Reportable) m).toReportString();
049            }
050            else {
051                return m.toString();
052            }
053        } else {
054            return "";
055        }
056    }
057
058    /** {@inheritDoc} */
059    @Override
060    public Manager<Memory> getManager() {
061        return InstanceManager.getDefault(MemoryManager.class);
062    }
063
064    /** {@inheritDoc} */
065    @Override
066    public Memory getBySystemName(@Nonnull String name) {
067        return InstanceManager.getDefault(MemoryManager.class).getBySystemName(name);
068    }
069
070    /** {@inheritDoc} */
071    @Override
072    public Memory getByUserName(@Nonnull String name) {
073        return InstanceManager.getDefault(MemoryManager.class).getByUserName(name);
074    }
075
076    /** {@inheritDoc} */
077    @Override
078    protected String getMasterClassName() {
079        return jmri.jmrit.beantable.MemoryTableAction.class.getName();
080    }
081
082    /** {@inheritDoc} */
083    @Override
084    public void clickOn(Memory t) {
085        // don't do anything on click; not used in this class, because
086        // we override setValueAt
087    }
088
089    /** {@inheritDoc} */
090    @Override
091    public void setValueAt(Object value, int row, int col) {
092        if (col == VALUECOL) {
093            getBySystemName(sysNameList.get(row)).setValue(value);
094            fireTableRowsUpdated(row, row);
095        } else {
096            super.setValueAt(value, row, col);
097        }
098    }
099
100    /** {@inheritDoc} */
101    @Override
102    public String getColumnName(int col) {
103        if (col == VALUECOL) {
104            return Bundle.getMessage("BlockValue");
105        }
106        return super.getColumnName(col);
107    }
108
109    /** {@inheritDoc} */
110    @Override
111    public Class<?> getColumnClass(int col) {
112        if (col == VALUECOL) {
113            return String.class;
114        } else {
115            return super.getColumnClass(col);
116        }
117    }
118
119    /** {@inheritDoc} */
120    @Override
121    public void configValueColumn(JTable table) {
122        // value column isn't button, so config is null
123    }
124
125    /** {@inheritDoc} */
126    @Override
127    protected boolean matchPropertyName(java.beans.PropertyChangeEvent e) {
128        return true;
129        // return (e.getPropertyName().indexOf("alue")>=0);
130    }
131
132    /** {@inheritDoc} */
133    @Override
134    public JButton configureButton() {
135        log.error("configureButton should not have been called");
136        return null;
137    }
138
139    /**
140     * Additionally provide Memory value Class in value column.
141     * {@inheritDoc}
142     */
143    @Override
144    public String getCellToolTip(JTable table, int row, int col) {
145        switch (col) {
146            case VALUECOL:
147                Memory m = getBySystemName(sysNameList.get(row));
148                Object o = m.getValue();
149                return (o == null ? null : o.getClass().getName());
150            default:
151                return super.getCellToolTip(table, row, col);
152        }
153    }
154
155    private static final Logger log = LoggerFactory.getLogger(MemoryTableDataModel.class);
156
157}