Search in sources :

Example 6 with OPath

use of jmri.jmrit.logix.OPath in project JMRI by JMRI.

the class OBlockManagerXml method loadPath.

OPath loadPath(Element elem, OBlock block) {
    String pName = elem.getAttribute("pathName").getValue();
    OPath path = getPath(block, pName);
    try {
        Attribute attr = elem.getAttribute("fromDirection");
        if (attr != null) {
            path.setFromBlockDirection(attr.getIntValue());
        }
        attr = elem.getAttribute("toDirection");
        if (attr != null) {
            path.setToBlockDirection(attr.getIntValue());
        }
        attr = elem.getAttribute("length");
        if (attr != null) {
            path.setLength(attr.getFloatValue());
        }
    } catch (org.jdom2.DataConversionException e) {
        log.error("Could not parse attribute of path (" + pName + ") block (" + block.getSystemName() + ")");
    }
    Attribute attr = elem.getAttribute("fromPortal");
    if (attr != null) {
        Portal portal = getPortal(attr.getValue());
        if (portal != null) {
            path.setFromPortal(portal);
            portal.addPath(path);
        }
    }
    attr = elem.getAttribute("toPortal");
    if (attr != null) {
        Portal portal = getPortal(attr.getValue());
        if (portal != null) {
            path.setToPortal(portal);
            portal.addPath(path);
        }
    }
    List<Element> settings = elem.getChildren("setting");
    if (log.isDebugEnabled()) {
        log.debug("Path (" + pName + ") has " + settings.size() + " settings.");
    }
    java.util.HashSet<String> turnouts = new java.util.HashSet<String>();
    int dups = 0;
    for (int i = 0; i < settings.size(); i++) {
        Element setElem = settings.get(i);
        int setting = 0;
        try {
            setting = setElem.getAttribute("set").getIntValue();
        } catch (org.jdom2.DataConversionException e) {
            log.error("Could not parse 'set' attribute for path (" + pName + ") block (" + block.getSystemName() + ")");
        }
        String sysName = setElem.getAttribute("turnout").getValue();
        if (!turnouts.contains(sysName)) {
            Turnout to = InstanceManager.turnoutManagerInstance().provideTurnout(sysName);
            turnouts.add(sysName);
            BeanSetting bs = new BeanSetting(to, sysName, setting);
            path.addSetting(bs);
        } else {
            dups++;
        }
    }
    if (dups > 0) {
        log.warn(dups + " duplicate settings not loaded for path \"" + pName + "\"");
    }
    return path;
}
Also used : Attribute(org.jdom2.Attribute) Element(org.jdom2.Element) OPath(jmri.jmrit.logix.OPath) BeanSetting(jmri.BeanSetting) Portal(jmri.jmrit.logix.Portal) Turnout(jmri.Turnout)

Example 7 with OPath

use of jmri.jmrit.logix.OPath in project JMRI by JMRI.

the class OBlockManagerXml method loadPortal.

