Index: core/navigator/arch.xml =================================================================== RCS file: /cvs/core/navigator/arch.xml,v --- core/navigator/arch.xml 11 Nov 2005 23:14:06 -0000 1.5 +++ core/navigator/arch.xml 23 Dec 2005 15:08:22 -0000 @@ -125,7 +125,7 @@

Writing NavigatorPanel implementation

Implementing NavigatorPanel interface is easy, you can copy from template basic implementation - BasicNavPanelImpl.java.

+ BasicNavPanelImpl.java.

Advices on important part of panel implementation: Index: core/navigator/src/org/netbeans/spi/navigator/doc-files/BasicNavPanelImpl.java =================================================================== RCS file: core/navigator/src/org/netbeans/spi/navigator/doc-files/BasicNavPanelImpl.java --- core/navigator/src/org/netbeans/spi/navigator/doc-files/BasicNavPanelImpl.java 5 Aug 2005 12:41:50 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,104 +0,0 @@ -/* - * Sun Public License Notice - * - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"). You may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/ - * - * The Original Code is NetBeans. The Initial Developer of the Original - * Code is Sun Microsystems, Inc. Portions Copyright 1997-2005 Sun - * Microsystems, Inc. All Rights Reserved. - */ - -import java.util.Collection; -import javax.swing.JComponent; -import javax.swing.JLabel; -import org.netbeans.spi.navigator.NavigatorPanel; -import org.openide.util.Lookup; -import org.openide.util.LookupEvent; -import org.openide.util.LookupListener; - -/** - * Basic dummy implementation of NavigatorPanel interface. - */ -public class BasicNavPanelImpl implements NavigatorPanel { - - /** holds UI of this panel */ - private JComponent panelUI; - /** template for finding data in given context. - * Object used as example, replace with your own data source, for example JavaDataObject etc */ - private static final Lookup.Template MY_DATA = new Lookup.Template(Object.class); - /** current context to work on */ - private Lookup.Result curContext; - /** listener to context changes */ - private LookupListener contextL; - - /** public no arg constructor needed for system to instantiate provider well */ - public BasicNavPanelImpl() { - } - - public String getDisplayHint() { - return "Basic dummy implementation of NavigatorPanel interface"; - } - - public String getDisplayName() { - return "Dummy View"; - } - - public JComponent getComponent() { - if (panelUI == null) { - panelUI = new JLabel("Dummy label"); - // You can override requestFocusInWindow() on the component if desired. - } - return panelUI; - } - - public void panelActivated(Lookup context) { - // lookup context and listen to result to get notified about context changes - curContext = context.lookup(MY_DATA); - curContext.addLookupListener(getContextListener()); - // get actual data and recompute content - Collection data = curContext.allInstances(); - setNewContent(data); - } - - public void panelDeactivated() { - curContext.removeLookupListener(getContextListener()); - curContext = null; - } - - public Lookup getLookup () { - // go with default activated Node strategy - return null; - } - - /************* non - public part ************/ - - private void setNewContent (Collection newData) { - // put your code here that grabs information you need from given - // collection of data, recompute UI of your panel and show it. - // Note - be sure to compute the content OUTSIDE event dispatch thread, - // just final repainting of UI should be done in event dispatch thread. - // Please use RequestProcessor and Swing.invokeLater to achieve this. - } - - /** Accessor for listener to context */ - private LookupListener getContextListener () { - if (contextL == null) { - contextL = new ContextListener(); - } - return contextL; - } - - /** Listens to changes of context and triggers proper action */ - private class ContextListener implements LookupListener { - - public void resultChanged(LookupEvent ev) { - Collection data = ((Lookup.Result)ev.getSource()).allInstances(); - setNewContent(data); - } - - } // end of ContextListener - -} Index: core/navigator/src/org/netbeans/spi/navigator/doc-files/BasicNavPanelImpl_java =================================================================== RCS file: core/navigator/src/org/netbeans/spi/navigator/doc-files/BasicNavPanelImpl_java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ core/navigator/src/org/netbeans/spi/navigator/doc-files/BasicNavPanelImpl_java 23 Dec 2005 15:08:22 -0000 @@ -0,0 +1,104 @@ +/* + * Sun Public License Notice + * + * The contents of this file are subject to the Sun Public License + * Version 1.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://www.sun.com/ + * + * The Original Code is NetBeans. The Initial Developer of the Original + * Code is Sun Microsystems, Inc. Portions Copyright 1997-2005 Sun + * Microsystems, Inc. All Rights Reserved. + */ + +import java.util.Collection; +import javax.swing.JComponent; +import javax.swing.JLabel; +import org.netbeans.spi.navigator.NavigatorPanel; +import org.openide.util.Lookup; +import org.openide.util.LookupEvent; +import org.openide.util.LookupListener; + +/** + * Basic dummy implementation of NavigatorPanel interface. + */ +public class BasicNavPanelImpl implements NavigatorPanel { + + /** holds UI of this panel */ + private JComponent panelUI; + /** template for finding data in given context. + * Object used as example, replace with your own data source, for example JavaDataObject etc */ + private static final Lookup.Template MY_DATA = new Lookup.Template(Object.class); + /** current context to work on */ + private Lookup.Result curContext; + /** listener to context changes */ + private LookupListener contextL; + + /** public no arg constructor needed for system to instantiate provider well */ + public BasicNavPanelImpl() { + } + + public String getDisplayHint() { + return "Basic dummy implementation of NavigatorPanel interface"; + } + + public String getDisplayName() { + return "Dummy View"; + } + + public JComponent getComponent() { + if (panelUI == null) { + panelUI = new JLabel("Dummy label"); + // You can override requestFocusInWindow() on the component if desired. + } + return panelUI; + } + + public void panelActivated(Lookup context) { + // lookup context and listen to result to get notified about context changes + curContext = context.lookup(MY_DATA); + curContext.addLookupListener(getContextListener()); + // get actual data and recompute content + Collection data = curContext.allInstances(); + setNewContent(data); + } + + public void panelDeactivated() { + curContext.removeLookupListener(getContextListener()); + curContext = null; + } + + public Lookup getLookup () { + // go with default activated Node strategy + return null; + } + + /************* non - public part ************/ + + private void setNewContent (Collection newData) { + // put your code here that grabs information you need from given + // collection of data, recompute UI of your panel and show it. + // Note - be sure to compute the content OUTSIDE event dispatch thread, + // just final repainting of UI should be done in event dispatch thread. + // Please use RequestProcessor and Swing.invokeLater to achieve this. + } + + /** Accessor for listener to context */ + private LookupListener getContextListener () { + if (contextL == null) { + contextL = new ContextListener(); + } + return contextL; + } + + /** Listens to changes of context and triggers proper action */ + private class ContextListener implements LookupListener { + + public void resultChanged(LookupEvent ev) { + Collection data = ((Lookup.Result)ev.getSource()).allInstances(); + setNewContent(data); + } + + } // end of ContextListener + +} Index: core/startup/src/org/netbeans/core/startup/NbInstaller.java =================================================================== RCS file: /cvs/core/startup/src/org/netbeans/core/startup/NbInstaller.java,v --- core/startup/src/org/netbeans/core/startup/NbInstaller.java 28 Nov 2005 08:45:45 -0000 1.21 +++ core/startup/src/org/netbeans/core/startup/NbInstaller.java 23 Dec 2005 15:08:23 -0000 @@ -1426,8 +1426,9 @@ String clazz = name.substring(0, name.length() - 6).replace('/', '.'); // NOI18N try { Class.forName(clazz, false, m.getClassLoader()); - } catch (ClassNotFoundException cnfe) { - Util.err.notify(cnfe); // huh? + } catch (ClassNotFoundException cnfe) { // e.g. "Will not load classes from default package" from ProxyClassLoader + Util.err.annotate(cnfe, ErrorManager.UNKNOWN, "From " + clazz + " in " + m.getCodeNameBase() + " with effective classpath " + getEffectiveClasspath(m), null, null, null); // NOI18N + Util.err.notify(ErrorManager.INFORMATIONAL, cnfe); } catch (LinkageError le) { Util.err.annotate(le, ErrorManager.UNKNOWN, "From " + clazz + " in " + m.getCodeNameBase() + " with effective classpath " + getEffectiveClasspath(m), null, null, null); // NOI18N Util.err.notify(ErrorManager.INFORMATIONAL, le);