use of jmri.jmrix.ecos.utilities.RemoveObjectFromEcos in project JMRI by JMRI.
the class EcosLocoAddressManager method propertyChange.
/**
* The PropertyChangeListener interface in this class is intended to keep
* track of roster entries and sync them up with the Ecos.
*/
@Override
public void propertyChange(java.beans.PropertyChangeEvent e) {
//If we are adding the loco to the roster from the ecos, we don't want to be adding it back to the ecos!
if (getLocoToRoster()) {
return;
}
if (e.getPropertyName().equals("add")) {
_re = (RosterEntry) e.getNewValue();
} else if (e.getPropertyName().equals("saved")) {
if (_re != null) {
if (_re.getAttribute(rosterAttribute) != null) {
_re = null;
return;
}
//if the ecosobject attribute exists this would then indicate that it has already been created on the ecos
if (p.getAddLocoToEcos() == EcosPreferences.ASK) {
final JDialog dialog = new JDialog();
dialog.setTitle("Add Loco to the ECoS?");
//test.setSize(300,130);
dialog.setLocation(300, 200);
dialog.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
container.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JLabel question = new JLabel("Do you also want to add " + _re.getId() + " to the " + adaptermemo.getUserName() + "?");
question.setAlignmentX(Component.CENTER_ALIGNMENT);
container.add(question);
final JCheckBox remember = new JCheckBox("Remember this setting for next time?");
remember.setFont(remember.getFont().deriveFont(10f));
remember.setAlignmentX(Component.CENTER_ALIGNMENT);
//user preferences do not have the save option, but once complete the following line can be removed
//Need to get the method to save connection configuration.
remember.setVisible(true);
JButton yesButton = new JButton("Yes");
JButton noButton = new JButton("No");
JPanel button = new JPanel();
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.add(yesButton);
button.add(noButton);
container.add(button);
noButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (remember.isSelected()) {
p.setAddLocoToEcos(0x01);
}
_re = null;
dialog.dispose();
}
});
yesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (remember.isSelected()) {
p.setAddLocoToEcos(0x02);
}
RosterToEcos rosterToEcos = new RosterToEcos();
rosterToEcos.createEcosLoco(_re, adaptermemo);
_re = null;
dialog.dispose();
}
});
container.add(remember);
container.setAlignmentX(Component.CENTER_ALIGNMENT);
container.setAlignmentY(Component.CENTER_ALIGNMENT);
dialog.getContentPane().add(container);
dialog.pack();
dialog.setModal(true);
dialog.setVisible(true);
}
if (p.getAddLocoToEcos() == 0x02) {
RosterToEcos rosterToEcos = new RosterToEcos();
rosterToEcos.createEcosLoco(_re, adaptermemo);
_re = null;
}
}
} else if (e.getPropertyName().equals("remove")) {
_re = (RosterEntry) e.getNewValue();
if (_re.getAttribute(rosterAttribute) != null) {
if (p.getRemoveLocoFromEcos() == EcosPreferences.YES) {
RemoveObjectFromEcos removeObjectFromEcos = new RemoveObjectFromEcos();
removeObjectFromEcos.removeObjectFromEcos(_re.getAttribute(p.getRosterAttribute()), tc);
deleteEcosLoco(provideByEcosObject(_re.getAttribute(p.getRosterAttribute())));
} else if (p.getRemoveLocoFromEcos() == EcosPreferences.ASK) {
final JDialog dialog = new JDialog();
dialog.setTitle("Remove Loco From ECoS?");
//test.setSize(300,130);
dialog.setLocation(300, 200);
dialog.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
container.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JLabel question = new JLabel("Do you also want to remove this loco from the " + adaptermemo.getUserName());
question.setAlignmentX(Component.CENTER_ALIGNMENT);
container.add(question);
final JCheckBox remember = new JCheckBox("Remember this setting for next time?");
remember.setFont(remember.getFont().deriveFont(10f));
remember.setAlignmentX(Component.CENTER_ALIGNMENT);
//user preferences do not have the save option, but once complete the following line can be removed
//Need to get the method to save connection configuration.
remember.setVisible(true);
JButton yesButton = new JButton("Yes");
JButton noButton = new JButton("No");
JPanel button = new JPanel();
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.add(yesButton);
button.add(noButton);
container.add(button);
noButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (remember.isSelected()) {
p.setRemoveLocoFromEcos(0x01);
}
provideByEcosObject(_re.getAttribute(p.getRosterAttribute())).setRosterId(null);
dialog.dispose();
}
});
yesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (remember.isSelected()) {
p.setRemoveLocoFromEcos(0x02);
}
RemoveObjectFromEcos removeObjectFromEcos = new RemoveObjectFromEcos();
removeObjectFromEcos.removeObjectFromEcos(_re.getAttribute(p.getRosterAttribute()), tc);
deleteEcosLoco(provideByEcosObject(_re.getAttribute(p.getRosterAttribute())));
dialog.dispose();
}
});
container.add(remember);
container.setAlignmentX(Component.CENTER_ALIGNMENT);
container.setAlignmentY(Component.CENTER_ALIGNMENT);
dialog.getContentPane().add(container);
dialog.pack();
dialog.setModal(true);
dialog.setVisible(true);
}
}
_re = null;
} else if (e.getPropertyName().equals("throttleAssigned")) {
jmri.DccLocoAddress la = (jmri.DccLocoAddress) e.getNewValue();
EcosLocoAddress ela = getByDccAddress(la.getNumber());
EcosMessage m = new EcosMessage("get(" + ela.getEcosObject() + ", speed)");
tc.sendEcosMessage(m, this);
m = new EcosMessage("get(" + ela.getEcosObject() + ", dir)");
tc.sendEcosMessage(m, this);
}
}
use of jmri.jmrix.ecos.utilities.RemoveObjectFromEcos in project JMRI by JMRI.
the class EcosTurnoutManager method propertyChange.
@Override
public void propertyChange(java.beans.PropertyChangeEvent e) {
if ((e.getPropertyName().equals("length")) && (!addingTurnouts)) {
final EcosPreferences p = adaptermemo.getPreferenceManager();
EcosTurnout et;
String[] ecoslist = this.getEcosObjectArray();
String[] jmrilist = getSystemNameArray();
for (int i = 0; i < jmrilist.length; i++) {
if (jmrilist[i].startsWith(prefix + "T")) {
et = (EcosTurnout) getBySystemName(jmrilist[i]);
if (et.getObject() == 0) {
//We do not support this yet at there are many parameters
// when creating a turnout on the ecos.
}
}
}
for (int i = 0; i < ecoslist.length; i++) {
et = (EcosTurnout) getByEcosObject(Integer.parseInt(ecoslist[i]));
int address = et.getNumber();
if (getBySystemName(prefix + "T" + address) == null) {
if (p.getRemoveTurnoutsFromEcos() == 0x02) {
RemoveObjectFromEcos removeObjectFromEcos = new RemoveObjectFromEcos();
removeObjectFromEcos.removeObjectFromEcos("" + et.getObject(), tc);
deleteEcosTurnout(et);
} else {
final EcosTurnout etd = et;
final JDialog dialog = new JDialog();
dialog.setTitle("Remove Turnout From ECoS?");
dialog.setLocation(300, 200);
dialog.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
container.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JLabel question = new JLabel("Do you also want to remove turnout " + etd.getSystemName() + " from the Ecos");
question.setAlignmentX(Component.CENTER_ALIGNMENT);
container.add(question);
final JCheckBox remember = new JCheckBox("Remember this setting for next time?");
remember.setFont(remember.getFont().deriveFont(10f));
remember.setAlignmentX(Component.CENTER_ALIGNMENT);
remember.setVisible(true);
JButton yesButton = new JButton("Yes");
JButton noButton = new JButton("No");
JPanel button = new JPanel();
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.add(yesButton);
button.add(noButton);
container.add(button);
noButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (remember.isSelected()) {
p.setRemoveTurnoutsFromEcos(0x01);
}
dialog.dispose();
}
});
yesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (remember.isSelected()) {
p.setRemoveTurnoutsFromEcos(0x02);
}
RemoveObjectFromEcos removeObjectFromEcos = new RemoveObjectFromEcos();
removeObjectFromEcos.removeObjectFromEcos("" + etd.getObject(), tc);
deleteEcosTurnout(etd);
dialog.dispose();
}
});
container.add(remember);
container.setAlignmentX(Component.CENTER_ALIGNMENT);
container.setAlignmentY(Component.CENTER_ALIGNMENT);
dialog.getContentPane().add(container);
dialog.pack();
dialog.setModal(true);
dialog.setVisible(true);
}
}
}
}
super.propertyChange(e);
}
use of jmri.jmrix.ecos.utilities.RemoveObjectFromEcos in project JMRI by JMRI.
the class EcosLocoTableAction method createModel.
@Override
protected void createModel() {
m = new BeanTableDataModel() {
//We have to set a manager first off, but this gets replaced.
@Override
protected EcosLocoAddressManager getManager() {
return locoManager;
}
protected String getRosterAttribute() {
return rosterAttribute;
}
@Override
public String getValue(String s) {
return "Set";
}
@Override
protected String getMasterClassName() {
return getClassName();
}
@Override
public void clickOn(jmri.NamedBean t) {
}
@Override
protected synchronized void updateNameList() {
// first, remove listeners from the individual objects
if (ecosObjectIdList != null) {
for (int i = 0; i < ecosObjectIdList.size(); i++) {
// if object has been deleted, it's not here; ignore it
jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(i));
if (b != null) {
b.removePropertyChangeListener(this);
}
}
}
ecosObjectIdList = getManager().getEcosObjectList();
// and add them back in
for (int i = 0; i < ecosObjectIdList.size(); i++) {
getByEcosObject(ecosObjectIdList.get(i)).addPropertyChangeListener(this);
}
}
@Override
public void propertyChange(java.beans.PropertyChangeEvent e) {
updateNameList();
if (e.getPropertyName().equals("length")) {
// a new jmri.jmrix.ecos.EcosLocoAddressManager is available in the manager
updateNameList();
fireTableDataChanged();
} else if (matchPropertyName(e)) {
// a value changed. Find it, to avoid complete redraw
String object = ((jmri.jmrix.ecos.EcosLocoAddress) e.getSource()).getEcosObject();
// since we can add columns, the entire row is marked as updated
int row = ecosObjectIdList.indexOf(object);
fireTableRowsUpdated(row, row);
}
}
@Override
public int getColumnCount() {
return STOP + 1;
}
@Override
public void setValueAt(Object value, int row, int col) {
if (col == COMMENTCOL) {
RosterEntry re;
String ecosObjectNo = ecosObjectIdList.get(row);
if (value == null) {
return;
} else if (value instanceof RosterEntry) {
re = (RosterEntry) value;
if ((re.getAttribute(getRosterAttribute()) != null && !re.getAttribute(getRosterAttribute()).equals(""))) {
JOptionPane.showMessageDialog(f, ecosObjectNo + " This roster entry already has an ECOS loco assigned to it ");
log.error(ecosObjectNo + " This roster entry already has an ECOS loco assigned to it ");
return;
}
String oldRoster = getByEcosObject(ecosObjectNo).getRosterId();
RosterEntry oldre;
if (oldRoster != null) {
oldre = Roster.getDefault().getEntryForId(oldRoster);
if (oldre != null) {
oldre.deleteAttribute(getRosterAttribute());
}
}
re.putAttribute(getRosterAttribute(), ecosObjectNo);
getByEcosObject(ecosObjectNo).setRosterId(re.getId());
re.updateFile();
} else if (value instanceof String) {
List<RosterEntry> r = Roster.getDefault().getEntriesWithAttributeKeyValue(getRosterAttribute(), ecosObjectNo);
if (r.isEmpty()) {
r.get(0).deleteAttribute(getRosterAttribute());
getByEcosObject(ecosObjectNo).setRosterId(null);
r.get(0).updateFile();
}
}
Roster.getDefault().writeRoster();
} else if (col == ADDTOROSTERCOL) {
addToRoster(row, col);
} else if (col == STOP) {
stopLoco(row, col);
} else if (col == DELETECOL) {
// button fired, delete Bean
deleteLoco(row, col);
} else if (col == USERNAMECOL) {
jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
EcosMessage m = new EcosMessage("request(" + b.getEcosObject() + ", control, force)");
adaptermemo.getTrafficController().sendEcosMessage(m, null);
m = new EcosMessage("set(" + b.getEcosObject() + ", name[\"" + (String) value + "\"])");
adaptermemo.getTrafficController().sendEcosMessage(m, null);
m = new EcosMessage("release(" + b.getEcosObject() + ", control)");
adaptermemo.getTrafficController().sendEcosMessage(m, null);
}
}
/**
* {@inheritDoc }
*/
@Override
@Deprecated
public JTable makeJTable(TableSorter sorter) {
return this.makeJTable((TableModel) sorter);
}
@Override
public JTable makeJTable(@Nonnull String name, @Nonnull TableModel model, @Nullable RowSorter sorter) {
JTable table = this.makeJTable(model);
table.setName(name);
table.setRowSorter(sorter);
return table;
}
private JTable makeJTable(@Nonnull TableModel model) {
JTable table = new JTable(model) {
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
if (column == COMMENTCOL) {
return getRenderer(row);
} else {
return super.getCellRenderer(row, column);
}
}
@Override
public TableCellEditor getCellEditor(int row, int column) {
if (column == COMMENTCOL) {
return getEditor(row);
} else {
return super.getCellEditor(row, column);
}
}
TableCellRenderer getRenderer(int row) {
TableCellRenderer retval = rendererMap.get(ecosObjectIdList.get(row));
if (retval == null) {
jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
RosterEntry re = null;
if (b != null) {
re = Roster.getDefault().getEntryForId(b.getRosterId());
}
retval = new RosterBoxRenderer(re);
rendererMap.put(ecosObjectIdList.get(row), retval);
}
return retval;
}
Hashtable<Object, TableCellRenderer> rendererMap = new Hashtable<>();
TableCellEditor getEditor(int row) {
TableCellEditor retval = editorMap.get(ecosObjectIdList.get(row));
if (retval == null) {
jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
RosterEntry re = null;
if (b != null) {
re = Roster.getDefault().getEntryForId(b.getRosterId());
}
GlobalRosterEntryComboBox cb = new GlobalRosterEntryComboBox();
cb.setNonSelectedItem(" ");
if (re == null) {
cb.setSelectedIndex(0);
} else {
cb.setSelectedItem(re);
}
// create a new one with right aspects
retval = new RosterComboBoxEditor(cb);
editorMap.put(ecosObjectIdList.get(row), retval);
}
return retval;
}
Hashtable<Object, TableCellEditor> editorMap = new Hashtable<>();
};
table.getTableHeader().setReorderingAllowed(true);
table.setColumnModel(new XTableColumnModel());
table.createDefaultColumnsFromModel();
addMouseListenerToHeader(table);
return table;
}
/**
* Is this property event announcing a change this table should
* display?
* <P>
* Note that events will come both from the
* jmri.jmrix.ecos.EcosLocoAddressManagers and also from the manager
*/
@Override
protected boolean matchPropertyName(java.beans.PropertyChangeEvent e) {
if (!showLocoMonitor && (e.getPropertyName().equals("Speed") || e.getPropertyName().equals("Direction"))) {
return false;
}
return true;
}
@Override
public String getColumnName(int col) {
switch(col) {
case SYSNAMECOL:
return "ECoS Object Id";
case USERNAMECOL:
return "ECoS Descritpion";
case VALUECOL:
return "ECoS Address";
case COMMENTCOL:
return "JMRI Roster Id";
case DELETECOL:
return "Delete";
case PROTOCOL:
return "ECOS Protocol";
case ADDTOROSTERCOL:
return "Add to Roster";
case SPEEDDIR:
return "Speed Direction";
case STOP:
return "Stop";
default:
return "unknown";
}
}
@Override
public Class<?> getColumnClass(int col) {
switch(col) {
case SYSNAMECOL:
case USERNAMECOL:
case VALUECOL:
case PROTOCOL:
case SPEEDDIR:
return String.class;
case ADDTOROSTERCOL:
case DELETECOL:
case STOP:
return JButton.class;
case COMMENTCOL:
return JComboBox.class;
default:
return null;
}
}
@Override
public boolean isCellEditable(int row, int col) {
switch(col) {
case COMMENTCOL:
return true;
case ADDTOROSTERCOL:
jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
if (b.getRosterId() == null || b.getRosterId().equals("")) {
return true;
} else {
return false;
}
case USERNAMECOL:
case DELETECOL:
case STOP:
return true;
default:
return false;
}
}
@Override
public int getPreferredWidth(int col) {
switch(col) {
case SYSNAMECOL:
return new JTextField(5).getPreferredSize().width;
case COMMENTCOL:
return new JTextField(20).getPreferredSize().width;
case USERNAMECOL:
return new JTextField(20).getPreferredSize().width;
case // not actually used due to the configureTable, setColumnToHoldButton, configureButton
ADDTOROSTERCOL:
return new JTextField(12).getPreferredSize().width;
case // not actually used due to the configureTable, setColumnToHoldButton, configureButton
STOP:
return new JTextField(6).getPreferredSize().width;
case VALUECOL:
return new JTextField(5).getPreferredSize().width;
case SPEEDDIR:
return new JTextField(10).getPreferredSize().width;
case PROTOCOL:
return new JTextField(5).getPreferredSize().width;
default:
//log.warn("Unexpected column in getPreferredWidth: "+col);
return super.getPreferredWidth(col);
}
}
@Override
public void configureTable(JTable tbl) {
table = tbl;
setColumnToHoldButton(table, ADDTOROSTERCOL, new JButton("Add to Roster"));
setColumnToHoldButton(table, STOP, stopButton());
super.configureTable(table);
XTableColumnModel columnModel = (XTableColumnModel) table.getColumnModel();
TableColumn column = columnModel.getColumnByModelIndex(SPEEDDIR);
columnModel.setColumnVisible(column, false);
column = columnModel.getColumnByModelIndex(STOP);
columnModel.setColumnVisible(column, false);
}
@Override
public NamedBean getBySystemName(String name) {
return null;
}
@Override
public NamedBean getByUserName(String name) {
return null;
}
@Override
public synchronized void dispose() {
showLocoMonitor = false;
getManager().removePropertyChangeListener(this);
if (ecosObjectIdList != null) {
for (int i = 0; i < ecosObjectIdList.size(); i++) {
jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(i));
if (b != null) {
b.removePropertyChangeListener(this);
}
}
}
}
protected void deleteLoco(final int row, int col) {
if (row >= ecosObjectIdList.size()) {
log.debug("row is greater than list size");
return;
}
jmri.jmrix.ecos.EcosLocoAddress b = getByEcosObject(ecosObjectIdList.get(row));
final JDialog dialog = new JDialog();
dialog.setTitle("Remove Loco From ECOS");
dialog.setLocation(300, 200);
dialog.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
container.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JLabel question = new JLabel("Are you sure that you want to remove loco " + b.getEcosDescription() + " from the ECOS ?");
question.setAlignmentX(Component.CENTER_ALIGNMENT);
container.add(question);
JButton yesButton = new JButton("Yes");
JButton noButton = new JButton("No");
JPanel button = new JPanel();
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.add(yesButton);
button.add(noButton);
container.add(button);
noButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
yesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RemoveObjectFromEcos removeObjectFromEcos = new RemoveObjectFromEcos();
removeObjectFromEcos.removeObjectFromEcos(ecosObjectIdList.get(row), adaptermemo.getTrafficController());
dialog.dispose();
}
});
container.setAlignmentX(Component.CENTER_ALIGNMENT);
container.setAlignmentY(Component.CENTER_ALIGNMENT);
dialog.getContentPane().add(container);
dialog.pack();
dialog.setModal(true);
dialog.setVisible(true);
}
@Override
public int getRowCount() {
return ecosObjectIdList.size();
}
@Override
public Object getValueAt(int row, int col) {
if (row >= ecosObjectIdList.size()) {
log.debug("row is greater than list size");
return null;
}
jmri.jmrix.ecos.EcosLocoAddress b;
switch(col) {
case SYSNAMECOL:
return ecosObjectIdList.get(row);
case // return user name
USERNAMECOL:
// sometimes, the TableSorter invokes this on rows that no longer exist, so we check
b = getByEcosObject(ecosObjectIdList.get(row));
return (b != null) ? b.getEcosDescription() : null;
case //
VALUECOL:
b = getByEcosObject(ecosObjectIdList.get(row));
return (b != null) ? b.getNumber() : null;
case COMMENTCOL:
b = getByEcosObject(ecosObjectIdList.get(row));
RosterEntry re = null;
if (b != null) {
re = Roster.getDefault().getEntryForId(b.getRosterId());
}
GlobalRosterEntryComboBox cb = (GlobalRosterEntryComboBox) table.getCellRenderer(row, col);
if (re == null) {
cb.setSelectedIndex(0);
} else {
cb.setSelectedItem(re);
}
return re;
case PROTOCOL:
b = getByEcosObject(ecosObjectIdList.get(row));
return (b != null) ? b.getECOSProtocol() : null;
case //
ADDTOROSTERCOL:
b = getByEcosObject(ecosObjectIdList.get(row));
if (b.getRosterId() == null || b.getRosterId().equals("")) {
return "Add To Roster";
} else {
return " ";
}
case STOP:
return "Stop";
case SPEEDDIR:
b = getByEcosObject(ecosObjectIdList.get(row));
return (b != null) ? (b.getDirectionAsString() + " : " + b.getSpeed()) : null;
case //
DELETECOL:
return Bundle.getMessage("ButtonDelete");
default:
//log.error("internal state inconsistent with table requst for "+row+" "+col);
return null;
}
}
@Override
protected String getBeanType() {
return "Ecos Loco";
}
@Override
protected void showPopup(MouseEvent e) {
}
};
}
Aggregations