Portal loadPortal(Element elem) {
    String sysName = null;
    String userName = elem.getAttribute("portalName").getValue();
    if (elem.getAttribute("systemName") == null) {
        if (log.isDebugEnabled()) {
            log.debug("Portal systemName is null");
        }
    } else {
        sysName = elem.getAttribute("systemName").getValue();
    }
    String fromBlockName = null;
    String toBlockName = null;
    // Portals must have user names.
    Portal portal = _portalMgr.getByUserName(userName);
    if (portal != null) {
        fromBlockName = portal.getFromBlock().getSystemName();
        toBlockName = portal.getToBlock().getSystemName();
    } else {
        portal = _portalMgr.providePortal(userName);
    }
    if (portal == null) {
        log.error("unable to create Portal (" + sysName + ", " + userName + ") " + elem + " " + elem.getAttributes());
        return null;
    }
    if (log.isDebugEnabled()) {
        log.debug("create Portal: (" + sysName + ", " + userName + ")");
    }
    OBlock fromBlock = null;
    Element eFromBlk = elem.getChild("fromBlock");
    if (eFromBlk != null && eFromBlk.getAttribute("blockName") != null) {
        String name = eFromBlk.getAttribute("blockName").getValue();
        if (fromBlockName != null && !fromBlockName.equals(name)) {
            log.error("Portal has user name \"" + userName + "\" conflicting with " + portal.toString());
        } else {
            fromBlock = getBlock(name);
            if (fromBlock != null) {
                portal.setFromBlock(fromBlock, false);
                fromBlock.addPortal(portal);
                List<Element> ePathsFromBlock = eFromBlk.getChildren("path");
                for (int i = 0; i < ePathsFromBlock.size(); i++) {
                    Element e = ePathsFromBlock.get(i);
                    String pathName = e.getAttribute("pathName").getValue();
                    String blockName = e.getAttribute("blockName").getValue();
                    if (log.isDebugEnabled()) {
                        log.debug("Load portal= " + userName + " fromBlock= " + fromBlock.getSystemName() + " pathName= " + pathName + " blockName= " + blockName);
                    }
                    /*(if (fromBlock.getSystemName().equals(blockName))*/
                    {
                        // path is in the fromBlock
                        OPath path = getPath(fromBlock, pathName);
                        portal.addPath(path);
                    }
                }
            }
        }
    } else {
        log.error("Portal \"" + userName + "\" has no fromBlock!");
    }
    OBlock toBlock = null;
    Element eToBlk = elem.getChild("toBlock");
    if (eToBlk != null && eToBlk.getAttribute("blockName") != null) {
        String name = eToBlk.getAttribute("blockName").getValue();
        if (toBlockName != null && !toBlockName.equals(name)) {
            log.error("Portal has user name \"" + userName + "\" conflicting with " + portal.toString());
        } else {
            toBlock = getBlock(name);
            if (toBlock != null) {
                portal.setToBlock(toBlock, false);
                toBlock.addPortal(portal);
                List<Element> ePathsToBlock = eToBlk.getChildren("path");
                for (int i = 0; i < ePathsToBlock.size(); i++) {
                    Element e = ePathsToBlock.get(i);
                    String pathName = e.getAttribute("pathName").getValue();
                    String blockName = e.getAttribute("blockName").getValue();
                    if (log.isDebugEnabled()) {
                        log.debug("Load portal= " + userName + " toBlock= " + toBlock.getSystemName() + " pathName= " + pathName + " blockName= " + blockName);
                    }
                    /*if (toBlock.getSystemName().equals(blockName))*/
                    {
                        // path is in the toBlock
                        OPath path = getPath(toBlock, pathName);
                        portal.addPath(path);
                    }
                }
            }
        }
    } else {
        log.error("Portal \"" + userName + "\" has no toBlock!");
    }
    Element eSignal = elem.getChild("fromSignal");
    if (eSignal != null) {
        String name = eSignal.getAttribute("signalName").getValue();
        float length = 0.0f;
        try {
            Attribute attr = eSignal.getAttribute("signalDelay");
            if (attr != null) {
                length = attr.getFloatValue();
            }
        } catch (org.jdom2.DataConversionException e) {
            log.error("Could not parse signalDelay for signal (" + name + ") in portal (" + userName + ")");
        }
        portal.setProtectSignal(Portal.getSignal(name), length, toBlock);
    }
    eSignal = elem.getChild("toSignal");
    if (eSignal != null) {
        String name = eSignal.getAttribute("signalName").getValue();
        float length = 0.0f;
        try {
            Attribute attr = eSignal.getAttribute("signalDelay");
            if (attr != null) {
                length = attr.getFloatValue();
            }
        } catch (org.jdom2.DataConversionException e) {
            log.error("Could not parse signalDelay for signal (" + name + ") in portal (" + userName + ")");
        }
        portal.setProtectSignal(Portal.getSignal(name), length, fromBlock);
    }
    if (log.isDebugEnabled()) {
        log.debug("End Load portal " + userName);
    }
    return portal;
}
Also used : Attribute(org.jdom2.Attribute) Element(org.jdom2.Element) Portal(jmri.jmrit.logix.Portal) OPath(jmri.jmrit.logix.OPath) OBlock(jmri.jmrit.logix.OBlock)

Example 8 with OPath

use of jmri.jmrit.logix.OPath in project JMRI by JMRI.

the class TableFrames method makePathTurnoutFrame.

/*
     * ********************* PathTurnoutFrame *****************************
     */
