001package jmri.jmrit.operations.rollingstock.engines;
002
003import org.jdom2.Element;
004
005import jmri.InstanceManager;
006import jmri.InstanceManagerAutoDefault;
007import jmri.jmrit.operations.rollingstock.RollingStockAttribute;
008
009/**
010 * Represents the types of engines a railroad can have.
011 *
012 * @author Daniel Boudreau Copyright (C) 2008, 2014
013 */
014public class EngineTypes extends RollingStockAttribute implements InstanceManagerAutoDefault {
015
016    private static final String TYPES = Bundle.getMessage("engineDefaultTypes");
017
018    // for property change
019    public static final String ENGINETYPES_CHANGED_PROPERTY = "EngineTypesLength"; // NOI18N
020    public static final String ENGINETYPES_NAME_CHANGED_PROPERTY = "EngineTypesName"; // NOI18N
021
022    public EngineTypes() {
023    }
024
025    @Override
026    protected String getDefaultNames() {
027        return TYPES;
028    }
029
030    @Override
031    public void addName(String type) {
032        super.addName(type);
033        setDirtyAndFirePropertyChange(ENGINETYPES_CHANGED_PROPERTY, null, type);
034    }
035
036    @Override
037    public void deleteName(String type) {
038        super.deleteName(type);
039        setDirtyAndFirePropertyChange(ENGINETYPES_CHANGED_PROPERTY, type, null);
040    }
041
042    public void replaceName(String oldName, String newName) {
043        super.addName(newName);
044        setDirtyAndFirePropertyChange(ENGINETYPES_NAME_CHANGED_PROPERTY, oldName, newName);
045        // need to keep old name so location manager can replace properly
046        super.deleteName(oldName);
047    }
048
049    /**
050     * Create an XML element to represent this Entry. This member has to remain
051     * synchronized with the detailed DTD in operations-engines.dtd.
052     * @param root The common Element for operations-engines.dtd.
053     *
054     */
055    public void store(Element root) {
056        store(root, Xml.TYPES, Xml.TYPE);
057    }
058
059    public void load(Element root) {
060        load(root, Xml.TYPES, Xml.TYPE, Xml.ENGINE_TYPES);
061    }
062
063    protected void setDirtyAndFirePropertyChange(String p, Object old, Object n) {
064        // Set dirty
065        InstanceManager.getDefault(EngineManagerXml.class).setDirty(true);
066        super.firePropertyChange(p, old, n);
067    }
068
069//    private final static Logger log = LoggerFactory.getLogger(EngineTypes.class);
070
071}