Files
JIMRI/jython/operations/OperationsReplaceCarLoads.py
T
2026-06-17 14:00:51 +02:00

117 lines
4.5 KiB
Python

# Sample script showing how to replace car loads at a location.
# Used in operations. This script will load all cars of a
# given type at a location and track with the car loads you specify.
#
#
# Author: Daniel Boudreau, copyright 2011, 2024
# Part of the JMRI distribution
#
# To use this script you must assign the location, tracks, car type
# and car loads.
#
# Location to load cars (see self.locationName below, replace locationName)
#
# Tracks at the above location that will load your cars
# replace trackName1, trackName2, trackName3, etc. with the
# names of your tracks. You can add more, or delete the one you
# don't need.
#
# The car type, (see self.carTypeName, replace carTypeName)
#
# Car loads, (see self.carLoadNames, replace carLoadName1, carLoadName2, carLoadName3, etc)
# The first car will be loaded with carLoadName1, the second carLoadName2, etc, until
# all loads are used, and then will begin again with carLoadName1.
#
# The car loads you want to replace, (see self.carReplaceLoads)
#
# The number of car loads you want to replace. (see self.number)
import jmri
class loadCars(jmri.jmrit.automat.AbstractAutomaton):
def init(self):
# location (use location name)
self.locationName = "locationName"
# tracks (use track names) at location to generate loads
self.trackNames = ["trackName1", "trackName2", "trackName3", "trackName4"]
# car type (use car type name)
self.carTypeName = "carTypeName"
# car loads to generate (use load names)
self.carLoadNames = ["carLoadName1", "carLoadName2", "carLoadName3", "carLoadName4"]
# car loads to replace
self.carReplaceLoads = ["L", "E"]
# maximum number of loads to replace
self.number = 100
return
def handle(self):
# get the car manager
cm = jmri.InstanceManager.getDefault(jmri.jmrit.operations.rollingstock.cars.CarManager)
# the following code checks the values entered
# first check the location and tracks
lm = jmri.InstanceManager.getDefault(jmri.jmrit.operations.locations.LocationManager)
testLocation = lm.getLocationByName(self.locationName)
if (testLocation == None):
print ('Location ({}) does not exist'.format(self.locationName))
return False # done error!
for trackName in self.trackNames:
testTrack = testLocation.getTrackByName(trackName, None)
if (testTrack == None):
print ('Track ({}) does not exist at location ({}).'.format(trackName, self.locationName))
return False # done error!
# check car type entered
ct = jmri.InstanceManager.getDefault(jmri.jmrit.operations.rollingstock.cars.CarTypes)
if (ct.containsName(self.carTypeName) == False):
print ('Car type({}) not found'.format(self.carTypeName))
return False
# check car loads entered
clm = jmri.InstanceManager.getDefault(jmri.jmrit.operations.rollingstock.cars.CarLoads)
for i in range(0, len(self.carLoadNames)):
if (clm.containsName(self.carTypeName, self.carLoadNames[i]) == False):
print ('Car load ({}) not found for car type ({})'.format(self.carLoadNames[i], self.carTypeName))
return False
# check car replace loads entered
for i in range(0, len(self.carReplaceLoads)):
if (clm.containsName(self.carTypeName, self.carReplaceLoads[i]) == False):
print ('Car replace load ({}) not found for car type ({})'.format(self.carReplaceLoads[i], self.carTypeName))
return False
# get a list of cars from the manager
carList = cm.getByIdList()
# print ('Found", carList.size(), "cars in roster"
# index through new car loads
i = 0
for car in carList:
if (self.number > 0):
if (car.getTypeName() == self.carTypeName):
if (car.getLocationName() == self.locationName):
for replaceLoadName in self.carReplaceLoads:
if (car.getLoadName() == replaceLoadName):
for trackName in self.trackNames:
if (car.getTrackName() == trackName):
print ('Car ({}) at location ({}) track ({}) type ({}) old load ({}) new load ({})'.format(car.toString(), self.locationName, trackName, self.carTypeName, car.getLoadName(), self.carLoadNames[i]))
car.setLoadName(self.carLoadNames[i])
self.number = self.number - 1
i = i + 1
if (i >= len(self.carLoadNames)):
i = 0
return False # all done, don't repeat again
loadCars().start() # create one of these, and start it running