001package jmri.jmrix.dccpp;
002
003import jmri.GlobalProgrammerManager;
004import org.slf4j.Logger;
005import org.slf4j.LoggerFactory;
006
007/**
008 * This class performs initialization for DCC-EX. It
009 * adds the appropriate Managers via the Initialization Manager.
010 *
011 * @author Paul Bender Copyright (C) 2003-2010
012 * @author Giorgio Terdina Copyright (C) 2007
013 * @author Mark Underwood Copyright (C) 2015
014 * @author Harald Barth Copyright (C) 2019
015 *
016 * Based on XNetInitializationManager by Paul Bender and Giorgio Terdina
017 */
018public class DCCppInitializationManager {
019
020    protected DCCppSystemConnectionMemo systemMemo = null;
021
022    DCCppPredefinedMeters predefinedMeters;
023    jmri.jmrix.dccpp.swing.messages.MessagesWatcher messagesWatcher;
024    
025    public DCCppInitializationManager(DCCppSystemConnectionMemo memo) {
026
027        systemMemo = memo;
028
029        log.debug("Starting DCC-EX/DCC-EX Initialization Process");
030
031        jmri.InstanceManager.setThrottleManager(systemMemo.getThrottleManager());
032        systemMemo.setProgrammerManager(new DCCppProgrammerManager(new DCCppProgrammer(systemMemo.getDCCppTrafficController()), systemMemo));
033        if (systemMemo.getProgrammerManager().isAddressedModePossible()) {
034            jmri.InstanceManager.store(systemMemo.getProgrammerManager(), jmri.AddressedProgrammerManager.class);
035        }
036        if (systemMemo.getProgrammerManager().isGlobalProgrammerAvailable()) {
037            jmri.InstanceManager.store(systemMemo.getProgrammerManager(), GlobalProgrammerManager.class);
038        }
039        systemMemo.setCommandStation(systemMemo.getDCCppTrafficController().getCommandStation());
040        jmri.InstanceManager.store(systemMemo.getCommandStation(), jmri.CommandStation.class);
041        systemMemo.setTurnoutManager(new jmri.jmrix.dccpp.DCCppTurnoutManager(systemMemo));
042        jmri.InstanceManager.setTurnoutManager(systemMemo.getTurnoutManager());
043        systemMemo.setLightManager(new jmri.jmrix.dccpp.DCCppLightManager(systemMemo));
044        jmri.InstanceManager.setLightManager(systemMemo.getLightManager());
045        systemMemo.setSensorManager(new jmri.jmrix.dccpp.DCCppSensorManager(systemMemo));
046        jmri.InstanceManager.setSensorManager(systemMemo.getSensorManager());
047        jmri.InstanceManager.store(systemMemo.getPowerManager(), jmri.PowerManager.class);
048        log.debug("PowerManager: {}", jmri.InstanceManager.getDefault(jmri.PowerManager.class));
049        systemMemo.setClockControl(new DCCppClockControl(systemMemo));
050        predefinedMeters = new DCCppPredefinedMeters(systemMemo);
051        messagesWatcher = new jmri.jmrix.dccpp.swing.messages.MessagesWatcher(systemMemo);
052
053        systemMemo.register();
054
055        log.info("DCC-EX/DCC-EX Initialization Complete");
056    }
057
058    private static final Logger log = LoggerFactory.getLogger(DCCppInitializationManager.class);
059
060}