001package jmri.jmrit.dispatcher;
002
003import jmri.InstanceManager;
004import jmri.Sensor;
005import jmri.SensorManager;
006import jmri.jmrit.dispatcher.ActiveTrain.TrainDetection;
007import jmri.jmrit.dispatcher.DispatcherFrame.TrainsFrom;
008
009/**
010 * TrainInfo is a temporary object specifying New Train information just read
011 * from disk, or to be written to disk
012 * <p>
013 * Used in conjunction with TrainInfoFile.java to save and retrieve New Train
014 * information
015 * <p>
016 * When adding a new item of New Train information, modifications need to be
017 * made to TrainInfoFile.java and dispatcher-traininfo.DTD as well as this
018 * module.
019 *
020 * @author Dave Duchamp Copyright (C) 2009
021 */
022public class TrainInfo {
023
024    public TrainInfo() {
025    }
026
027    // instance variables for both manual and automatic operation
028    private int version = 1;
029    private String transitName = "";
030    private String transitId = "";
031    private String trainName = "";
032    private String dccAddress = "";
033    private boolean trainInTransit = false;
034    private String startBlockName = "";
035    private String startBlockId = "";
036    private int startBlockSeq = -1;
037    private String destinationBlockName = "";
038    private String destinationBlockId = "";
039    private int destinationBlockSeq = -1;
040    private boolean trainFromRoster = true;
041    private boolean trainFromTrains = false;
042    private boolean trainFromUser = false;
043    private boolean trainFromSetLater = false;
044    private int priority = 5;
045    private boolean autoRun = false;
046    private boolean resetWhenDone = false;
047    private boolean allocateAllTheWay = false;
048    private int allocationMethod = 3;
049    private boolean reverseAtEnd = false;
050    private int delayedStart = ActiveTrain.NODELAY;
051    private int delayedRestart = ActiveTrain.NODELAY;
052    private int departureTimeHr = 8;
053    private int departureTimeMin = 00;
054    private String delaySensorName = null;
055    private boolean resetStartSensor = true;
056
057    private String restartSensorName = null;
058    private boolean resetRestartSensor = true;
059    private int restartDelayMin = 0;
060
061    private int reverseDelayedRestart = ActiveTrain.NODELAY;
062    private String reverseRestartSensorName = null;
063    private boolean reverseResetRestartSensor = true;
064    private int reverseRestartDelayMin = 0;
065
066    private String trainType = "";
067    private boolean terminateWhenDone = false;
068    private String nextTrain = "None";
069    private boolean loadAtStartup = false;
070
071    // instance variables for automatic operation
072    private float speedFactor = 1.0f;
073    private float maxSpeed = 0.6f;
074    private String rampRate = Bundle.getMessage("RAMP_NONE");
075    private TrainDetection trainDetection = TrainDetection.TRAINDETECTION_HEADONLY;
076    private boolean runInReverse = false;
077    private boolean soundDecoder = false;
078    private float maxTrainLength = 200.0f;
079    private boolean useSpeedProfile = false;
080    private boolean stopBySpeedProfile = false;
081    private float stopBySpeedProfileAdjust = 1.0f;
082
083    private float waitTime = 1.0f; //required only by dispatcher system to pause train at beginning of transit (station)
084
085    private String blockName = ""; //required only by Dispatcher System to inhibit running of transit if this block is occupied
086
087
088    //
089    // Access methods for manual and automatic instance variables
090    //
091    public void setVersion(int ver) {
092        version = ver;
093    }
094    public int getVersion() {
095        return version;
096    }
097
098    public void setTransitName(String s) {
099        transitName = s;
100    }
101
102    public String getTransitName() {
103        return transitName;
104    }
105
106    public void setTransitId(String s) {
107        transitId = s;
108    }
109
110    public String getTransitId() {
111        return transitId;
112    }
113
114    public void setTrainName(String s) {
115        trainName = s;
116    }
117
118    public String getTrainName() {
119        return trainName;
120    }
121
122    public void setDccAddress(String s) {
123        dccAddress = s;
124    }
125
126    public String getDccAddress() {
127        return dccAddress;
128    }
129
130    public void setTrainInTransit(boolean b) {
131        trainInTransit = b;
132    }
133
134    public boolean getTrainInTransit() {
135        return trainInTransit;
136    }
137
138    public void setStartBlockName(String s) {
139        startBlockName = s;
140    }
141
142    public String getStartBlockName() {
143        return startBlockName;
144    }
145
146    public void setStartBlockId(String s) {
147        startBlockId = s;
148    }
149
150    public String getStartBlockId() {
151        return startBlockId;
152    }
153
154    public void setStartBlockSeq(int i) {
155        startBlockSeq = i;
156    }
157
158    public int getStartBlockSeq() {
159        return startBlockSeq;
160    }
161
162    public void setDestinationBlockName(String s) {
163        destinationBlockName = s;
164    }
165
166    public String getDestinationBlockName() {
167        return destinationBlockName;
168    }
169
170    public void setDestinationBlockId(String s) {
171        destinationBlockId = s;
172    }
173
174    public String getDestinationBlockId() {
175        return destinationBlockId;
176    }
177
178    public void setDestinationBlockSeq(int i) {
179        destinationBlockSeq = i;
180    }
181
182    public int getDestinationBlockSeq() {
183        return destinationBlockSeq;
184    }
185
186    public void setTrainsFrom(TrainsFrom value) {
187        trainFromRoster = false;
188        trainFromTrains = false;
189        trainFromUser = false;
190        trainFromSetLater = false;
191        switch (value) {
192            case TRAINSFROMROSTER:
193                trainFromRoster = true;
194                break;
195            case TRAINSFROMOPS:
196                trainFromTrains = true;
197                break;
198            case TRAINSFROMUSER:
199                trainFromUser = true;
200                break;
201            case TRAINSFROMSETLATER:
202            default:
203                trainFromSetLater = true;
204        }
205    }
206
207    public TrainsFrom getTrainsFrom() {
208        if (trainFromRoster) {
209            return TrainsFrom.TRAINSFROMROSTER;
210        } else if (trainFromTrains) {
211            return TrainsFrom.TRAINSFROMOPS;
212        } else if (trainFromUser) {
213            return TrainsFrom.TRAINSFROMUSER;
214        }
215        return TrainsFrom.TRAINSFROMSETLATER;
216    }
217
218    public void setTrainFromRoster(boolean b) {
219        trainFromRoster = b;
220    }
221
222    public boolean getTrainFromRoster() {
223        return trainFromRoster;
224    }
225
226    public void setTrainFromTrains(boolean b) {
227        trainFromTrains = b;
228    }
229
230    public boolean getTrainFromTrains() {
231        return trainFromTrains;
232    }
233
234    public void setTrainFromUser(boolean b) {
235        trainFromUser = b;
236    }
237
238    public boolean getTrainFromUser() {
239        return trainFromUser;
240    }
241
242    public void setTrainFromSetLater(boolean b) {
243        trainFromSetLater = b;
244    }
245
246    public boolean getTrainFromSetLater() {
247        return trainFromSetLater;
248    }
249
250    public void setTerminateWhenDone(boolean b) {
251        terminateWhenDone = b;
252    }
253
254    public boolean getTerminateWhenDone() {
255        return terminateWhenDone;
256    }
257
258    public void setNextTrain(String s) {
259        nextTrain = s;
260    }
261
262    public String getNextTrain() {
263        return nextTrain;
264    }
265
266
267    public void setPriority(int pri) {
268        priority = pri;
269    }
270
271    public int getPriority() {
272        return priority;
273    }
274
275    public void setAutoRun(boolean b) {
276        autoRun = b;
277    }
278
279    public boolean getAutoRun() {
280        return autoRun;
281    }
282
283    public void setResetWhenDone(boolean b) {
284        resetWhenDone = b;
285    }
286
287    public boolean getResetWhenDone() {
288        return resetWhenDone;
289    }
290
291    public void setAllocateAllTheWay(boolean b) {
292        allocateAllTheWay = b;
293    }
294
295    public boolean getAllocateAllTheWay() {
296        return allocateAllTheWay;
297    }
298
299    public void setAllocationMethod(int i) {
300        allocationMethod = i;
301    }
302
303    public int getAllocationMethod() {
304        return allocationMethod;
305    }
306
307    public void setUseSpeedProfile(boolean b) {
308        useSpeedProfile = b;
309    }
310
311    public boolean getUseSpeedProfile() {
312        return useSpeedProfile;
313    }
314
315    public void setStopBySpeedProfile(boolean b) {
316        stopBySpeedProfile = b;
317    }
318
319    public boolean getStopBySpeedProfile() {
320        return stopBySpeedProfile;
321    }
322
323    public void setStopBySpeedProfileAdjust(float f) {
324        stopBySpeedProfileAdjust = f;
325    }
326
327    public float getStopBySpeedProfileAdjust() {
328        return stopBySpeedProfileAdjust;
329    }
330
331    public void setReverseAtEnd(boolean b) {
332        reverseAtEnd = b;
333    }
334
335    public boolean getReverseAtEnd() {
336        return reverseAtEnd;
337    }
338
339    public void setDelayedStart(int ds) {
340        delayedStart = ds;
341    }
342
343    /**
344     * delayed start code for this train
345     *
346     * @return one of ActiveTrain.NODELAY,TIMEDDELAY,SENSORDELAY
347     */
348    public int getDelayedStart() {
349        return delayedStart;
350    }
351
352    public void setDepartureTimeHr(int hr) {
353        departureTimeHr = hr;
354    }
355
356    public int getDepartureTimeHr() {
357        return departureTimeHr;
358    }
359
360    public void setDepartureTimeMin(int min) {
361        departureTimeMin = min;
362    }
363
364    public int getDepartureTimeMin() {
365        return departureTimeMin;
366    }
367
368    public void setDelaySensorName(String sen) {
369        delaySensorName = sen;
370    }
371
372    public String getDelaySensorName() {
373        return delaySensorName;
374    }
375
376    public void setReverseDelayedRestart(int ds) {
377        reverseDelayedRestart = ds;
378    }
379
380    /**
381     * return restart code for this train, only used for continuous running
382     *
383     * @return one of ActiveTrain.NODELAY,TIMEDDELAY,SENSORDELAY
384     */
385    public int getReverseDelayedRestart() {
386        return reverseDelayedRestart;
387    }
388
389    public void setReverseRestartSensorName(String value) {
390        reverseRestartSensorName = value;
391    }
392
393    public String getReverseRestartSensorName() {
394        return reverseRestartSensorName;
395    }
396
397    public void setReverseResetRestartSensor(boolean value) {
398        reverseResetRestartSensor = value;
399    }
400
401    public boolean getReverseResetRestartSensor() {
402        return reverseResetRestartSensor;
403    }
404
405    public Sensor getReverseRestartSensor() {
406        if (reverseRestartSensorName == null) {
407            return null;
408        }
409        return jmri.InstanceManager.sensorManagerInstance().getSensor(reverseRestartSensorName);
410    }
411
412    public void setReverseRestartDelayMin(int value) {
413        reverseRestartDelayMin = value;
414    }
415
416    public int getReverseRestartDelayMin() {
417        return reverseRestartDelayMin;
418    }
419
420    /**
421     * retrieve the startup delay sensor using the delay sensor name
422     *
423     * @return delay sensor, or null if delay sensor name not set
424     */
425    public Sensor getDelaySensor() {
426        if (delaySensorName == null) {
427            return null;
428        }
429        return InstanceManager.getDefault(SensorManager.class).getSensor(delaySensorName);
430    }
431
432    public boolean getResetStartSensor() {
433        return resetStartSensor;
434    }
435
436    public void setResetStartSensor(boolean b) {
437        resetStartSensor = b;
438    }
439
440    public void setTrainType(String s) {
441        trainType = s;
442    }
443
444    public String getTrainType() {
445        return trainType;
446    }
447
448    public void setDelayedRestart(int ds) {
449        delayedRestart = ds;
450    }
451
452    /**
453     * return restart code for this train, only used for continuous running
454     *
455     * @return one of ActiveTrain.NODELAY,TIMEDDELAY,SENSORDELAY
456     */
457    public int getDelayedRestart() {
458        return delayedRestart;
459    }
460
461    public void setRestartSensorName(String sen) {
462        restartSensorName = sen;
463    }
464
465    public String getRestartSensorName() {
466        return restartSensorName;
467    }
468
469    /**
470     * retrieve the restart sensor using the restart sensor name
471     *
472     * @return restart sensor, or null if the restart sensor name not set
473     */
474    public Sensor getRestartSensor() {
475        if (restartSensorName == null) {
476            return null;
477        }
478        return jmri.InstanceManager.sensorManagerInstance().getSensor(restartSensorName);
479    }
480
481    public boolean getResetRestartSensor() {
482        return resetRestartSensor;
483    }
484
485    public void setResetRestartSensor(boolean b) {
486        resetRestartSensor = b;
487    }
488
489    /**
490     * number of minutes to delay between restarting for continuous runs
491     *
492     * @param s number of minutes to delay
493     */
494    public void setRestartDelayMin(int s) {
495        restartDelayMin = s;
496    }
497
498    public int getRestartDelayMin() {
499        return restartDelayMin;
500    }
501
502    public boolean getLoadAtStartup() {
503        return loadAtStartup;
504    }
505
506    public void setLoadAtStartup(boolean loadAtStartup) {
507        this.loadAtStartup = loadAtStartup;
508    }
509
510    //
511    // Access methods for automatic operation instance variables
512    //
513    public void setSpeedFactor(float f) {
514        speedFactor = f;
515    }
516
517    public Float getSpeedFactor() {
518        return speedFactor;
519    }
520
521    public void setMaxSpeed(float f) {
522        maxSpeed = f;
523    }
524
525    public Float getMaxSpeed() {
526        return maxSpeed;
527    }
528
529    public void setRampRate(String s) {
530        rampRate = s;
531    }
532
533    public String getRampRate() {
534        return rampRate;
535    }
536
537    /**
538     * Set the detection get
539     * @param b {@link ActiveTrain.TrainDetection}
540     */
541    public void setTrainDetection(TrainDetection b) {
542        trainDetection = b;
543    }
544
545    /**
546     * Get the detection type
547     * @return  {@link ActiveTrain.TrainDetection}
548     */
549    public TrainDetection getTrainDetection() {
550        return trainDetection;
551    }
552
553    /**
554     * @deprecated use {@link #setTrainDetection}
555     * @param b true or false
556     */
557    @Deprecated (since="5.7.6",forRemoval=true)
558    public void setResistanceWheels(boolean b) {
559        if (b) {
560            trainDetection = TrainDetection.TRAINDETECTION_WHOLETRAIN;
561        } else {
562            trainDetection = TrainDetection.TRAINDETECTION_HEADONLY;
563        }
564    }
565
566    /**
567     * @deprecated use {@link #getTrainDetection}
568     * @return true or false
569     */
570    @Deprecated (since="5.7.6",forRemoval=true)
571    public boolean getResistanceWheels() {
572        if (trainDetection == TrainDetection.TRAINDETECTION_WHOLETRAIN) {
573            return true;
574        }
575        return false;
576    }
577
578    public void setRunInReverse(boolean b) {
579        runInReverse = b;
580    }
581
582    public boolean getRunInReverse() {
583        return runInReverse;
584    }
585
586    public void setSoundDecoder(boolean b) {
587        soundDecoder = b;
588    }
589
590    public boolean getSoundDecoder() {
591        return soundDecoder;
592    }
593
594    public void setMaxTrainLength(float f) {
595        maxTrainLength = f;
596    }
597
598    public float getMaxTrainLength() {
599        return maxTrainLength;
600    }
601
602    public void setWaitTime(float f) { waitTime = f; }
603
604    public float getWaitTime() {
605        return waitTime;
606    }
607
608    public void setBlockName(String s) { blockName = s; }
609
610    public String getBlockName() { return blockName; }
611
612}