private void updateNumCars() { String totalNumber = Integer.toString(CarManager.instance().getNumEntries()); if (showAllCars) { numCars.setText(totalNumber); return; } String showNumber = Integer.toString(getSortByList().size()); numCars.setText(showNumber + "/" + totalNumber); }
/** * Construct this Entry from XML. This member has to remain synchronized with the detailed DTD in * operations-cars.dtd * * @param e Car XML element */ public Car(org.jdom2.Element e) { super(e); loaded = true; org.jdom2.Attribute a; if ((a = e.getAttribute(Xml.PASSENGER)) != null) { _passenger = a.getValue().equals(Xml.TRUE); } if ((a = e.getAttribute(Xml.HAZARDOUS)) != null) { _hazardous = a.getValue().equals(Xml.TRUE); } if ((a = e.getAttribute(Xml.CABOOSE)) != null) { _caboose = a.getValue().equals(Xml.TRUE); } if ((a = e.getAttribute(Xml.FRED)) != null) { _fred = a.getValue().equals(Xml.TRUE); } if ((a = e.getAttribute(Xml.UTILITY)) != null) { _utility = a.getValue().equals(Xml.TRUE); } if ((a = e.getAttribute(Xml.KERNEL)) != null) { Kernel k = CarManager.instance().getKernelByName(a.getValue()); if (k != null) { setKernel(k); if ((a = e.getAttribute(Xml.LEAD_KERNEL)) != null && a.getValue().equals(Xml.TRUE)) { _kernel.setLead(this); } } else { log.error("Kernel " + a.getValue() + " does not exist"); } } if ((a = e.getAttribute(Xml.LOAD)) != null) { _loadName = a.getValue(); } if ((a = e.getAttribute(Xml.LOAD_FROM_STAGING)) != null && a.getValue().equals(Xml.TRUE)) { setLoadGeneratedFromStaging(true); } if ((a = e.getAttribute(Xml.WAIT)) != null) { try { _wait = Integer.parseInt(a.getValue()); } catch (NumberFormatException nfe) { log.error("Wait count ({}) for car ({}) isn't a valid number!", a.getValue(), toString()); } } if ((a = e.getAttribute(Xml.PICKUP_SCHEDULE_ID)) != null) { _pickupScheduleId = a.getValue(); } if ((a = e.getAttribute(Xml.SCHEDULE_ID)) != null) { _scheduleId = a.getValue(); } if ((a = e.getAttribute(Xml.NEXT_LOAD)) != null) { _nextLoadName = a.getValue(); } if ((a = e.getAttribute(Xml.NEXT_WAIT)) != null) { try { _nextWait = Integer.parseInt(a.getValue()); } catch (NumberFormatException nfe) { log.error( "Next wait count ({}) for car ({}) isn't a valid number!", a.getValue(), toString()); } } if ((a = e.getAttribute(Xml.NEXT_PICKUP_SCHEDULE_ID)) != null) { _nextPickupScheduleId = a.getValue(); } if ((a = e.getAttribute(Xml.NEXT_DEST_ID)) != null) { setFinalDestination(LocationManager.instance().getLocationById(a.getValue())); } if (getFinalDestination() != null && (a = e.getAttribute(Xml.NEXT_DEST_TRACK_ID)) != null) { setFinalDestinationTrack(getFinalDestination().getTrackById(a.getValue())); } if ((a = e.getAttribute(Xml.PREVIOUS_NEXT_DEST_ID)) != null) { setPreviousFinalDestination(LocationManager.instance().getLocationById(a.getValue())); } if (getPreviousFinalDestination() != null && (a = e.getAttribute(Xml.PREVIOUS_NEXT_DEST_TRACK_ID)) != null) { setPreviousFinalDestinationTrack(getPreviousFinalDestination().getTrackById(a.getValue())); } if ((a = e.getAttribute(Xml.PREVIOUS_SCHEDULE_ID)) != null) { setPreviousScheduleId(a.getValue()); } if ((a = e.getAttribute(Xml.RWE_DEST_ID)) != null) { _rweDestination = LocationManager.instance().getLocationById(a.getValue()); } if (_rweDestination != null && (a = e.getAttribute(Xml.RWE_DEST_TRACK_ID)) != null) { _rweDestTrack = _rweDestination.getTrackById(a.getValue()); } if ((a = e.getAttribute(Xml.RWE_LOAD)) != null) { _rweLoadName = a.getValue(); } addPropertyChangeListeners(); }
/** * Frame for adding and editing the car roster for operations. * * @author Bob Jacobsen Copyright (C) 2001 * @author Daniel Boudreau Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 * @version $Revision$ */ public class CarsTableFrame extends OperationsFrame implements TableModelListener { /** */ private static final long serialVersionUID = -5469624100056817632L; CarsTableModel carsTableModel; JTable carsTable; boolean showAllCars; String locationName; String trackName; CarManager carManager = CarManager.instance(); // labels JLabel numCars = new JLabel(); JLabel textCars = new JLabel(Bundle.getMessage("cars")); JLabel textSep1 = new JLabel(" "); // radio buttons JRadioButton sortByNumber = new JRadioButton(Bundle.getMessage("Number")); JRadioButton sortByRoad = new JRadioButton(Bundle.getMessage("Road")); JRadioButton sortByType = new JRadioButton(Bundle.getMessage("Type")); JRadioButton sortByColor = new JRadioButton(Bundle.getMessage("Color")); JRadioButton sortByLoad = new JRadioButton(Bundle.getMessage("Load")); JRadioButton sortByKernel = new JRadioButton(Bundle.getMessage("Kernel")); JRadioButton sortByLocation = new JRadioButton(Bundle.getMessage("Location")); JRadioButton sortByDestination = new JRadioButton(Bundle.getMessage("Destination")); JRadioButton sortByFinalDestination = new JRadioButton(Bundle.getMessage("FD")); JRadioButton sortByRwe = new JRadioButton(Bundle.getMessage("RWE")); JRadioButton sortByTrain = new JRadioButton(Bundle.getMessage("Train")); JRadioButton sortByMoves = new JRadioButton(Bundle.getMessage("Moves")); JRadioButton sortByBuilt = new JRadioButton(Bundle.getMessage("Built")); JRadioButton sortByOwner = new JRadioButton(Bundle.getMessage("Owner")); JRadioButton sortByValue = new JRadioButton(Setup.getValueLabel()); JRadioButton sortByRfid = new JRadioButton(Setup.getRfidLabel()); JRadioButton sortByWait = new JRadioButton(Bundle.getMessage("Wait")); JRadioButton sortByPickup = new JRadioButton(Bundle.getMessage("Pickup")); JRadioButton sortByLast = new JRadioButton(Bundle.getMessage("Last")); ButtonGroup group = new ButtonGroup(); // major buttons JButton addButton = new JButton(Bundle.getMessage("Add")); JButton findButton = new JButton(Bundle.getMessage("Find")); JButton saveButton = new JButton(Bundle.getMessage("Save")); JTextField findCarTextBox = new JTextField(6); public CarsTableFrame(boolean showAllCars, String locationName, String trackName) { super(Bundle.getMessage("TitleCarsTable")); this.showAllCars = showAllCars; this.locationName = locationName; this.trackName = trackName; // general GUI configuration getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); // Set up the table in a Scroll Pane.. carsTableModel = new CarsTableModel(showAllCars, locationName, trackName); TableSorter sorter = new TableSorter(carsTableModel); carsTable = new JTable(sorter); sorter.setTableHeader(carsTable.getTableHeader()); JScrollPane carsPane = new JScrollPane(carsTable); carsPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); carsTableModel.initTable(carsTable, this); // load the number of cars and listen for changes updateNumCars(); carsTableModel.addTableModelListener(this); // Set up the control panel // row 1 JPanel cp1 = new JPanel(); cp1.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("SortBy"))); cp1.add(sortByNumber); cp1.add(sortByRoad); cp1.add(sortByType); JPanel clp = new JPanel(); clp.setBorder(BorderFactory.createTitledBorder("")); clp.add(sortByColor); clp.add(sortByLoad); cp1.add(clp); cp1.add(sortByKernel); cp1.add(sortByLocation); JPanel destp = new JPanel(); destp.setBorder(BorderFactory.createTitledBorder("")); destp.add(sortByDestination); destp.add(sortByFinalDestination); destp.add(sortByRwe); cp1.add(destp); cp1.add(sortByTrain); JPanel movep = new JPanel(); movep.setBorder(BorderFactory.createTitledBorder("")); movep.add(sortByMoves); movep.add(sortByBuilt); movep.add(sortByOwner); if (Setup.isValueEnabled()) { movep.add(sortByValue); } if (Setup.isRfidEnabled()) { movep.add(sortByRfid); } if (ScheduleManager.instance().numEntries() > 0) { movep.add(sortByWait); movep.add(sortByPickup); } movep.add(sortByLast); cp1.add(movep); // row 2 JPanel cp2 = new JPanel(); cp2.setLayout(new BoxLayout(cp2, BoxLayout.X_AXIS)); JPanel cp2Add = new JPanel(); cp2Add.setBorder(BorderFactory.createTitledBorder("")); cp2Add.add(numCars); cp2Add.add(textCars); cp2Add.add(textSep1); cp2Add.add(addButton); cp2.add(cp2Add); JPanel cp2Find = new JPanel(); cp2Find.setBorder(BorderFactory.createTitledBorder("")); findButton.setToolTipText(Bundle.getMessage("findCar")); findCarTextBox.setToolTipText(Bundle.getMessage("findCar")); cp2Find.add(findButton); cp2Find.add(findCarTextBox); cp2.add(cp2Find); JPanel cp2Save = new JPanel(); cp2Save.setBorder(BorderFactory.createTitledBorder("")); cp2Save.add(saveButton); cp2.add(cp2Save); // place controls in scroll pane JPanel controlPanel = new JPanel(); controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS)); controlPanel.add(cp1); controlPanel.add(cp2); // some tool tips sortByFinalDestination.setToolTipText(Bundle.getMessage("FinalDestination")); sortByRwe.setToolTipText(Bundle.getMessage("ReturnWhenEmpty")); sortByPickup.setToolTipText(Bundle.getMessage("TipPickup")); sortByLast.setToolTipText(Bundle.getMessage("TipLastMoved")); JScrollPane controlPane = new JScrollPane(controlPanel); getContentPane().add(carsPane); getContentPane().add(controlPane); // setup buttons addButtonAction(addButton); addButtonAction(findButton); addButtonAction(saveButton); sortByNumber.setSelected(true); addRadioButtonAction(sortByNumber); addRadioButtonAction(sortByRoad); addRadioButtonAction(sortByType); addRadioButtonAction(sortByColor); addRadioButtonAction(sortByLoad); addRadioButtonAction(sortByKernel); addRadioButtonAction(sortByLocation); addRadioButtonAction(sortByDestination); addRadioButtonAction(sortByFinalDestination); addRadioButtonAction(sortByRwe); addRadioButtonAction(sortByTrain); addRadioButtonAction(sortByMoves); addRadioButtonAction(sortByBuilt); addRadioButtonAction(sortByOwner); addRadioButtonAction(sortByValue); addRadioButtonAction(sortByRfid); addRadioButtonAction(sortByWait); addRadioButtonAction(sortByPickup); addRadioButtonAction(sortByLast); group.add(sortByNumber); group.add(sortByRoad); group.add(sortByType); group.add(sortByColor); group.add(sortByLoad); group.add(sortByKernel); group.add(sortByLocation); group.add(sortByDestination); group.add(sortByFinalDestination); group.add(sortByRwe); group.add(sortByTrain); group.add(sortByMoves); group.add(sortByBuilt); group.add(sortByOwner); group.add(sortByValue); group.add(sortByRfid); group.add(sortByWait); group.add(sortByPickup); group.add(sortByLast); // sort by location if (!showAllCars) { sortByLocation.doClick(); if (locationName != null) { String title = Bundle.getMessage("TitleCarsTable") + " " + locationName; if (trackName != null) { title = title + " " + trackName; } setTitle(title); } } // build menu JMenuBar menuBar = new JMenuBar(); JMenu toolMenu = new JMenu(Bundle.getMessage("Tools")); toolMenu.add( new CarRosterMenu(Bundle.getMessage("TitleCarRoster"), CarRosterMenu.MAINMENU, this)); toolMenu.add(new ShowCheckboxesCarsTableAction(carsTableModel)); toolMenu.add(new ResetCheckboxesCarsTableAction(carsTableModel)); toolMenu.add(new ModifyLocationsAction()); toolMenu.add(new TrainsByCarTypeAction()); toolMenu.add(new CarsSetFrameAction(carsTable)); menuBar.add(toolMenu); menuBar.add(new jmri.jmrit.operations.OperationsMenu()); setJMenuBar(menuBar); addHelpMenu("package.jmri.jmrit.operations.Operations_Cars", true); // NOI18N initMinimumSize(); addHorizontalScrollBarKludgeFix(controlPane, controlPanel); // create ShutDownTasks createShutDownTask(); } public void radioButtonActionPerformed(java.awt.event.ActionEvent ae) { log.debug("radio button activated"); if (ae.getSource() == sortByNumber) { carsTableModel.setSort(carsTableModel.SORTBY_NUMBER); } if (ae.getSource() == sortByRoad) { carsTableModel.setSort(carsTableModel.SORTBY_ROAD); } if (ae.getSource() == sortByType) { carsTableModel.setSort(carsTableModel.SORTBY_TYPE); } if (ae.getSource() == sortByColor) { carsTableModel.setSort(carsTableModel.SORTBY_COLOR); } if (ae.getSource() == sortByLoad) { carsTableModel.setSort(carsTableModel.SORTBY_LOAD); } if (ae.getSource() == sortByKernel) { carsTableModel.setSort(carsTableModel.SORTBY_KERNEL); } if (ae.getSource() == sortByLocation) { carsTableModel.setSort(carsTableModel.SORTBY_LOCATION); } if (ae.getSource() == sortByDestination) { carsTableModel.setSort(carsTableModel.SORTBY_DESTINATION); } if (ae.getSource() == sortByFinalDestination) { carsTableModel.setSort(carsTableModel.SORTBY_FINALDESTINATION); } if (ae.getSource() == sortByRwe) { carsTableModel.setSort(carsTableModel.SORTBY_RWE); } if (ae.getSource() == sortByTrain) { carsTableModel.setSort(carsTableModel.SORTBY_TRAIN); } if (ae.getSource() == sortByMoves) { carsTableModel.setSort(carsTableModel.SORTBY_MOVES); } if (ae.getSource() == sortByBuilt) { carsTableModel.setSort(carsTableModel.SORTBY_BUILT); } if (ae.getSource() == sortByOwner) { carsTableModel.setSort(carsTableModel.SORTBY_OWNER); } if (ae.getSource() == sortByValue) { carsTableModel.setSort(carsTableModel.SORTBY_VALUE); } if (ae.getSource() == sortByRfid) { carsTableModel.setSort(carsTableModel.SORTBY_RFID); } if (ae.getSource() == sortByWait) { carsTableModel.setSort(carsTableModel.SORTBY_WAIT); } if (ae.getSource() == sortByPickup) { carsTableModel.setSort(carsTableModel.SORTBY_PICKUP); } if (ae.getSource() == sortByLast) { carsTableModel.setSort(carsTableModel.SORTBY_LAST); } // clear any sorts by column clearTableSort(carsTable); } public List<RollingStock> getSortByList() { return carsTableModel.sysList; } CarEditFrame f = null; // add, find or save button public void buttonActionPerformed(java.awt.event.ActionEvent ae) { // log.debug("car button activated"); if (ae.getSource() == findButton) { int rowindex = carsTableModel.findCarByRoadNumber(findCarTextBox.getText()); if (rowindex < 0) { JOptionPane.showMessageDialog( this, MessageFormat.format( Bundle.getMessage("carWithRoadNumNotFound"), new Object[] {findCarTextBox.getText()}), Bundle.getMessage("carCouldNotFind"), JOptionPane.INFORMATION_MESSAGE); return; } // clear any sorts by column clearTableSort(carsTable); carsTable.changeSelection(rowindex, 0, false, false); return; } if (ae.getSource() == addButton) { if (f != null) { f.dispose(); } f = new CarEditFrame(); f.initComponents(); f.setTitle(Bundle.getMessage("TitleCarAdd")); } if (ae.getSource() == saveButton) { if (carsTable.isEditing()) { log.debug("cars table edit true"); carsTable.getCellEditor().stopCellEditing(); } OperationsXml.save(); saveTableDetails(carsTable); if (Setup.isCloseWindowOnSaveEnabled()) { dispose(); } } } protected int[] getCurrentTableColumnWidths() { TableColumnModel tcm = carsTable.getColumnModel(); int[] widths = new int[tcm.getColumnCount()]; for (int i = 0; i < tcm.getColumnCount(); i++) { widths[i] = tcm.getColumn(i).getWidth(); } return widths; } public void dispose() { carsTableModel.removeTableModelListener(this); carsTableModel.dispose(); if (f != null) { f.dispose(); } super.dispose(); } public void tableChanged(TableModelEvent e) { if (Control.showProperty) { log.debug("Table changed"); } updateNumCars(); } private void updateNumCars() { String totalNumber = Integer.toString(CarManager.instance().getNumEntries()); if (showAllCars) { numCars.setText(totalNumber); return; } String showNumber = Integer.toString(getSortByList().size()); numCars.setText(showNumber + "/" + totalNumber); } private static final Logger log = LoggerFactory.getLogger(CarsTableFrame.class.getName()); }