开发者

Netbeans platform action difficulties

I used a tutorial on the netbeans website (which is offline because of server issues) to create an action that reads through XML and outputs some information on it. All well and good, but the action is not allowing me to invoke it on certain XML files and I have no useful resources to call upon to help with this. For example, when I run the program it allows me to call the action on a manifest file (which isn't even xml, and it err's out accordingly) but not on a .xml file. Here's the code that may be the culprit that I changed from the tutorial. I figured it would make the "Show XML" message always enabled, but it is disabled still on xml files.

@ActionReferences({
    @ActionReference(path = "Editors/Popup", position = 1100)
})

Here's my SSCCE (sic):

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.versifit.udl.xml;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.io.InputStream;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionRegistration;
import org.openide.cookies.EditorCookie;
import org.openide.util.Exceptions;
import org.openide.util.NbBundle;
import org.openide.util.NbBundle.Messages;
import org.openide.windows.IOProvider;
import org.openide.windows.InputOutput;
import org.openide.xml.XMLUtil;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

@ActionID(category = "Edit",
id = "com.versifit.udl.xml.ShowXMLStructureAction")
@ActionRegistration(displayName = "#CTL_ShowXMLStructureAction")
@ActionReferences({
    @ActionReference(path = "Editors/Popup", position = 1100)
})
@Messages("CTL_ShowXMLStructureAction=Show Xml Structure")

public final class ShowXMLStructureAction implements ActionListener {

private final EditorCookie context;

public ShowXMLStructureAction(EditorCookie context) {
    this.context = context;
}

public void actionPerformed(ActionEvent ev) {
    EditorCookie editorCookie = context;
    //Get the tab name from the Bundle.prop file:
    String tabName = NbBundle.getMessage(ShowXMLStructureAction.class, "LBL_tabName");
    InputOutput io = IOProvider.getDefault().getIO(tabName, false);
    io.select(); //"XML Structure" tab is selected
    try {
    //Get the InputStream from the EditorCookie:
    InputStream is = ((org.openide.text.CloneableEditorSupport) editorCookie).getInputStream();
    //Use the NetBeans org.openide.xml.XMLUtil class to create a org.w3c.dom.Document:
    //"XML Structure" tab is created in Output Window for writing the list of tags:
    Document doc = XMLUtil.parse(new InputSource(is),true,true,null,null);
    //Create a list of nodes, for all hte elements:
    NodeList list = doc.getElementsByTagN开发者_Python百科ame("*");
    //Iterate through the list:
    for (int i = 0; i < list.getLength(); i++) {
        //For each node in the list, create a org.w3c.dom.Node:
        org.w3c.dom.Node mainNode = list.item(i);
        //Create a map for all the attributes of the org.w3c.dom.Node:
        NamedNodeMap map = mainNode.getAttributes();
        //Get the name of the node:
        String nodeName = mainNode.getNodeName();
        //Create a StringBuilder for the Attributes of the Node:
        StringBuilder attrBuilder = new StringBuilder();
        //Iterate through the map of attributes:
        for (int j = 0; j < map.getLength(); j++) {
            //Each iteration, create a new Node:
            org.w3c.dom.Node attrNode = map.item(j);
            //Get the name of the current Attribute:
            String attrName = attrNode.getNodeName();
            //Add the current Attribute to the StringBuilder:
            attrBuilder.append("*").append(attrName).append(" ");
        }
        //Print the element and its attributes to the Output window:
        io.getOut().println("ELEMENT: " + nodeName +
                " --> ATTRIBUTES: " + attrBuilder.toString());
    }
    //Close the InputStream:
    is.close();
} catch (SAXException ex) {
    Exceptions.printStackTrace(ex);
} catch (IOException ex) {
    Exceptions.printStackTrace(ex);
}
}
}


This is what you need:

@ActionReferences({ @ActionReference(path = "Editors/text/xml/Popup", position = 1100) })

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