jmri.implementation.configurexml.LsDecSignalHeadXml.java Source code

Java tutorial

Introduction

Here is the source code for jmri.implementation.configurexml.LsDecSignalHeadXml.java

Source

// LsDecSignalHeadXml.java
package jmri.implementation.configurexml;

import java.util.List;
import jmri.InstanceManager;
import jmri.NamedBeanHandle;
import jmri.SignalHead;
import jmri.Turnout;
import jmri.implementation.LsDecSignalHead;
import org.jdom2.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Handle XML configuration for LsDecSignalHead objects.
 *
 * This file is part of JMRI.
 *
 * JMRI is free software; you can redistribute it and/or modify it under the
 * terms of version 2 of the GNU General Public License as published by the Free
 * Software Foundation. See the "COPYING" file for a copy of this license.
 *
 * JMRI is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * @author Bob Jacobsen Copyright: Copyright (c) 2003, 2008
 * @author Petr Koud'a Copyright: Copyright (c) 2007
 * @version $Revision$
 */
public class LsDecSignalHeadXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML {

    public LsDecSignalHeadXml() {
    }

    /**
     * Default implementation for storing the contents of a LsDecSignalHead
     *
     * @param o Object to store, of type LsDecSignalHead
     * @return Element containing the complete info
     */
    public Element store(Object o) {
        LsDecSignalHead p = (LsDecSignalHead) o;

        Element element = new Element("signalhead");
        element.setAttribute("class", this.getClass().getName());

        // include contents
        element.setAttribute("systemName", p.getSystemName());
        element.addContent(new Element("systemName").addContent(p.getSystemName()));

        storeCommon(p, element);

        element.addContent(addTurnoutElement(p.getGreen().getName(), p.getGreenState()));
        element.addContent(addTurnoutElement(p.getYellow().getName(), p.getYellowState()));
        element.addContent(addTurnoutElement(p.getRed().getName(), p.getRedState()));
        element.addContent(addTurnoutElement(p.getFlashGreen().getName(), p.getFlashGreenState()));
        element.addContent(addTurnoutElement(p.getFlashYellow().getName(), p.getFlashYellowState()));
        element.addContent(addTurnoutElement(p.getFlashRed().getName(), p.getFlashRedState()));
        element.addContent(addTurnoutElement(p.getDark().getName(), p.getDarkState()));

        return element;
    }

    Element addTurnoutElement(String name, int s) {
        int state = s;

        Element el = new Element("turnout");
        el.setAttribute("systemName", name);
        if (state == Turnout.THROWN) {
            el.setAttribute("state", "THROWN");
        } else {
            el.setAttribute("state", "CLOSED");
        }

        return el;
    }

    /**
     * Create a LsDecSignalHead
     *
     * @param element Top level Element to unpack.
     * @return true if successful
     */
    public boolean load(Element element) {
        List<Element> l = element.getChildren("turnout");
        NamedBeanHandle<Turnout> green = loadTurnout(l.get(0));
        NamedBeanHandle<Turnout> yellow = loadTurnout(l.get(1));
        NamedBeanHandle<Turnout> red = loadTurnout(l.get(2));
        NamedBeanHandle<Turnout> flashgreen = loadTurnout(l.get(3));
        NamedBeanHandle<Turnout> flashyellow = loadTurnout(l.get(4));
        NamedBeanHandle<Turnout> flashred = loadTurnout(l.get(5));
        NamedBeanHandle<Turnout> dark = loadTurnout(l.get(6));
        int greenstatus = loadTurnoutStatus(l.get(0));
        int yellowstatus = loadTurnoutStatus(l.get(1));
        int redstatus = loadTurnoutStatus(l.get(2));
        int flashgreenstatus = loadTurnoutStatus(l.get(3));
        int flashyellowstatus = loadTurnoutStatus(l.get(4));
        int flashredstatus = loadTurnoutStatus(l.get(5));
        int darkstatus = loadTurnoutStatus(l.get(6));

        // put it together
        String sys = getSystemName(element);
        String uname = getUserName(element);
        SignalHead h;
        if (uname == null) {
            h = new LsDecSignalHead(sys, green, greenstatus, yellow, yellowstatus, red, redstatus, flashgreen,
                    flashgreenstatus, flashyellow, flashyellowstatus, flashred, flashredstatus, dark, darkstatus);
        } else {
            h = new LsDecSignalHead(sys, uname, green, greenstatus, yellow, yellowstatus, red, redstatus,
                    flashgreen, flashgreenstatus, flashyellow, flashyellowstatus, flashred, flashredstatus, dark,
                    darkstatus);
        }

        loadCommon(h, element);

        InstanceManager.signalHeadManagerInstance().register(h);
        return true;
    }

    NamedBeanHandle<Turnout> loadTurnout(Object o) {
        Element e = (Element) o;
        String name = e.getAttribute("systemName").getValue();
        Turnout t = InstanceManager.turnoutManagerInstance().getTurnout(name);
        return jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(name, t);
    }

    int loadTurnoutStatus(Object o) {
        Element e = (Element) o;
        String rState = e.getAttribute("state").getValue();
        int tSetState = Turnout.CLOSED;
        if (rState.equals("THROWN")) {
            tSetState = Turnout.THROWN;
        }
        return tSetState;
    }

    public void load(Element element, Object o) {
        log.error("Invalid method called");
    }

    static Logger log = LoggerFactory.getLogger(LsDecSignalHeadXml.class.getName());
}