001package jmri.jmrix.openlcb.configurexml; 002 003import org.jdom2.Element; 004 005import jmri.Meter; 006import jmri.MeterManager; 007import jmri.jmrix.openlcb.OlcbMeterManager; 008/** 009 * Provides load and store functionality for configuring 010 * OlcbMeterManagers. 011 * <p> 012 * Uses the store method from the abstract base class, but provides a load 013 * method here. 014 * 015 * @author Bob Jacobsen Copyright (C) 2006 016 * @author Daniel Bergqvist Copyright (C) 2020 017 */ 018public class OlcbMeterManagerXml extends jmri.managers.configurexml.AbstractMeterManagerXml { 019 020 public OlcbMeterManagerXml() { 021 super(); 022 } 023 024 @Override 025 public void setStoreElementClass(Element meters) { 026 meters.setAttribute("class", this.getClass().getName()); 027 } 028 029 // store the meter element. 030 // This adds the actual meter subclass as an element 031 @Override 032 protected Element storeMeter(Meter m) { 033 String mName = m.getSystemName(); 034 035 Element elem = new Element("meter"); 036 elem.addContent(new Element("systemName").addContent(mName)); 037 038 // store the type of the Meter itself 039 elem.setAttribute("class", m.getClass().getName()); 040 041 // store common part 042 storeCommon(m, elem); 043 044 return elem; 045 } 046 047 @Override 048 protected void loadMeter(String sysName, String userName, Element el, MeterManager mm) { 049 log.debug("get Meter: ({})({})", sysName, (userName == null ? "<null>" : userName)); 050 Meter m = mm.getBySystemName(sysName); 051 052 if (m == null) { 053 // have to create the specific meter object 054 if (el.getAttributeValue("class").contains("Voltage")) { 055 m = OlcbMeterManager.createVoltageMeter(sysName); 056 } else if (el.getAttributeValue("class").contains("Current")) { 057 m = OlcbMeterManager.createCurrentMeter(sysName); 058 } else { 059 log.error("Unexpected class when restoring OpenLCB meter: {}", 060 el.getChild("class").getContent()); 061 return; 062 } 063 } 064 065 m.setUserName(userName); 066 // load common parts 067 loadCommon(m, el); 068 } 069 070 private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(OlcbMeterManagerXml.class); 071 072}