Search in sources :

Example 11 with Content

use of org.jdom2.Content in project JMRI by JMRI.

the class SignalSpeedMap method loadRoot.

public void loadRoot(@Nonnull Element root) {
    try {
        Element e = root.getChild("interpretation");
        String sval = e.getText().toUpperCase();
        switch(sval) {
            case "PERCENTNORMAL":
                _interpretation = PERCENT_NORMAL;
                break;
            case "PERCENTTHROTTLE":
                _interpretation = PERCENT_THROTTLE;
                break;
            default:
                throw new JDOMException("invalid content for interpretation: " + sval);
        }
        log.debug("_interpretation= {}", _interpretation);
        e = root.getChild("msPerIncrement");
        _sStepDelay = 1000;
        try {
            _sStepDelay = Integer.parseInt(e.getText());
        } catch (NumberFormatException nfe) {
            throw new JDOMException("invalid content for msPerIncrement: " + e.getText());
        }
        if (_sStepDelay < 200) {
            _sStepDelay = 200;
            log.warn("\"msPerIncrement\" must be at least 200 milliseconds.");
        }
        log.debug("_sStepDelay = {}", _sStepDelay);
        e = root.getChild("stepsPerIncrement");
        try {
            _numSteps = Integer.parseInt(e.getText());
        } catch (NumberFormatException nfe) {
            throw new JDOMException("invalid content for stepsPerIncrement: " + e.getText());
        }
        if (_numSteps < 1) {
            _numSteps = 1;
        }
        List<Element> list = root.getChild("aspectSpeeds").getChildren();
        _table.clear();
        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i).getName();
            Float speed;
            try {
                speed = Float.valueOf(list.get(i).getText());
            } catch (NumberFormatException nfe) {
                log.error("invalid content for {} = {}", name, list.get(i).getText());
                throw new JDOMException("invalid content for " + name + " = " + list.get(i).getText());
            }
            log.debug("Add {}, {} to AspectSpeed Table", name, speed);
            _table.put(name, speed);
        }
        synchronized (this._headTable) {
            _headTable.clear();
            List<Element> l = root.getChild("appearanceSpeeds").getChildren();
            for (int i = 0; i < l.size(); i++) {
                String name = l.get(i).getName();
                String speed = l.get(i).getText();
                _headTable.put(Bundle.getMessage(name), speed);
                log.debug("Add {}={}, {} to AppearanceSpeed Table", name, Bundle.getMessage(name), speed);
            }
        }
    } catch (org.jdom2.JDOMException e) {
        log.error("error reading speed map elements due to: {}", e);
    }
}
Also used : JDOMException(org.jdom2.JDOMException) Element(org.jdom2.Element) JDOMException(org.jdom2.JDOMException)

Example 12 with Content

use of org.jdom2.Content in project JMRI by JMRI.

the class ControlPanelEditorXml method load.

/**
     * Create a ControlPanelEditor object, then register and fill it, then pop
     * it in a JFrame
     *
     * @param shared Top level Element to unpack.
     * @return true if successful
     */
