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}