001package jmri.jmrit.operations.trains.tools; 002 003import java.awt.Frame; 004import java.awt.event.ActionEvent; 005import java.io.IOException; 006import java.util.List; 007 008import javax.swing.AbstractAction; 009 010import org.slf4j.Logger; 011import org.slf4j.LoggerFactory; 012 013import jmri.InstanceManager; 014import jmri.jmrit.operations.rollingstock.cars.CarTypes; 015import jmri.jmrit.operations.setup.Control; 016import jmri.jmrit.operations.trains.Train; 017import jmri.jmrit.operations.trains.TrainCommon; 018import jmri.jmrit.operations.trains.TrainManager; 019import jmri.util.davidflanagan.HardcopyWriter; 020 021/** 022 * Action to print a summary of trains that service specific car types. 023 * <p> 024 * This uses the older style printing, for compatibility with Java 1.1.8 in 025 * Macintosh MRJ 026 * 027 * @author Bob Jacobsen Copyright (C) 2003 028 * @author Dennis Miller Copyright (C) 2005 029 * @author Daniel Boudreau Copyright (C) 2010 030 */ 031public class PrintTrainsByCarTypesAction extends AbstractAction { 032 033 static final String NEW_LINE = "\n"; // NOI18N 034 static final String TAB = "\t"; // NOI18N 035 036 public PrintTrainsByCarTypesAction(boolean isPreview) { 037 super(isPreview ? Bundle.getMessage("MenuItemPreviewByType") : Bundle.getMessage("MenuItemPrintByType")); 038 _isPreview = isPreview; 039 } 040 041 /** 042 * Variable to set whether this is to be printed or previewed 043 */ 044 boolean _isPreview; 045 HardcopyWriter writer; 046 int max_name_length = Control.max_len_string_train_name + 1; 047 048 @Override 049 public void actionPerformed(ActionEvent e) { 050 // obtain a HardcopyWriter 051 try { 052 writer = new HardcopyWriter(new Frame(), Bundle.getMessage("TitleTrainsByType"), Control.reportFontSize, .5, 053 .5, .5, .5, 054 _isPreview); 055 } catch (HardcopyWriter.PrintCanceledException ex) { 056 log.debug("Print cancelled"); 057 return; 058 } 059 060 // Loop through the car types showing which trains will service that car 061 // type 062 String carTypes[] = InstanceManager.getDefault(CarTypes.class).getNames(); 063 List<Train> trains = InstanceManager.getDefault(TrainManager.class).getTrainsByNameList(); 064 065 try { 066 // title line 067 String s = Bundle.getMessage("Type") + 068 TAB + 069 TrainCommon.padString(Bundle.getMessage("Trains"), 070 max_name_length) + 071 Bundle.getMessage("Description") + 072 NEW_LINE; 073 writer.write(s); 074 075 for (String type : carTypes) { 076 s = type + NEW_LINE; 077 writer.write(s); 078 079 for (Train train : trains) { 080 if (train.isTypeNameAccepted(type)) { 081 s = TAB + 082 TrainCommon.padString(train.getName(), max_name_length) + 083 train.getDescription() + 084 NEW_LINE; 085 writer.write(s); 086 } 087 } 088 } 089 // and force completion of the printing 090 writer.close(); 091 } catch (IOException we) { 092 log.error("Error printing PrintLocationAction", we); 093 } 094 } 095 096 private final static Logger log = LoggerFactory.getLogger(PrintTrainsByCarTypesAction.class); 097}