001package jmri.jmrix.dccpp.swing.messages.configurexml;
002
003import jmri.configurexml.JmriConfigureXmlException;
004import jmri.jmrit.display.*;
005import jmri.jmrit.display.configurexml.PositionableLabelXml;
006import jmri.jmrix.dccpp.swing.messages.MessagesPositionable;
007
008import org.jdom2.Element;
009
010/** Handle configuration for MessagesPositionable objects. */
011public class MessagesPositionableXml extends PositionableLabelXml {
012
013    public MessagesPositionableXml() {
014    }
015
016    /** Store a MessagesPositionable as a dccex_messages element. */
017    @Override
018    public Element store(Object o) {
019
020        MessagesPositionable p = (MessagesPositionable) o;
021        if (!p.isActive()) {
022            return null; // if flagged as inactive, don't store
023        }
024
025        Element element = new Element("dccex_messages");
026
027        element.addContent(MessagesConfigurationXml.store(p.getMessagesPanel()));
028
029        if (p.getId() != null) element.setAttribute("id", p.getId());
030        element.setAttribute("x", "" + p.getX());
031        element.setAttribute("y", "" + p.getY());
032
033        element.setAttribute("class", this.getClass().getName());
034
035        storeLogixNG_Data(p, element);
036
037        return element;
038    }
039
040    @Override
041    public boolean load(Element shared, Element perNode) {
042        log.error("Invalid method called");
043        return false;
044    }
045
046    /** Create a MessagesPositionable from a dccex_messages element and add it to the Editor passed as o. */
047    @Override
048    public void load(Element element, Object o) throws JmriConfigureXmlException {
049        Editor ed = (Editor) o;
050
051        MessagesPositionable l = new MessagesPositionable(ed);
052
053        MessagesConfigurationXml.load(l.getMessagesPanel(), element, false);
054
055        l.initComponents();
056
057        int x = 0;
058        int y = 0;
059        try {
060            if (element.getAttribute("id") != null) {
061                try {
062                    l.setId(element.getAttribute("id").getValue());
063                } catch (Positionable.DuplicateIdException e) {
064                    throw new JmriConfigureXmlException("Positionable id is not unique", e);
065                }
066            }
067            x = element.getAttribute("x").getIntValue();
068            y = element.getAttribute("y").getIntValue();
069        } catch (org.jdom2.DataConversionException e) {
070            log.error("failed to convert positional attribute");
071        }
072        l.setOpaque(false);
073        l.setLocation(x, y);
074
075        l.setDisplayLevel(Editor.ICONS);
076        try {
077            ed.putItem(l, true);
078        } catch (Positionable.DuplicateIdException e) {
079            throw new JmriConfigureXmlException("Positionable id is not unique", e);
080        }
081
082        loadLogixNG_Data(l, element);
083    }
084
085    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MessagesPositionableXml.class);
086}