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