001package jmri.jmrit.dispatcher; 002 003import jmri.InstanceManager; 004import jmri.Sensor; 005import jmri.SensorManager; 006import jmri.jmrit.dispatcher.ActiveTrain.TrainDetection; 007import jmri.jmrit.dispatcher.ActiveTrain.TrainLengthUnits; 008import jmri.jmrit.dispatcher.DispatcherFrame.TrainsFrom; 009 010/** 011 * TrainInfo is a temporary object specifying New Train information just read 012 * from disk, or to be written to disk 013 * <p> 014 * Used in conjunction with TrainInfoFile.java to save and retrieve New Train 015 * information 016 * <p> 017 * When adding a new item of New Train information, modifications need to be 018 * made to TrainInfoFile.java and dispatcher-traininfo.DTD as well as this 019 * module. 020 * 021 * @author Dave Duchamp Copyright (C) 2009 022 */ 023public class TrainInfo { 024 025 public TrainInfo() { 026 } 027 028 // instance variables for both manual and automatic operation 029 private int version = 1; 030 private boolean dynamicTransit = false; 031 private boolean dynamicTransitCloseLoopIfPossible = false; 032 private String transitName = ""; 033 private String transitId = ""; 034 private String trainName = ""; 035 private String rosterID = ""; 036 private String trainUserName = ""; 037 private String dccAddress = "3"; 038 private boolean trainInTransit = false; 039 private String startBlockName = ""; 040 private String viaBlockName = ""; 041 private String startBlockId = ""; 042 private int startBlockSeq = -1; 043 private String destinationBlockName = ""; 044 private String destinationBlockId = ""; 045 private int destinationBlockSeq = -1; 046 private boolean trainFromRoster = true; 047 private boolean trainFromTrains = false; 048 private boolean trainFromUser = false; 049 private boolean trainFromSetLater = false; 050 private int priority = 5; 051 private boolean autoRun = false; 052 private boolean resetWhenDone = false; 053 private boolean allocateAllTheWay = false; 054 private int allocationMethod = 3; 055 private boolean reverseAtEnd = false; 056 private int delayedStart = ActiveTrain.NODELAY; 057 private int delayedRestart = ActiveTrain.NODELAY; 058 private int departureTimeHr = 8; 059 private int departureTimeMin = 00; 060 private String delaySensorName = null; 061 private boolean resetStartSensor = true; 062 063 private String restartSensorName = null; 064 private boolean resetRestartSensor = true; 065 private int restartDelayMin = 0; 066 067 private int reverseDelayedRestart = ActiveTrain.NODELAY; 068 private String reverseRestartSensorName = null; 069 private boolean reverseResetRestartSensor = true; 070 private int reverseRestartDelayMin = 0; 071 072 private String trainType = ""; 073 private boolean terminateWhenDone = false; 074 private String nextTrain = "None"; 075 private boolean loadAtStartup = false; 076 077 // instance variables for automatic operation 078 private float speedFactor = 1.0f; 079 private float maxSpeed = 1.0f; 080 private float minReliableOperatingSpeed = 0.0f; 081 private String rampRate = Bundle.getMessage("RAMP_NONE"); 082 private TrainDetection trainDetection = TrainDetection.TRAINDETECTION_WHOLETRAIN; 083 private boolean runInReverse = false; 084 private boolean soundDecoder = false; 085 private float maxTrainLength = 100.0f; 086 private float maxTrainLengthMeters = 30.0f; 087 private TrainLengthUnits trainLengthUnits = TrainLengthUnits.TRAINLENGTH_SCALEFEET; // units used to enter value 088 private boolean useSpeedProfile = false; 089 private boolean stopBySpeedProfile = false; 090 private float stopBySpeedProfileAdjust = 1.0f; 091 private int fNumberLight = 0; 092 private int fNumberBell = 1; 093 private int fNumberHorn = 2; 094 095 private float waitTime = 3.0f; //seconds: required only by dispatcher system to pause train at beginning of transit (station) 096 097 private String blockName = ""; //required only by Dispatcher System to inhibit running of transit if this block is occupied 098 099 100 // 101 // Access methods for manual and automatic instance variables 102 // 103 public void setVersion(int ver) { 104 version = ver; 105 } 106 public int getVersion() { 107 return version; 108 } 109 110 public void setTransitName(String s) { 111 transitName = s; 112 } 113 114 public String getTransitName() { 115 return transitName; 116 } 117 118 public void setTransitId(String s) { 119 transitId = s; 120 } 121 122 public String getTransitId() { 123 return transitId; 124 } 125 126 public void setDynamicTransit(boolean b) { 127 dynamicTransit = b; 128 } 129 130 public boolean getDynamicTransit() { 131 return dynamicTransit; 132 } 133 134 public void setDynamicTransitCloseLoopIfPossible(boolean b) { 135 dynamicTransitCloseLoopIfPossible = b; 136 } 137 138 public boolean getDynamicTransitCloseLoopIfPossible() { 139 return dynamicTransitCloseLoopIfPossible; 140 } 141 public void setTrainName(String s) { 142 trainName = s; 143 } 144 145 public String getTrainName() { 146 return trainName; 147 } 148 149 public void setRosterId(String s) { 150 rosterID = s; 151 } 152 153 public String getRosterId() { 154 return rosterID; 155 } 156 157 public void setTrainUserName(String s) { 158 trainUserName = s; 159 } 160 161 public String getTrainUserName() { 162 return trainUserName; 163 } 164 165 public void setDccAddress(String s) { 166 dccAddress = s; 167 } 168 169 public String getDccAddress() { 170 return dccAddress; 171 } 172 173 public void setTrainInTransit(boolean b) { 174 trainInTransit = b; 175 } 176 177 public boolean getTrainInTransit() { 178 return trainInTransit; 179 } 180 181 public void setStartBlockName(String s) { 182 startBlockName = s; 183 } 184 185 public String getStartBlockName() { 186 return startBlockName; 187 } 188 189 public void setViaBlockName(String s) { 190 viaBlockName = s; 191 } 192 193 public String getViaBlockName() { 194 return viaBlockName; 195 } 196 197 public void setStartBlockId(String s) { 198 startBlockId = s; 199 } 200 201 public String getStartBlockId() { 202 return startBlockId; 203 } 204 205 public void setStartBlockSeq(int i) { 206 startBlockSeq = i; 207 } 208 209 public int getStartBlockSeq() { 210 return startBlockSeq; 211 } 212 213 public void setDestinationBlockName(String s) { 214 destinationBlockName = s; 215 } 216 217 public String getDestinationBlockName() { 218 return destinationBlockName; 219 } 220 221 public void setDestinationBlockId(String s) { 222 destinationBlockId = s; 223 } 224 225 public String getDestinationBlockId() { 226 return destinationBlockId; 227 } 228 229 public void setDestinationBlockSeq(int i) { 230 destinationBlockSeq = i; 231 } 232 233 public int getDestinationBlockSeq() { 234 return destinationBlockSeq; 235 } 236 237 public void setTrainsFrom(TrainsFrom value) { 238 trainFromRoster = false; 239 trainFromTrains = false; 240 trainFromUser = false; 241 trainFromSetLater = false; 242 switch (value) { 243 case TRAINSFROMROSTER: 244 trainFromRoster = true; 245 break; 246 case TRAINSFROMOPS: 247 trainFromTrains = true; 248 break; 249 case TRAINSFROMUSER: 250 trainFromUser = true; 251 break; 252 case TRAINSFROMSETLATER: 253 default: 254 trainFromSetLater = true; 255 } 256 } 257 258 public TrainsFrom getTrainsFrom() { 259 if (trainFromRoster) { 260 return TrainsFrom.TRAINSFROMROSTER; 261 } else if (trainFromTrains) { 262 return TrainsFrom.TRAINSFROMOPS; 263 } else if (trainFromUser) { 264 return TrainsFrom.TRAINSFROMUSER; 265 } 266 return TrainsFrom.TRAINSFROMSETLATER; 267 } 268 269 public void setTrainFromRoster(boolean b) { 270 trainFromRoster = b; 271 } 272 273 public boolean getTrainFromRoster() { 274 return trainFromRoster; 275 } 276 277 public void setTrainFromTrains(boolean b) { 278 trainFromTrains = b; 279 } 280 281 public boolean getTrainFromTrains() { 282 return trainFromTrains; 283 } 284 285 public void setTrainFromUser(boolean b) { 286 trainFromUser = b; 287 } 288 289 public boolean getTrainFromUser() { 290 return trainFromUser; 291 } 292 293 public void setTrainFromSetLater(boolean b) { 294 trainFromSetLater = b; 295 } 296 297 public boolean getTrainFromSetLater() { 298 return trainFromSetLater; 299 } 300 301 public void setTerminateWhenDone(boolean b) { 302 terminateWhenDone = b; 303 } 304 305 public boolean getTerminateWhenDone() { 306 return terminateWhenDone; 307 } 308 309 public void setNextTrain(String s) { 310 nextTrain = s; 311 } 312 313 public String getNextTrain() { 314 return nextTrain; 315 } 316 317 318 public void setPriority(int pri) { 319 priority = pri; 320 } 321 322 public int getPriority() { 323 return priority; 324 } 325 326 public void setAutoRun(boolean b) { 327 autoRun = b; 328 } 329 330 public boolean getAutoRun() { 331 return autoRun; 332 } 333 334 public void setResetWhenDone(boolean b) { 335 resetWhenDone = b; 336 } 337 338 public boolean getResetWhenDone() { 339 return resetWhenDone; 340 } 341 342 public void setAllocateAllTheWay(boolean b) { 343 allocateAllTheWay = b; 344 } 345 346 public boolean getAllocateAllTheWay() { 347 return allocateAllTheWay; 348 } 349 350 public void setAllocationMethod(int i) { 351 allocationMethod = i; 352 } 353 354 public int getAllocationMethod() { 355 return allocationMethod; 356 } 357 358 public void setUseSpeedProfile(boolean b) { 359 useSpeedProfile = b; 360 } 361 362 public boolean getUseSpeedProfile() { 363 return useSpeedProfile; 364 } 365 366 public void setStopBySpeedProfile(boolean b) { 367 stopBySpeedProfile = b; 368 } 369 370 public boolean getStopBySpeedProfile() { 371 return stopBySpeedProfile; 372 } 373 374 public void setStopBySpeedProfileAdjust(float f) { 375 stopBySpeedProfileAdjust = f; 376 } 377 378 public float getStopBySpeedProfileAdjust() { 379 return stopBySpeedProfileAdjust; 380 } 381 382 public void setReverseAtEnd(boolean b) { 383 reverseAtEnd = b; 384 } 385 386 public boolean getReverseAtEnd() { 387 return reverseAtEnd; 388 } 389 390 public void setDelayedStart(int ds) { 391 delayedStart = ds; 392 } 393 394 /** 395 * delayed start code for this train 396 * 397 * @return one of ActiveTrain.NODELAY,TIMEDDELAY,SENSORDELAY 398 */ 399 public int getDelayedStart() { 400 return delayedStart; 401 } 402 403 public void setDepartureTimeHr(int hr) { 404 departureTimeHr = hr; 405 } 406 407 public int getDepartureTimeHr() { 408 return departureTimeHr; 409 } 410 411 public void setDepartureTimeMin(int min) { 412 departureTimeMin = min; 413 } 414 415 public int getDepartureTimeMin() { 416 return departureTimeMin; 417 } 418 419 public void setDelaySensorName(String sen) { 420 delaySensorName = sen; 421 } 422 423 public String getDelaySensorName() { 424 return delaySensorName; 425 } 426 427 public void setReverseDelayedRestart(int ds) { 428 reverseDelayedRestart = ds; 429 } 430 431 /** 432 * return restart code for this train, only used for continuous running 433 * 434 * @return one of ActiveTrain.NODELAY,TIMEDDELAY,SENSORDELAY 435 */ 436 public int getReverseDelayedRestart() { 437 return reverseDelayedRestart; 438 } 439 440 public void setReverseRestartSensorName(String value) { 441 reverseRestartSensorName = value; 442 } 443 444 public String getReverseRestartSensorName() { 445 return reverseRestartSensorName; 446 } 447 448 public void setReverseResetRestartSensor(boolean value) { 449 reverseResetRestartSensor = value; 450 } 451 452 public boolean getReverseResetRestartSensor() { 453 return reverseResetRestartSensor; 454 } 455 456 public Sensor getReverseRestartSensor() { 457 if (reverseRestartSensorName == null) { 458 return null; 459 } 460 return jmri.InstanceManager.sensorManagerInstance().getSensor(reverseRestartSensorName); 461 } 462 463 public void setReverseRestartDelayMin(int value) { 464 reverseRestartDelayMin = value; 465 } 466 467 public int getReverseRestartDelayMin() { 468 return reverseRestartDelayMin; 469 } 470 471 /** 472 * retrieve the startup delay sensor using the delay sensor name 473 * 474 * @return delay sensor, or null if delay sensor name not set 475 */ 476 public Sensor getDelaySensor() { 477 if (delaySensorName == null) { 478 return null; 479 } 480 return InstanceManager.getDefault(SensorManager.class).getSensor(delaySensorName); 481 } 482 483 public boolean getResetStartSensor() { 484 return resetStartSensor; 485 } 486 487 public void setResetStartSensor(boolean b) { 488 resetStartSensor = b; 489 } 490 491 public void setTrainType(String s) { 492 trainType = s; 493 } 494 495 public String getTrainType() { 496 return trainType; 497 } 498 499 public void setDelayedRestart(int ds) { 500 delayedRestart = ds; 501 } 502 503 /** 504 * return restart code for this train, only used for continuous running 505 * 506 * @return one of ActiveTrain.NODELAY,TIMEDDELAY,SENSORDELAY 507 */ 508 public int getDelayedRestart() { 509 return delayedRestart; 510 } 511 512 public void setRestartSensorName(String sen) { 513 restartSensorName = sen; 514 } 515 516 public String getRestartSensorName() { 517 return restartSensorName; 518 } 519 520 /** 521 * retrieve the restart sensor using the restart sensor name 522 * 523 * @return restart sensor, or null if the restart sensor name not set 524 */ 525 public Sensor getRestartSensor() { 526 if (restartSensorName == null) { 527 return null; 528 } 529 return jmri.InstanceManager.sensorManagerInstance().getSensor(restartSensorName); 530 } 531 532 public boolean getResetRestartSensor() { 533 return resetRestartSensor; 534 } 535 536 public void setResetRestartSensor(boolean b) { 537 resetRestartSensor = b; 538 } 539 540 /** 541 * number of minutes to delay between restarting for continuous runs 542 * 543 * @param s number of minutes to delay 544 */ 545 public void setRestartDelayMin(int s) { 546 restartDelayMin = s; 547 } 548 549 public int getRestartDelayMin() { 550 return restartDelayMin; 551 } 552 553 public boolean getLoadAtStartup() { 554 return loadAtStartup; 555 } 556 557 public void setLoadAtStartup(boolean loadAtStartup) { 558 this.loadAtStartup = loadAtStartup; 559 } 560 561 // 562 // Access methods for automatic operation instance variables 563 // 564 public void setSpeedFactor(float f) { 565 speedFactor = f; 566 } 567 568 public Float getSpeedFactor() { 569 return speedFactor; 570 } 571 572 public void setMaxSpeed(float f) { 573 maxSpeed = f; 574 } 575 576 public Float getMaxSpeed() { 577 return maxSpeed; 578 } 579 580 public void setMinReliableOperatingSpeed(float f) { 581 minReliableOperatingSpeed = f; 582 } 583 584 public float getMinReliableOperatingSpeed() { 585 return minReliableOperatingSpeed; 586 } 587 588 public void setRampRate(String s) { 589 rampRate = s; 590 } 591 592 public String getRampRate() { 593 return rampRate; 594 } 595 596 /** 597 * Set the detection get 598 * @param b {@link ActiveTrain.TrainDetection} 599 */ 600 public void setTrainDetection(TrainDetection b) { 601 trainDetection = b; 602 } 603 604 /** 605 * Get the detection type 606 * @return {@link ActiveTrain.TrainDetection} 607 */ 608 public TrainDetection getTrainDetection() { 609 return trainDetection; 610 } 611 612 /** 613 * @deprecated use {@link #setTrainDetection} 614 * @param b true or false 615 */ 616 @Deprecated (since="5.7.6",forRemoval=true) 617 public void setResistanceWheels(boolean b) { 618 if (b) { 619 trainDetection = TrainDetection.TRAINDETECTION_WHOLETRAIN; 620 } else { 621 trainDetection = TrainDetection.TRAINDETECTION_HEADONLY; 622 } 623 } 624 625 /** 626 * @deprecated use {@link #getTrainDetection} 627 * @return true or false 628 */ 629 @Deprecated (since="5.7.6",forRemoval=true) 630 public boolean getResistanceWheels() { 631 if (trainDetection == TrainDetection.TRAINDETECTION_WHOLETRAIN) { 632 return true; 633 } 634 return false; 635 } 636 637 public void setRunInReverse(boolean b) { 638 runInReverse = b; 639 } 640 641 public boolean getRunInReverse() { 642 return runInReverse; 643 } 644 645 public void setSoundDecoder(boolean b) { 646 soundDecoder = b; 647 } 648 649 public boolean getSoundDecoder() { 650 return soundDecoder; 651 } 652 653 /** 654 * Sets F number for the Light 655 * @param value F Number. 656 */ 657 public void setFNumberLight(int value) { 658 fNumberLight = value; 659 } 660 661 /** 662 * returns the F number for the Light 663 * @return F Number 664 */ 665 public int getFNumberLight() { 666 return fNumberLight; 667 } 668 669 /** 670 * Sets F number for the Bell 671 * @param value F Number. 672 */ 673 public void setFNumberBell(int value) { 674 fNumberBell = value; 675 } 676 677 /** 678 * returns the F number for the Bell 679 * @return F Number 680 */ 681 public int getFNumberBell() { 682 return fNumberBell; 683 } 684 685 /** 686 * Sets F number for the Horn 687 * @param value F Number. 688 */ 689 public void setFNumberHorn(int value) { 690 fNumberHorn = value; 691 } 692 693 /** 694 * returns the F number for the Horn 695 * @return F Number 696 */ 697 public int getFNumberHorn() { 698 return fNumberHorn; 699 } 700 701 /** 702 * @deprecated use {@link #setMaxTrainLengthScaleMeters} 703 * or {@link #setMaxTrainLengthScaleMeters} 704 * @param f train length 705 */ 706 @Deprecated (since="5.9.7",forRemoval=true) 707 public void setMaxTrainLength(float f) { 708 maxTrainLength = f; 709 } 710 711 /** 712 * @deprecated use {@link #getMaxTrainLengthScaleMeters} 713 * or {@link #getMaxTrainLengthScaleFeet} 714 * @return train length of in units of the writing application 715 */ 716 @Deprecated (since="5.9.7",forRemoval=true) 717 public float getMaxTrainLength() { 718 return maxTrainLength; 719 } 720 721 /** 722 * Sets the max train length expected during run 723 * @param f scale Meters. 724 */ 725 public void setMaxTrainLengthScaleMeters(float f) { 726 maxTrainLengthMeters = f; 727 } 728 729 /** 730 * Gets the Max train length expected during run 731 * @return scale meters 732 */ 733 public float getMaxTrainLengthScaleMeters() { 734 return maxTrainLengthMeters; 735 } 736 737 /** 738 * Sets the max train length expected 739 * @param f scale Meters. 740 */ 741 public void setMaxTrainLengthScaleFeet(float f) { 742 maxTrainLengthMeters = f / 3.28084f; 743 } 744 745 /** 746 * Gets the Max train length expected during route 747 * @return scale meters 748 */ 749 public float getMaxTrainLengthScaleFeet() { 750 return maxTrainLengthMeters * 3.28084f; 751 } 752 753 /** 754 * Sets the gui units used to enter or display (The units are always held in scale meters) 755 * @param value {@link ActiveTrain.TrainLengthUnits} 756 */ 757 public void setTrainLengthUnits(TrainLengthUnits value) { 758 trainLengthUnits = value; 759 } 760 761 /** 762 * Get the GUI units entered (The data is held in scale Meters) 763 * @return {@link ActiveTrain.TrainLengthUnits} 764 */ 765 public TrainLengthUnits getTrainLengthUnits() { 766 return trainLengthUnits; 767 } 768 769 public void setWaitTime(float f) { waitTime = f; } 770 771 public float getWaitTime() { 772 return waitTime; 773 } 774 775 public void setBlockName(String s) { blockName = s; } 776 777 public String getBlockName() { return blockName; } 778 779}