@Override
public boolean load(Element shared, Element perNode) {
    boolean result = true;
    // find coordinates
    int x = 0;
    int y = 0;
    int height = 400;
    int width = 300;
    try {
        x = shared.getAttribute("x").getIntValue();
        y = shared.getAttribute("y").getIntValue();
        height = shared.getAttribute("height").getIntValue();
        width = shared.getAttribute("width").getIntValue();
    } catch (org.jdom2.DataConversionException e) {
        log.error("failed to convert ControlPanelEditor's attribute");
        result = false;
    }
    // find the name
    String name = "Control Panel";
    if (shared.getAttribute("name") != null) {
        name = shared.getAttribute("name").getValue();
    }
    // confirm that panel hasn't already been loaded
    if (jmri.jmrit.display.PanelMenu.instance().isPanelNameUsed(name)) {
        log.warn("File contains a panel with the same name ({}) as an existing panel", name);
        result = false;
    }
    ControlPanelEditor panel = new ControlPanelEditor(name);
    // save painting until last
    panel.getTargetFrame().setVisible(false);
    jmri.jmrit.display.PanelMenu.instance().addEditorPanel(panel);
    // Load editor option flags. This has to be done before the content 
    // items are loaded, to preserve the individual item settings
    Attribute a;
    boolean value = true;
    if ((a = shared.getAttribute("editable")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setAllEditable(value);
    value = true;
    if ((a = shared.getAttribute("positionable")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setAllPositionable(value);
    /*
         value = false;
         if ((a = element.getAttribute("showcoordinates"))!=null && a.getValue().equals("yes"))
         value = true;
         panel.setShowCoordinates(value);
         */
    value = true;
    if ((a = shared.getAttribute("showtooltips")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setAllShowTooltip(value);
    value = true;
    if ((a = shared.getAttribute("controlling")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setAllControlling(value);
    value = false;
    if ((a = shared.getAttribute("hide")) != null && a.getValue().equals("yes")) {
        value = true;
    }
    panel.setShowHidden(value);
    value = true;
    if ((a = shared.getAttribute("panelmenu")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setPanelMenuVisible(value);
    value = true;
    if ((a = shared.getAttribute("shapeSelect")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setShapeSelect(value);
    if ((a = shared.getAttribute("state")) != null) {
        try {
            int xState = a.getIntValue();
            panel.setExtendedState(xState);
        } catch (org.jdom2.DataConversionException e) {
            log.error("failed to convert ControlPanelEditor's extended State");
            result = false;
        }
    }
    String state = "both";
    if ((a = shared.getAttribute("scrollable")) != null) {
        state = a.getValue();
    }
    panel.setScroll(state);
    try {
        int red = shared.getAttribute("redBackground").getIntValue();
        int blue = shared.getAttribute("blueBackground").getIntValue();
        int green = shared.getAttribute("greenBackground").getIntValue();
        panel.setBackgroundColor(new Color(red, green, blue));
    } catch (org.jdom2.DataConversionException e) {
        log.warn("Could not parse color attributes!");
    } catch (NullPointerException e) {
    // considered normal if the attributes are not present
    }
    Element icons = shared.getChild("icons");
    /*        if (icons != null) {
            HashMap<String, NamedIcon> portalIconMap = new HashMap<String, NamedIcon>();
            portalIconMap.put(PortalIcon.VISIBLE, loadIcon("visible", icons, panel));
            portalIconMap.put(PortalIcon.PATH, loadIcon("path_edit", icons, panel));
            portalIconMap.put(PortalIcon.HIDDEN, loadIcon("hidden", icons, panel));
            portalIconMap.put(PortalIcon.TO_ARROW, loadIcon("to_arrow", icons, panel));
            portalIconMap.put(PortalIcon.FROM_ARROW, loadIcon("from_arrow", icons, panel));
            panel.setDefaultPortalIcons(portalIconMap);
        }*/
    shared.removeChild("icons");
    //set the (global) editor display widgets to their flag settings
    panel.initView();
    // load the contents
    List<Element> items = shared.getChildren();
    for (Element item : items) {
        String adapterName = item.getAttribute("class").getValue();
        log.debug("load via {}", adapterName);
        try {
            XmlAdapter adapter = (XmlAdapter) Class.forName(adapterName).newInstance();
            // and do it
            adapter.load(item, panel);
            if (!panel.loadOK()) {
                result = false;
            }
        } catch (Exception e) {
            log.error("Exception while loading {}: {}", item.getName(), e.getMessage(), e);
            result = false;
        }
    }
    if (icons != null) {
        HashMap<String, NamedIcon> portalIconMap = new HashMap<String, NamedIcon>();
        portalIconMap.put(PortalIcon.VISIBLE, loadIcon("visible", icons, panel));
        portalIconMap.put(PortalIcon.PATH, loadIcon("path_edit", icons, panel));
        portalIconMap.put(PortalIcon.HIDDEN, loadIcon("hidden", icons, panel));
        portalIconMap.put(PortalIcon.TO_ARROW, loadIcon("to_arrow", icons, panel));
        portalIconMap.put(PortalIcon.FROM_ARROW, loadIcon("from_arrow", icons, panel));
        panel.setDefaultPortalIcons(portalIconMap);
    }
    // dispose of url correction data
    panel.disposeLoadData();
    // display the results, with the editor in back
    panel.pack();
    panel.setAllEditable(panel.isEditable());
    // register the resulting panel for later configuration
    ConfigureManager cm = InstanceManager.getNullableDefault(jmri.ConfigureManager.class);
    if (cm != null) {
        cm.registerUser(panel);
    }
    // reset the size and position, in case the display caused it to change
    panel.getTargetFrame().setLocation(x, y);
    panel.getTargetFrame().setSize(width, height);
    panel.setTitle();
    // always show the panel
    panel.getTargetFrame().setVisible(true);
    // do last to set putItem override - unused.
    panel.loadComplete();
    return result;
}
Also used : NamedIcon(jmri.jmrit.catalog.NamedIcon) ControlPanelEditor(jmri.jmrit.display.controlPanelEditor.ControlPanelEditor) Attribute(org.jdom2.Attribute) HashMap(java.util.HashMap) Color(java.awt.Color) Element(org.jdom2.Element) Point(java.awt.Point) ConfigureManager(jmri.ConfigureManager) AbstractXmlAdapter(jmri.configurexml.AbstractXmlAdapter) XmlAdapter(jmri.configurexml.XmlAdapter)

Example 13 with Content

use of org.jdom2.Content in project JMRI by JMRI.

the class LayoutEditorXml method load.

/**
     * Create a LayoutEditor object, then register and fill it, then pop it in a
     * JFrame
     *
     * @param shared Top level Element to unpack.
     */
@Override
public boolean load(Element shared, Element perNode) {
    boolean result = true;
    Attribute a;
    // find coordinates
    int x = 0;
    int y = 0;
    // From this version onwards separate sizes for window and panel are used
    int windowHeight = 400;
    int windowWidth = 300;
    int panelHeight = 340;
    int panelWidth = 280;
    int sidetrackwidth = 3;
    int mainlinetrackwidth = 3;
    try {
        x = shared.getAttribute("x").getIntValue();
        y = shared.getAttribute("y").getIntValue();
        // For compatibility with previous versions, try and see if height and width tags are contained in the file
        if ((a = shared.getAttribute("height")) != null) {
            windowHeight = a.getIntValue();
            panelHeight = windowHeight - 60;
        }
        if ((a = shared.getAttribute("width")) != null) {
            windowWidth = a.getIntValue();
            panelWidth = windowWidth - 18;
        }
        // For files created by the new version, retrieve window and panel sizes
        if ((a = shared.getAttribute("windowheight")) != null) {
            windowHeight = a.getIntValue();
        }
        if ((a = shared.getAttribute("windowwidth")) != null) {
            windowWidth = a.getIntValue();
        }
        if ((a = shared.getAttribute("panelheight")) != null) {
            panelHeight = a.getIntValue();
        }
        if ((a = shared.getAttribute("panelwidth")) != null) {
            panelWidth = a.getIntValue();
        }
        mainlinetrackwidth = shared.getAttribute("mainlinetrackwidth").getIntValue();
        sidetrackwidth = shared.getAttribute("sidetrackwidth").getIntValue();
    } catch (org.jdom2.DataConversionException e) {
        log.error("failed to convert LayoutEditor's attribute");
        result = false;
    }
    double xScale = 1.0;
    double yScale = 1.0;
    a = shared.getAttribute("xscale");
    if (a != null) {
        try {
            xScale = (Float.parseFloat(a.getValue()));
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    a = shared.getAttribute("yscale");
    if (a != null) {
        try {
            yScale = (Float.parseFloat(a.getValue()));
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    // find the name and default track color
    String name = "";
    if (shared.getAttribute("name") != null) {
        name = shared.getAttribute("name").getValue();
    }
    if (jmri.jmrit.display.PanelMenu.instance().isPanelNameUsed(name)) {
        JFrame frame = new JFrame("DialogDemo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        log.warn("File contains a panel with the same name (" + name + ") as an existing panel");
        int n = JOptionPane.showConfirmDialog(frame, java.text.MessageFormat.format(rb.getString("DuplicatePanel"), new Object[] { name }), rb.getString("DuplicatePanelTitle"), JOptionPane.YES_NO_OPTION);
        if (n == JOptionPane.NO_OPTION) {
            return false;
        }
    }
    String defaultColor = "black";
    String defaultTextColor = "black";
    if (shared.getAttribute("defaulttrackcolor") != null) {
        defaultColor = shared.getAttribute("defaulttrackcolor").getValue();
    }
    if (shared.getAttribute("defaulttextcolor") != null) {
        defaultTextColor = shared.getAttribute("defaulttextcolor").getValue();
    }
    //default to using use default track color for circle color
    String turnoutCircleColor = "track";
    if (shared.getAttribute("turnoutcirclecolor") != null) {
        turnoutCircleColor = shared.getAttribute("turnoutcirclecolor").getValue();
    }
    int turnoutCircleSize = 2;
    if (shared.getAttribute("turnoutcirclesize") != null) {
        try {
            turnoutCircleSize = shared.getAttribute("turnoutcirclesize").getIntValue();
        } catch (DataConversionException e1) {
            //leave at default if cannot convert
            log.warn("unable to convert turnoutcirclesize");
        }
    }
    boolean turnoutDrawUnselectedLeg = true;
    if ((a = shared.getAttribute("turnoutdrawunselectedleg")) != null && a.getValue().equals("no")) {
        turnoutDrawUnselectedLeg = false;
    }
    // create the objects
    LayoutEditor panel = new LayoutEditor(name);
    panel.setLayoutName(name);
    panel.setMainlineTrackWidth(mainlinetrackwidth);
    panel.setSideTrackWidth(sidetrackwidth);
    panel.setDefaultTrackColor(defaultColor);
    panel.setDefaultTextColor(defaultTextColor);
    panel.setTurnoutCircleColor(turnoutCircleColor);
    panel.setTurnoutCircleSize(turnoutCircleSize);
    panel.setTurnoutDrawUnselectedLeg(turnoutDrawUnselectedLeg);
    panel.setXScale(xScale);
    panel.setYScale(yScale);
    // turnout size parameters
    double sz = 20.0;
    a = shared.getAttribute("turnoutbx");
    if (a != null) {
        try {
            sz = (Float.parseFloat(a.getValue()));
            panel.setTurnoutBX(sz);
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    a = shared.getAttribute("turnoutcx");
    if (a != null) {
        try {
            sz = (Float.parseFloat(a.getValue()));
            panel.setTurnoutCX(sz);
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    a = shared.getAttribute("turnoutwid");
    if (a != null) {
        try {
            sz = (Float.parseFloat(a.getValue()));
            panel.setTurnoutWid(sz);
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    a = shared.getAttribute("xoverlong");
    if (a != null) {
        try {
            sz = (Float.parseFloat(a.getValue()));
            panel.setXOverLong(sz);
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    a = shared.getAttribute("xoverhwid");
    if (a != null) {
        try {
            sz = (Float.parseFloat(a.getValue()));
            panel.setXOverHWid(sz);
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    a = shared.getAttribute("xovershort");
    if (a != null) {
        try {
            sz = (Float.parseFloat(a.getValue()));
            panel.setXOverShort(sz);
        } catch (Exception e) {
            log.error("failed to convert to float - " + a.getValue());
            result = false;
        }
    }
    // grid size parameter
    // this value is never used but it's the default
    int iz = 10;
    a = shared.getAttribute("gridSize");
    if (a != null) {
        try {
            iz = (Integer.parseInt(a.getValue()));
            panel.setGridSize(iz);
        } catch (Exception e) {
            log.error("failed to convert to int - " + a.getValue());
            result = false;
        }
    }
    // second grid size parameter
    // this value is never used but it's the default
    iz = 10;
    a = shared.getAttribute("gridSize2nd");
    if (a != null) {
        try {
            iz = (Integer.parseInt(a.getValue()));
            panel.setGridSize2nd(iz);
        } catch (Exception e) {
            log.error("failed to convert to int - " + a.getValue());
            result = false;
        }
    }
    // set contents state
    String slValue = "both";
    if ((a = shared.getAttribute("sliders")) != null && a.getValue().equals("no")) {
        slValue = "none";
    }
    if ((a = shared.getAttribute("scrollable")) != null) {
        slValue = a.getValue();
    }
    boolean edValue = true;
    if ((a = shared.getAttribute("editable")) != null && a.getValue().equals("no")) {
        edValue = false;
    }
    boolean value = true;
    if ((a = shared.getAttribute("positionable")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setAllPositionable(value);
    value = true;
    if ((a = shared.getAttribute("controlling")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setAllControlling(value);
    value = true;
    if ((a = shared.getAttribute("animating")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setTurnoutAnimation(value);
    boolean hbValue = true;
    if ((a = shared.getAttribute("showhelpbar")) != null && a.getValue().equals("no")) {
        hbValue = false;
    }
    boolean dgValue = false;
    if ((a = shared.getAttribute("drawgrid")) != null && a.getValue().equals("yes")) {
        dgValue = true;
    }
    boolean sgaValue = false;
    if ((a = shared.getAttribute("snaponadd")) != null && a.getValue().equals("yes")) {
        sgaValue = true;
    }
    boolean sgmValue = false;
    if ((a = shared.getAttribute("snaponmove")) != null && a.getValue().equals("yes")) {
        sgmValue = true;
    }
    boolean aaValue = false;
    if ((a = shared.getAttribute("antialiasing")) != null && a.getValue().equals("yes")) {
        aaValue = true;
    }
    value = false;
    if ((a = shared.getAttribute("turnoutcircles")) != null && a.getValue().equals("yes")) {
        value = true;
    }
    panel.setTurnoutCircles(value);
    value = false;
    if ((a = shared.getAttribute("tooltipsnotedit")) != null && a.getValue().equals("yes")) {
        value = true;
    }
    panel.setTooltipsNotEdit(value);
    value = false;
    if ((a = shared.getAttribute("autoblkgenerate")) != null && a.getValue().equals("yes")) {
        value = true;
    }
    panel.setAutoBlockAssignment(value);
    value = true;
    if ((a = shared.getAttribute("tooltipsinedit")) != null && a.getValue().equals("no")) {
        value = false;
    }
    panel.setTooltipsInEdit(value);
    // set default track color
    if ((a = shared.getAttribute("defaulttrackcolor")) != null) {
        panel.setDefaultTrackColor(a.getValue());
    }
    // set default track color
    if ((a = shared.getAttribute("defaultoccupiedtrackcolor")) != null) {
        panel.setDefaultOccupiedTrackColor(a.getValue());
    }
    // set default track color
    if ((a = shared.getAttribute("defaultalternativetrackcolor")) != null) {
        panel.setDefaultAlternativeTrackColor(a.getValue());
    }
    try {
        int red = shared.getAttribute("redBackground").getIntValue();
        int blue = shared.getAttribute("blueBackground").getIntValue();
        int green = shared.getAttribute("greenBackground").getIntValue();
        panel.setDefaultBackgroundColor(ColorUtil.colorToString(new Color(red, green, blue)));
        panel.setBackgroundColor(new Color(red, green, blue));
    } catch (org.jdom2.DataConversionException e) {
        log.warn("Could not parse color attributes!");
    } catch (NullPointerException e) {
    // considered normal if the attributes are not present
    }
    if (shared.getAttribute("useDirectTurnoutControl") != null) {
        if (shared.getAttribute("useDirectTurnoutControl").getValue().equals("yes")) {
            panel.setDirectTurnoutControl(true);
        }
    }
    // note: moving zoom attribute into per-window user preference
    //if (shared.getAttribute("zoom") != null) {
    //    panel.setZoom(Double.valueOf(shared.getAttribute("zoom").getValue()));
    //}
    // Set editor's option flags, load content after
    // this so that individual item flags are set as saved
    panel.initView();
    // load the contents
    List<Element> items = shared.getChildren();
    for (int i = 0; i < items.size(); i++) {
        // get the class, hence the adapter object to do loading
        Element item = items.get(i);
        String adapterName = item.getAttribute("class").getValue();
        if (log.isDebugEnabled()) {
            String id = "<null>";
            try {
                id = item.getAttribute("ident").getValue();
                log.debug("Load " + id + " for [" + panel.getName() + "] via " + adapterName);
            } catch (Exception e) {
                log.debug("Load layout object for [" + panel.getName() + "] via " + adapterName);
            }
        }
        try {
            XmlAdapter adapter = (XmlAdapter) Class.forName(adapterName).newInstance();
            // and do it
            adapter.load(item, panel);
            if (!panel.loadOK()) {
                result = false;
            }
        } catch (Exception e) {
            log.error("Exception while loading " + item.getName() + ":" + e);
            result = false;
            e.printStackTrace();
        }
    }
    // dispose of url correction data
    panel.disposeLoadData();
    // final initialization of objects
    panel.setConnections();
    // display the results
    // set first since other attribute use this setting
    panel.setAllEditable(edValue);
    panel.setShowHelpBar(hbValue);
    panel.setDrawGrid(dgValue);
    panel.setSnapOnAdd(sgaValue);
    panel.setSnapOnMove(sgmValue);
    panel.setAntialiasingOn(aaValue);
    panel.setScroll(slValue);
    panel.pack();
    panel.setLayoutDimensions(windowWidth, windowHeight, x, y, panelWidth, panelHeight);
    // always show the panel
    panel.setVisible(true);
    panel.resetDirty();
    // register the resulting panel for later configuration
    ConfigureManager cm = InstanceManager.getNullableDefault(jmri.ConfigureManager.class);
    if (cm != null) {
        cm.registerUser(panel);
    }
    //open Dispatcher frame if any Transits are defined, and open Dispatcher flag set on
    if (jmri.InstanceManager.getDefault(jmri.TransitManager.class).getSystemNameList().size() > 0) {
        if (shared.getAttribute("openDispatcher") != null) {
            if (shared.getAttribute("openDispatcher").getValue().equals("yes")) {
                panel.setOpenDispatcherOnLoad(true);
                jmri.jmrit.dispatcher.DispatcherFrame df = jmri.jmrit.dispatcher.DispatcherFrame.instance();
                df.loadAtStartup();
            } else {
                panel.setOpenDispatcherOnLoad(false);
            }
        }
    }
    return result;
}
Also used : LayoutEditor(jmri.jmrit.display.layoutEditor.LayoutEditor) Attribute(org.jdom2.Attribute) Color(java.awt.Color) Element(org.jdom2.Element) DataConversionException(org.jdom2.DataConversionException) ConfigureManager(jmri.ConfigureManager) JFrame(javax.swing.JFrame) DataConversionException(org.jdom2.DataConversionException) DataConversionException(org.jdom2.DataConversionException) AbstractXmlAdapter(jmri.configurexml.AbstractXmlAdapter) XmlAdapter(jmri.configurexml.XmlAdapter)

Example 14 with Content

use of org.jdom2.Content in project JMRI by JMRI.

the class XmlFileTest method testValidationControl.

public void testValidationControl() {
    final String docTypeValid = "<!DOCTYPE decoderIndex-config SYSTEM \"decoderIndex-config.dtd\">";
    final String docTypeInvalid = "<!DOCTYPE layout-config SYSTEM \"layout-config-2-5-4.dtd\">";
    final String contentSchemaValid = "<decoderIndex-config xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"http://jmri.org/xml/schema/decoder.xsd\">";
    final String contentSchemaInvalid = "<decoderIndex-config xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"http://jmri.org/xml/schema/layout-2-9-6.xsd \">";
    final String contentSchemaAbsent = "<decoderIndex-config>";
    final String ending = "<decoderIndex><mfgList nmraListDate=\"\" updated=\"\"><manufacturer mfg=\"\"/></mfgList><familyList><family mfg=\"\" name=\"\" file=\"\"/></familyList></decoderIndex></decoderIndex-config>";
    for (XmlFile.Validate validate : XmlFile.Validate.values()) {
        for (Type theDTD : Type.values()) {
            for (Type theSchema : Type.values()) {
                boolean passes = true;
                boolean checkDTD = (validate == XmlFile.Validate.CheckDtd) || (validate == XmlFile.Validate.CheckDtdThenSchema);
                boolean checkSchema = (validate == XmlFile.Validate.RequireSchema) || (validate == XmlFile.Validate.CheckDtdThenSchema);
                // Cannot find the declaration of element 'decoderIndex-config'.
                if (theSchema == Type.INVALID && checkSchema)
                    passes = false;
                // Cannot find the declaration of element 'decoderIndex-config'.
                if (theSchema == Type.ABSENT && checkSchema)
                    passes = false;
                // Document root element "decoderIndex-config", must match DOCTYPE root "layout-config".
                if (theDTD == Type.INVALID && checkDTD)
                    passes = false;
                // but if you're checking both
                if (checkDTD && checkSchema) {
                    // a pass is a pass
                    if (theDTD == Type.VALID)
                        passes = true;
                    if (theSchema == Type.VALID)
                        passes = true;
                    // but a DTD fail is a fail
                    if (theDTD == Type.INVALID)
                        passes = false;
                }
                // create input
                String content = "";
                if (theDTD == Type.VALID)
                    content += docTypeValid;
                if (theDTD == Type.INVALID)
                    content += docTypeInvalid;
                if (theSchema == Type.VALID)
                    content += contentSchemaValid;
                if (theSchema == Type.INVALID)
                    content += contentSchemaInvalid;
                if (theSchema == Type.ABSENT)
                    content += contentSchemaAbsent;
                content += ending;
                boolean result = false;
                try {
                    XmlFile xf = new XmlFile() {

                        {
                            warned = false;
                        }
                    };
                    // odd syntax is due to XmlFile being abstract
                    xf.setValidate(validate);
                    xf.rootFromInputStream(new java.io.ByteArrayInputStream(content.getBytes(java.nio.charset.StandardCharsets.UTF_8)));
                    result = true;
                } catch (Exception ex) {
                    result = false;
                    log.debug(ex.toString());
                }
                log.debug("DTD: " + theDTD + " SCHEMA: " + theSchema + " (" + validate + ") expects " + passes + " was " + result + (passes != result ? " !!!!!!!!!!!!!!!!!!!!!!!!!" : ""));
                Assert.assertEquals("DTD: " + theDTD + " SCHEMA: " + theSchema + " (" + validate + ")", passes, result);
            }
        }
    }
}
Also used : DocType(org.jdom2.DocType)

Example 15 with Content

use of org.jdom2.Content in project JMRI by JMRI.

the class BlockManagerXml method store.

/**
     * Store the contents of a BlockManager.
     *
     * @param o Object to store, of type BlockManager
     * @return Element containing the complete info
     */
@Override
public Element store(Object o) {
    Element blocks = new Element("blocks");
    setStoreElementClass(blocks);
    BlockManager tm = (BlockManager) o;
    if (tm != null) {
        java.util.Iterator<String> iter = tm.getSystemNameList().iterator();
        // don't return an element if there are not blocks to include
        if (!iter.hasNext()) {
            return null;
        }
        blocks.addContent(new Element("defaultspeed").addContent(tm.getDefaultSpeed()));
        // write out first set of blocks without contents
        while (iter.hasNext()) {
            try {
                String sname = iter.next();
                if (sname == null) {
                    log.error("System name null during store");
                } else {
                    Block b = tm.getBySystemName(sname);
                    // the following null check is to catch a null pointer exception that sometimes was found to happen
                    if (b == null) {
                        log.error("Null block during store - sname = " + sname);
                    } else {
                        Element elem = new Element("block");
                        elem.addContent(new Element("systemName").addContent(sname));
                        // the following null check is to catch a null pointer exception that sometimes was found to happen
                        String uname = b.getUserName();
                        if ((uname != null) && (!uname.equals(""))) {
                            elem.addContent(new Element("userName").addContent(b.getUserName()));
                        }
                        if (log.isDebugEnabled()) {
                            log.debug("initial store Block " + sname);
                        }
                        // and put this element out
                        blocks.addContent(elem);
                    }
                }
            } catch (Exception e) {
                log.error(e.toString());
            }
        }
        // write out again with contents
        iter = tm.getSystemNameList().iterator();
        while (iter.hasNext()) {
            String sname = iter.next();
            if (sname == null) {
                log.error("System name null during store skipped for this block");
            } else {
                Block b = tm.getBySystemName(sname);
                // the following null check is to catch a null pointer exception that sometimes was found to happen
                if (b == null) {
                    log.error("Null Block during store - second store skipped for this block - " + sname);
                } else {
                    String uname = b.getUserName();
                    if (uname == null) {
                        uname = "";
                    }
                    Element elem = new Element("block");
                    elem.addContent(new Element("systemName").addContent(sname));
                    if (log.isDebugEnabled()) {
                        log.debug("second store Block " + sname + ":" + uname);
                    }
                    // store length and curvature attributes
                    elem.setAttribute("length", Float.toString(b.getLengthMm()));
                    elem.setAttribute("curve", Integer.toString(b.getCurvature()));
                    // store common parts
                    storeCommon(b, elem);
                    if ((!b.getBlockSpeed().equals("")) && !b.getBlockSpeed().contains("Global")) {
                        elem.addContent(new Element("speed").addContent(b.getBlockSpeed()));
                    }
                    String perm = "no";
                    if (b.getPermissiveWorking()) {
                        perm = "yes";
                    }
                    elem.addContent(new Element("permissive").addContent(perm));
                    // Add content. First, the sensor.
                    if (b.getNamedSensor() != null) {
                        elem.addContent(new Element("occupancysensor").addContent(b.getNamedSensor().getName()));
                    }
                    if (b.getDeniedBlocks().size() > 0) {
                        Element denied = new Element("deniedBlocks");
                        b.getDeniedBlocks().forEach((deniedBlock) -> {
                            denied.addContent(new Element("block").addContent(deniedBlock));
                        });
                        elem.addContent(denied);
                    }
                    // Now the Reporter
                    Reporter r = b.getReporter();
                    if (r != null) {
                        Element re = new Element("reporter");
                        re.setAttribute("systemName", r.getSystemName());
                        re.setAttribute("useCurrent", b.isReportingCurrent() ? "yes" : "no");
                        elem.addContent(re);
                    }
                    if (tm.isSavedPathInfo()) {
                        // then the paths
                        List<Path> paths = b.getPaths();
                        for (int i = 0; i < paths.size(); i++) {
                            addPath(elem, paths.get(i));
                        }
                    // and put this element out
                    }
                    blocks.addContent(elem);
                }
            }
        }
    }
    return blocks;
}
Also used : Path(jmri.Path) BlockManager(jmri.BlockManager) Element(org.jdom2.Element) Reporter(jmri.Reporter) Block(jmri.Block)

Aggregations

Element (org.jdom2.Element)77 Document (org.jdom2.Document)27 IOException (java.io.IOException)18 JDOMException (org.jdom2.JDOMException)16 File (java.io.File)11 MCRException (org.mycore.common.MCRException)11 Content (org.jdom2.Content)10 MCRContent (org.mycore.common.content.MCRContent)10 MCRJDOMContent (org.mycore.common.content.MCRJDOMContent)10 XMLOutputter (org.jdom2.output.XMLOutputter)9 SAXBuilder (org.jdom2.input.SAXBuilder)8 ArrayList (java.util.ArrayList)7 Test (org.junit.Test)7 Attribute (org.jdom2.Attribute)6 MCRPath (org.mycore.datamodel.niofs.MCRPath)6 SAXException (org.xml.sax.SAXException)6 JsonElement (com.google.gson.JsonElement)5 Color (java.awt.Color)4 MCRDerivate (org.mycore.datamodel.metadata.MCRDerivate)4 MCRObject (org.mycore.datamodel.metadata.MCRObject)4