Трудности действия платформы Netbeans - PullRequest
0 голосов
/ 29 июня 2011

Я использовал учебник на веб-сайте netbeans (который недоступен из-за проблем с сервером), чтобы создать действие, которое читает XML и выводит на него некоторую информацию.Все хорошо, но действие не позволяет мне вызывать его для определенных файлов XML, и у меня нет никаких полезных ресурсов, к которым можно обратиться, чтобы помочь с этим.Например, когда я запускаю программу, она позволяет мне вызывать действие для файла манифеста (который даже не xml, и он соответственно ошибается), но не для файла .xml.Вот код, который может быть виновником, который я изменил из учебника.Я полагал, что это сделало бы сообщение «Показать XML» всегда включенным, но оно все еще отключено в файлах XML.

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

Вот мой 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.getElementsByTagName("*");
    //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);
}
}
}

1 Ответ

1 голос
/ 30 июня 2011

Это то, что вам нужно:

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

...