Friday Nov 21, 2008

Children.Keys for Presenting Layer Folders & Files

Here's what's in my layer.xml:
<folder name="Words">
    <file name="ajva">
        <attr name="unscrambled" stringvalue="java"/>
    </file>
    <file name="ynamicd">
        <attr name="unscrambled" stringvalue="dynamic"/>
    </file>
</folder>

And here's a Children.Keys class for creating a presentation layer on top of the folders and files above:

public class WordChildren extends Children.Keys<String> {

    @Override
    protected void addNotify() {
        FileObject words = Repository.getDefault().getDefaultFileSystem().findResource("Words");
        FileObject[] fos = words.getChildren();
        String[] s = new String[fos.length];
        for (int i = 0; i < s.length; i++) {
            s[i] = fos[i].getName() + " (" + fos[i].getAttribute("unscrambled") + ")";
        }
        setKeys(s);
    }

    @Override
    protected Node[] createNodes(String name) {
        AbstractNode WordChildrenNode = new AbstractNode(Children.LEAF) {
            @Override
            public String getHtmlDisplayName() {
                String normal = getDisplayName().substring(0, getDisplayName().indexOf("("));
                String greyed = getDisplayName().substring(getDisplayName().indexOf("("));
                return "<b>" + normal + "</b><i><font color=\\"#808080\\">" + greyed + "</font></i>";
            }
        };
        WordChildrenNode.setDisplayName(name);
        return new Node[]{WordChildrenNode};
    }

}

Here's the result, when you instantiate the above via an Explorer Manager, while an explorer view is available to it:

One of the cool things about putting your data in the layer.xml is that then other modules can add their own data to those same folders and they can even be ordered relative to each other. Then the code above will load that data, which is why there are FOUR word combinations in the screenshot above, because the NetBeans runtime container merges all the layer.xml files into one single hierarchical filesystem. Hurray for the NetBeans runtime container!

About

Geertjan Wielenga (@geertjanw) is a Principal Product Manager in the Oracle Developer Tools group living & working in Amsterdam. He is a Java technology enthusiast, evangelist, trainer, speaker, and writer. He blogs here daily.

The focus of this blog is mostly on NetBeans (a development tool primarily for Java programmers), with an occasional reference to NetBeans, and sometimes diverging to topics relating to NetBeans. And then there are days when NetBeans is mentioned, just for a change.

Search

Archives
« November 2008 »
SunMonTueWedThuFriSat
      
4
7
15
16
17
20
22
23
25
27
29
30
      
Today