use of jmri.jmrit.operations.routes.RouteLocation in project JMRI by JMRI.
the class ExportTrains method writeFile.
public void writeFile(String name) {
log.debug("writeFile {}", name);
// This is taken in large part from "Java and XML" page 368
File file = findFile(name);
if (file == null) {
file = new File(name);
}
PrintWriter fileOut = null;
try {
fileOut = new // NOI18N
PrintWriter(// NOI18N
new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")), // NOI18N
true);
} catch (IOException e) {
log.error("Can not open export cars CSV file: " + file.getName());
return;
}
// create header
String header = Bundle.getMessage("Name") + del + Bundle.getMessage("Description") + del + Bundle.getMessage("Time") + del + Bundle.getMessage("Route") + del + Bundle.getMessage("Departs") + del + Bundle.getMessage("Terminates") + del + Bundle.getMessage("Status") + del + Bundle.getMessage("Comment");
fileOut.println(header);
int count = 0;
for (Train train : TrainManager.instance().getTrainsByTimeList()) {
if (!train.isBuildEnabled())
continue;
count++;
String routeName = "";
if (train.getRoute() != null)
routeName = train.getRoute().getName();
String line = ESC + train.getName() + ESC + del + ESC + train.getDescription() + ESC + del + ESC + train.getDepartureTime() + ESC + del + ESC + routeName + ESC + del + ESC + train.getTrainDepartsName() + ESC + del + ESC + train.getTrainTerminatesName() + ESC + del + ESC + train.getStatus() + ESC + del + ESC + train.getComment() + ESC;
fileOut.println(line);
}
fileOut.println();
// second create header for built trains
header = Bundle.getMessage("Name") + del + Bundle.getMessage("csvParameters") + del + Bundle.getMessage("Attributes");
fileOut.println(header);
for (Train train : TrainManager.instance().getTrainsByTimeList()) {
if (!train.isBuildEnabled())
continue;
if (train.isBuilt() && train.getRoute() != null) {
StringBuffer line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("Route"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + rl.getName() + ESC);
}
fileOut.println(line);
line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("csvArrivalTime"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + train.getExpectedArrivalTime(rl) + ESC);
}
fileOut.println(line);
line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("csvDepartureTime"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + train.getExpectedDepartureTime(rl) + ESC);
}
fileOut.println(line);
line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("csvTrainDirection"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + rl.getTrainDirectionString() + ESC);
}
fileOut.println(line);
line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("csvTrainWeight"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + train.getTrainWeight(rl) + ESC);
}
fileOut.println(line);
line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("csvTrainLength"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + train.getTrainLength(rl) + ESC);
}
fileOut.println(line);
line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("Cars"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + train.getNumberCarsInTrain(rl) + ESC);
}
fileOut.println(line);
line = new StringBuffer(ESC + train.getName() + ESC + del + Bundle.getMessage("csvEmpties"));
for (RouteLocation rl : train.getRoute().getLocationsBySequenceList()) {
line.append(del + ESC + train.getNumberEmptyCarsInTrain(rl) + ESC);
}
fileOut.println(line);
fileOut.println();
}
}
fileOut.flush();
fileOut.close();
log.info("Exported {} trains to file {}", count, defaultOperationsFilename());
JOptionPane.showMessageDialog(null, MessageFormat.format(Bundle.getMessage("ExportedTrainsToFile"), new Object[] { count, defaultOperationsFilename() }), Bundle.getMessage("ExportComplete"), JOptionPane.INFORMATION_MESSAGE);
}
use of jmri.jmrit.operations.routes.RouteLocation in project JMRI by JMRI.
the class Action method getFormatedMessage.
/**
* Formats a message using fixed arguments in the following order:
* <p>
* action name, train name, route location name, automation name, goto item id,
* train schedule day.
* @param message the string to be formated
*
* @return formated message
*/
public String getFormatedMessage(String message) {
String trainName = "";
Train train = getAutomationItem().getTrain();
if (train != null) {
trainName = " " + train.getName();
}
String routeLocationName = "";
RouteLocation rl = getAutomationItem().getRouteLocation();
if (rl != null) {
routeLocationName = " " + rl.getName();
}
String automationName = "";
Automation automation = getAutomationItem().getAutomationToRun();
if (automation != null) {
automationName = " " + automation.getName();
}
String itemId = "";
AutomationItem item = getAutomationItem().getGotoAutomationItem();
if (item != null) {
itemId = " " + item.getId();
}
String day = "";
TrainSchedule trainSchedule = getAutomationItem().getTrainSchedule();
if (trainSchedule != null) {
day = " " + trainSchedule.getName();
}
return MessageFormat.format(message, new Object[] { getName(), trainName, routeLocationName, automationName, itemId, day });
}
use of jmri.jmrit.operations.routes.RouteLocation in project JMRI by JMRI.
the class MoveTrainAction method doAction.
@Override
public void doAction() {
if (getAutomationItem() != null) {
Train train = getAutomationItem().getTrain();
if (train != null && train.getRoute() != null && train.isBuilt()) {
setRunning(true);
RouteLocation rl = getAutomationItem().getRouteLocation();
if (rl != null) {
finishAction(train.move(rl));
} else {
train.move();
finishAction(true);
}
} else {
finishAction(false);
}
}
}
use of jmri.jmrit.operations.routes.RouteLocation in project JMRI by JMRI.
the class WaitTrainAction method trainUpdate.
/**
* Wait for train to build and no location, or train to arrive at location,
* or train build to be deselected.
*
*/
private void trainUpdate(PropertyChangeEvent evt) {
if (getAutomationItem() != null) {
if (evt.getPropertyName().equals(Train.TRAIN_MOVE_COMPLETE_CHANGED_PROPERTY) || (evt.getPropertyName().equals(Train.BUILT_CHANGED_PROPERTY) && (boolean) evt.getNewValue() == true)) {
Train train = getAutomationItem().getTrain();
RouteLocation rl = getAutomationItem().getRouteLocation();
if (rl != null && rl != train.getCurrentLocation()) {
// haven't reached this location continue waiting
return;
}
train.removePropertyChangeListener(this);
finishAction(true);
} else if (evt.getPropertyName().equals(Train.BUILD_CHANGED_PROPERTY) && (boolean) evt.getNewValue() == false) {
Train train = getAutomationItem().getTrain();
train.removePropertyChangeListener(this);
finishAction(true);
}
}
}
use of jmri.jmrit.operations.routes.RouteLocation in project JMRI by JMRI.
the class YardmasterByTrackPanel method runUpdate.
@SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE", justification = "CarManager only provides Car Objects")
private void runUpdate() {
log.debug("run update");
removePropertyChangeListerners();
// reset the utility car counts
trainCommon.clearUtilityCarTypes();
checkBoxes.clear();
pTrack.removeAll();
boolean pickup = false;
boolean setout = false;
if (_track != null) {
pTrackPane.setBorder(BorderFactory.createTitledBorder(_track.getName()));
textTrackCommentPane.setText(_track.getComment());
textTrackCommentPane.setVisible(!_track.getComment().equals(Track.NONE));
textTrackCommentWorkPane.setText("");
for (Train train : trainManager.getTrainsArrivingThisLocationList(_track.getLocation())) {
JPanel pTrain = new JPanel();
pTrain.setLayout(new BoxLayout(pTrain, BoxLayout.Y_AXIS));
pTrain.setBorder(BorderFactory.createTitledBorder(MessageFormat.format(TrainSwitchListText.getStringScheduledWork(), new Object[] { train.getName(), train.getDescription() })));
// List locos first
List<Engine> engList = engManager.getByTrainBlockingList(train);
if (Setup.isPrintHeadersEnabled()) {
for (Engine engine : engList) {
if (engine.getTrack() == _track) {
JLabel header = new JLabel(Tab + trainCommon.getPickupEngineHeader());
setLabelFont(header);
pTrain.add(header);
break;
}
}
}
for (Engine engine : engList) {
if (engine.getTrack() == _track) {
engine.addPropertyChangeListener(this);
rollingStock.add(engine);
JCheckBox checkBox = new JCheckBox(trainCommon.pickupEngine(engine));
setCheckBoxFont(checkBox);
pTrain.add(checkBox);
checkBoxes.put(engine.getId(), checkBox);
pTrack.add(pTrain);
}
}
// now do locomotive set outs
if (Setup.isPrintHeadersEnabled()) {
for (Engine engine : engList) {
if (engine.getDestinationTrack() == _track) {
JLabel header = new JLabel(Tab + trainCommon.getDropEngineHeader());
setLabelFont(header);
pTrain.add(header);
break;
}
}
}
for (Engine engine : engList) {
if (engine.getDestinationTrack() == _track) {
engine.addPropertyChangeListener(this);
rollingStock.add(engine);
JCheckBox checkBox = new JCheckBox(trainCommon.dropEngine(engine));
setCheckBoxFont(checkBox);
pTrain.add(checkBox);
checkBoxes.put(engine.getId(), checkBox);
pTrack.add(pTrain);
}
}
// now cars
List<Car> carList = carManager.getByTrainDestinationList(train);
if (Setup.isPrintHeadersEnabled()) {
for (Car car : carList) {
if (car.getTrack() == _track && car.getRouteDestination() != car.getRouteLocation()) {
JLabel header = new JLabel(Tab + trainCommon.getPickupCarHeader(!IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK));
setLabelFont(header);
pTrain.add(header);
break;
}
}
}
// sort car pick ups by their destination
List<RouteLocation> routeList = train.getRoute().getLocationsBySequenceList();
for (RouteLocation rl : routeList) {
for (Car car : carList) {
if (car.getTrack() == _track && car.getRouteDestination() != car.getRouteLocation() && car.getRouteDestination() == rl) {
car.addPropertyChangeListener(this);
rollingStock.add(car);
String text;
if (car.isUtility()) {
text = trainCommon.pickupUtilityCars(carList, car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
if (text == null) {
// this car type has already been processed
continue;
}
} else {
text = trainCommon.pickupCar(car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
}
pickup = true;
JCheckBox checkBox = new JCheckBox(text);
setCheckBoxFont(checkBox);
pTrain.add(checkBox);
checkBoxes.put(car.getId(), checkBox);
pTrack.add(pTrain);
}
}
}
// now do car set outs
if (Setup.isPrintHeadersEnabled()) {
for (Car car : carList) {
if (car.getDestinationTrack() == _track && car.getRouteDestination() != car.getRouteLocation()) {
JLabel header = new JLabel(Tab + trainCommon.getDropCarHeader(!IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK));
setLabelFont(header);
pTrain.add(header);
break;
}
}
}
for (Car car : carList) {
if (car.getDestinationTrack() == _track && car.getRouteLocation() != car.getRouteDestination()) {
car.addPropertyChangeListener(this);
rollingStock.add(car);
String text;
if (car.isUtility()) {
text = trainCommon.setoutUtilityCars(carList, car, !TrainCommon.LOCAL, !IS_MANIFEST);
if (text == null) {
// this car type has already been processed
continue;
}
} else {
text = trainCommon.dropCar(car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
}
setout = true;
JCheckBox checkBox = new JCheckBox(text);
setCheckBoxFont(checkBox);
pTrain.add(checkBox);
checkBoxes.put(car.getId(), checkBox);
pTrack.add(pTrain);
}
}
// now do local car moves
if (Setup.isPrintHeadersEnabled()) {
for (Car car : carList) {
if ((car.getTrack() == _track || car.getDestinationTrack() == _track) && car.getRouteDestination() == car.getRouteLocation()) {
JLabel header = new JLabel(Tab + trainCommon.getLocalMoveHeader(!IS_MANIFEST));
setLabelFont(header);
pTrain.add(header);
break;
}
}
}
for (Car car : carList) {
if ((car.getTrack() == _track || car.getDestinationTrack() == _track) && car.getRouteLocation() != null && car.getRouteLocation() == car.getRouteDestination()) {
car.addPropertyChangeListener(this);
rollingStock.add(car);
String text;
if (car.isUtility()) {
text = trainCommon.setoutUtilityCars(carList, car, TrainCommon.LOCAL, !IS_MANIFEST);
if (text == null) {
// this car type has already been processed
continue;
}
} else {
text = trainCommon.localMoveCar(car, !IS_MANIFEST);
}
setout = true;
JCheckBox checkBox = new JCheckBox(text);
setCheckBoxFont(checkBox);
pTrain.add(checkBox);
checkBoxes.put(car.getId(), checkBox);
pTrack.add(pTrain);
}
}
pTrackPane.validate();
pTrain.setMaximumSize(new Dimension(2000, pTrain.getHeight()));
pTrain.revalidate();
}
// now do car holds
// we only need the cars on this track
List<RollingStock> rsList = carManager.getByTrainList();
List<Car> carList = new ArrayList<Car>();
for (RollingStock rs : rsList) {
if (rs.getTrack() != _track || rs.getRouteLocation() != null)
continue;
carList.add((Car) rs);
}
JPanel pHoldCars = new JPanel();
pHoldCars.setLayout(new BoxLayout(pHoldCars, BoxLayout.Y_AXIS));
pHoldCars.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("HoldCars")));
for (Car car : carList) {
String text;
if (car.isUtility()) {
String s = trainCommon.pickupUtilityCars(carList, car, !IS_MANIFEST, !TrainCommon.IS_TWO_COLUMN_TRACK);
if (s == null)
continue;
text = TrainSwitchListText.getStringHoldCar().split("\\{")[0] + s.trim();
} else {
text = MessageFormat.format(TrainSwitchListText.getStringHoldCar(), new Object[] { TrainCommon.padAndTruncateString(car.getRoadName(), CarRoads.instance().getMaxNameLength()), TrainCommon.padAndTruncateString(TrainCommon.splitString(car.getNumber()), Control.max_len_string_print_road_number), TrainCommon.padAndTruncateString(car.getTypeName().split("-")[0], CarTypes.instance().getMaxNameLength()), TrainCommon.padAndTruncateString(car.getLength() + TrainCommon.LENGTHABV, Control.max_len_string_length_name), TrainCommon.padAndTruncateString(car.getLoadName(), CarLoads.instance().getMaxNameLength()), TrainCommon.padAndTruncateString(_track.getName(), LocationManager.instance().getMaxTrackNameLength()), TrainCommon.padAndTruncateString(car.getColor(), CarColors.instance().getMaxNameLength()) });
}
JCheckBox checkBox = new JCheckBox(text);
setCheckBoxFont(checkBox);
pHoldCars.add(checkBox);
checkBoxes.put(car.getId(), checkBox);
pTrack.add(pHoldCars);
}
pTrackPane.validate();
pHoldCars.setMaximumSize(new Dimension(2000, pHoldCars.getHeight()));
pHoldCars.revalidate();
if (pickup && !setout) {
textTrackCommentWorkPane.setText(_track.getCommentPickup());
} else if (!pickup && setout) {
textTrackCommentWorkPane.setText(_track.getCommentSetout());
} else if (pickup && setout) {
textTrackCommentWorkPane.setText(_track.getCommentBoth());
}
textTrackCommentWorkPane.setVisible(!textTrackCommentWorkPane.getText().equals(""));
} else {
pTrackPane.setBorder(BorderFactory.createTitledBorder(""));
textTrackCommentPane.setVisible(false);
textTrackCommentWorkPane.setVisible(false);
}
}
Aggregations