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}