protected JInternalFrame makePathTurnoutFrame(OBlock block, String pathName) {
    String title = Bundle.getMessage("TitlePathTurnoutTable", block.getDisplayName(), pathName);
    JInternalFrame frame = new JInternalFrame(title, true, true, false, true);
    if (log.isDebugEnabled()) {
        log.debug("makePathTurnoutFrame for Block " + block.getDisplayName() + " and Path " + pathName);
    }
    frame.setName(makePathTurnoutName(block.getSystemName(), pathName));
    OPath path = block.getPathByName(pathName);
    if (path == null) {
        return null;
    }
    PathTurnoutTableModel PathTurnoutModel = new PathTurnoutTableModel(path);
    PathTurnoutModel.init();
    JTable PathTurnoutTable = new JTable(PathTurnoutModel);
    PathTurnoutTable.setTransferHandler(new jmri.util.DnDTableImportExportHandler(new int[] { PathTurnoutTableModel.SETTINGCOLUMN, PathTurnoutTableModel.DELETE_COL }));
    PathTurnoutTable.setDragEnabled(true);
    JComboBox<String> box = new JComboBox<String>(PathTurnoutTableModel.turnoutStates);
    PathTurnoutTable.getColumnModel().getColumn(PathTurnoutTableModel.SETTINGCOLUMN).setCellEditor(new DefaultCellEditor(box));
    PathTurnoutTable.getColumnModel().getColumn(PathTurnoutTableModel.DELETE_COL).setCellEditor(new ButtonEditor(new JButton()));
    PathTurnoutTable.getColumnModel().getColumn(PathTurnoutTableModel.DELETE_COL).setCellRenderer(new ButtonRenderer());
    //PathTurnoutTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    for (int i = 0; i < PathTurnoutModel.getColumnCount(); i++) {
        int width = PathTurnoutModel.getPreferredWidth(i);
        PathTurnoutTable.getColumnModel().getColumn(i).setPreferredWidth(width);
    }
    PathTurnoutTable.sizeColumnsToFit(-1);
    int tableWidth = PathTurnoutTable.getPreferredSize().width;
    PathTurnoutTable.setPreferredScrollableViewportSize(new java.awt.Dimension(tableWidth, ROW_HEIGHT * 5));
    JScrollPane tablePane = new JScrollPane(PathTurnoutTable);
    JPanel contentPane = new JPanel();
    contentPane.setLayout(new BorderLayout(5, 5));
    JLabel prompt = new JLabel(Bundle.getMessage("AddTurnoutPrompt"));
    contentPane.add(prompt, BorderLayout.NORTH);
    contentPane.add(tablePane, BorderLayout.CENTER);
    frame.addInternalFrameListener(this);
    frame.setContentPane(contentPane);
    frame.setLocation(10, 270);
    frame.pack();
    return frame;
}
Also used : JScrollPane(javax.swing.JScrollPane) JPanel(javax.swing.JPanel) ButtonEditor(jmri.util.table.ButtonEditor) JComboBox(javax.swing.JComboBox) JButton(javax.swing.JButton) JLabel(javax.swing.JLabel) OPath(jmri.jmrit.logix.OPath) Point(java.awt.Point) DefaultCellEditor(javax.swing.DefaultCellEditor) Dimension(java.awt.Dimension) BorderLayout(java.awt.BorderLayout) JTable(javax.swing.JTable) JInternalFrame(javax.swing.JInternalFrame) ButtonRenderer(jmri.util.table.ButtonRenderer)

Example 9 with OPath

use of jmri.jmrit.logix.OPath in project JMRI by JMRI.

the class OBlockManagerXml method store.

/**
     * Store the contents of a OBlockManager.
     *
     * @param o Object to store, of type BlockManager
     * @return Element containing the complete info
     */
@Override
public Element store(Object o) {
    Element blocks = new Element("oblocks");
    blocks.setAttribute("class", "jmri.jmrit.logix.configurexml.OBlockManagerXml");
    OBlockManager manager = (OBlockManager) o;
    Iterator<String> iter = manager.getSystemNameList().iterator();
    while (iter.hasNext()) {
        String sname = iter.next();
        OBlock block = manager.getBySystemName(sname);
        String uname = block.getUserName();
        if (log.isDebugEnabled()) {
            log.debug("OBlock: sysName= " + sname + ", userName= " + uname);
        }
        Element elem = new Element("oblock");
        elem.setAttribute("systemName", sname);
        if (uname != null && uname.length() > 0) {
            // doing this for compatibility during 2.9.* series
            elem.setAttribute("userName", uname);
            elem.addContent(new Element("userName").addContent(uname));
        }
        String comment = block.getComment();
        if (comment != null) {
            Element c = new Element("comment");
            c.addContent(comment);
            elem.addContent(c);
        }
        elem.setAttribute("length", "" + block.getLengthMm());
        elem.setAttribute("units", block.isMetric() ? "true" : "false");
        elem.setAttribute("curve", "" + block.getCurvature());
        if (block.getNamedSensor() != null) {
            Element se = new Element("sensor");
            se.setAttribute("systemName", block.getNamedSensor().getName());
            elem.addContent(se);
        }
        if (block.getNamedErrorSensor() != null) {
            Element se = new Element("errorSensor");
            se.setAttribute("systemName", block.getNamedErrorSensor().getName());
            elem.addContent(se);
        }
        if (block.getReporter() != null) {
            Element se = new Element("reporter");
            se.setAttribute("systemName", block.getReporter().getSystemName());
            se.setAttribute("reportCurrent", block.isReportingCurrent() ? "true" : "false");
            elem.addContent(se);
        }
        elem.setAttribute("permissive", block.getPermissiveWorking() ? "true" : "false");
        elem.setAttribute("speedNotch", block.getBlockSpeed());
        List<Path> paths = block.getPaths();
        for (int j = 0; j < paths.size(); j++) {
            elem.addContent(storePath((OPath) paths.get(j)));
        }
        List<Portal> portals = block.getPortals();
        for (int i = 0; i < portals.size(); i++) {
            elem.addContent(storePortal(portals.get(i)));
        }
        // and put this element out
        blocks.addContent(elem);
    }
    return blocks;
}
Also used : OPath(jmri.jmrit.logix.OPath) Path(jmri.Path) Element(org.jdom2.Element) Portal(jmri.jmrit.logix.Portal) OBlockManager(jmri.jmrit.logix.OBlockManager) OPath(jmri.jmrit.logix.OPath) OBlock(jmri.jmrit.logix.OBlock)

Example 10 with OPath

use of jmri.jmrit.logix.OPath in project JMRI by JMRI.

the class OBlockManagerXml method storePortal.

private static Element storePortal(Portal portal) {
    Element elem = new Element("portal");
    elem.setAttribute("systemName", portal.getSystemName());
    elem.setAttribute("portalName", portal.getName());
    OBlock block = portal.getFromBlock();
    if (block != null) {
        Element fromElem = new Element("fromBlock");
        fromElem.setAttribute("blockName", block.getSystemName());
        List<OPath> paths = portal.getFromPaths();
        if (paths != null) {
            for (int i = 0; i < paths.size(); i++) {
                OPath path = paths.get(i);
                fromElem.addContent(storePathKey(path));
            }
        }
        elem.addContent(fromElem);
    } else {
        log.error("Portal \"" + portal.getName() + "\" has no fromBlock!");
    }
    NamedBean signal = portal.getFromSignal();
    if (signal != null) {
        Element fromElem = new Element("fromSignal");
        fromElem.setAttribute("signalName", signal.getSystemName());
        fromElem.setAttribute("signalDelay", "" + portal.getFromSignalOffset());
        elem.addContent(fromElem);
    }
    block = portal.getToBlock();
    if (block != null) {
        Element toElem = new Element("toBlock");
        toElem.setAttribute("blockName", block.getSystemName());
        List<OPath> paths = portal.getToPaths();
        if (paths != null) {
            for (int i = 0; i < paths.size(); i++) {
                OPath path = paths.get(i);
                toElem.addContent(storePathKey(path));
            }
        }
        elem.addContent(toElem);
    } else {
        log.error("Portal \"" + portal.getName() + "\" has no toBlock!");
    }
    signal = portal.getToSignal();
    if (signal != null) {
        Element toElem = new Element("toSignal");
        toElem.setAttribute("signalName", signal.getSystemName());
        toElem.setAttribute("signalDelay", "" + portal.getToSignalOffset());
        elem.addContent(toElem);
    }
    return elem;
}
Also used : NamedBean(jmri.NamedBean) Element(org.jdom2.Element) OPath(jmri.jmrit.logix.OPath) OBlock(jmri.jmrit.logix.OBlock)

Aggregations

OPath (jmri.jmrit.logix.OPath)16 Point (java.awt.Point)7 Portal (jmri.jmrit.logix.Portal)6 Path (jmri.Path)5 OBlock (jmri.jmrit.logix.OBlock)4 Element (org.jdom2.Element)4 JPanel (javax.swing.JPanel)3 BeanSetting (jmri.BeanSetting)3 Positionable (jmri.jmrit.display.Positionable)3 Dimension (java.awt.Dimension)2 ActionEvent (java.awt.event.ActionEvent)2 ActionListener (java.awt.event.ActionListener)2 ArrayList (java.util.ArrayList)2 BoxLayout (javax.swing.BoxLayout)2 JButton (javax.swing.JButton)2 JLabel (javax.swing.JLabel)2 JScrollPane (javax.swing.JScrollPane)2 Turnout (jmri.Turnout)2 IndicatorTrack (jmri.jmrit.display.IndicatorTrack)2 OBlockManager (jmri.jmrit.logix.OBlockManager)2