|
What this is
Other links
The source code
/*
* 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-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.clazz;
import java.awt.Image;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.reflect.*;
import java.util.ResourceBundle;
import java.io.*;
import java.text.MessageFormat;
import org.openide.nodes.*;
import org.openide.loaders.DataNode;
import org.openide.util.NbBundle;
import org.openide.util.WeakListener;
import org.openide.src.*;
import org.openide.src.nodes.SourceChildren;
import org.openide.cookies.SourceCookie;
import org.openide.ErrorManager;
import org.openide.util.RequestProcessor;
/** Represents ClassDataObject. Common base for CompiledDataNode (.class)
* and SerDataNode (.ser and other serialized extensions)
* @author Ales Novak, Ian Formanek, Jan Jancura, Dafe Simonek
*/
abstract class ClassDataNode extends DataNode
implements Runnable, PropertyChangeListener {
/** generated Serialized Version UID */
static final long serialVersionUID = -1543899241509520203L;
/** Properties */
private final static String PROP_CLASS_NAME = "className"; // NOI18N
private final static String PROP_IS_JAVA_BEAN = "isJavaBean"; // NOI18N
private final static String PROP_IS_APPLET = "isApplet"; // NOI18N
/** a flag whether the children of this object are only items declared
* by this class, or all items (incl. inherited)
*/
private boolean showDeclaredOnly = true; // [PENDING - get default value from somewhere ?]
/** The flag indicating whether right icon has been already found */
transient boolean iconResolved = false;
/** Holds error message shown in node tooltip */
transient String errorMsg;
transient boolean initialized;
private static final RequestProcessor iconResolver = new RequestProcessor("clazz icon resolver", 1); // NOI18N
// -----------------------------------------------------------------------
// constructor
/** @param obj is a ClassDataObject that is to be represented
*/
ClassDataNode(final ClassDataObject obj) {
/* Changed for multiple factories
super(obj, new SourceChildren(ClassElementNodeFactory.getInstance()));
*/
this(obj, new SourceChildren( ClassDataObject.getExplorerFactory()) );
}
protected ClassDataNode(ClassDataObject obj, Children ch) {
super(obj, ch);
initialize();
}
protected SourceChildren getSourceChildren() {
return (SourceChildren)getChildren();
}
/** Returns icon base string which should be used for
* icon inicialization. Subclasses can ovveride this method
* to provide their own icon base string.
*/
protected abstract String initialIconBase ();
protected abstract void resolveIcons();
protected abstract void requestResolveIcon();
private void initialize () {
SourceCookie sc =
(SourceCookie)getDataObject().getCookie(SourceCookie.class);
getSourceChildren().setElement(sc.getSource());
setIconBase(initialIconBase());
/* Disable the icon resolution - for now.
*
// icons...
RequestProcessor.postRequest(this, 200);
*/
}
/**
* If the image is not known, returns the basic (classfile) one and
* requests image resolution. After the image is known, it returns the
* cached image.
*/
public Image getIcon(int type) {
ensureIconResolved();
return super.getIcon(type);
}
public Image getOpenedIcon(int type) {
ensureIconResolved();
return super.getOpenedIcon(type);
}
private void ensureIconResolved() {
if (iconResolved)
return;
iconResolver.post(new Runnable() {
public void run() {
requestResolveIcon();
}
});
}
/** Creates property set for this node */
protected Sheet createSheet () {
Sheet s = super.createSheet();
ResourceBundle bundle = NbBundle.getBundle(ClassDataNode.class);
final ClassDataObject obj=(ClassDataObject)getDataObject();
Sheet.Set ps = s.get(Sheet.PROPERTIES);
ps.put(new PropertySupport.ReadOnly (
PROP_CLASS_NAME,
String.class,
bundle.getString("PROP_className"),
bundle.getString("HINT_className")
) {
public Object getValue () throws InvocationTargetException {
return obj.getClassName();
}
});
ps.put(new PropertySupport.ReadOnly (
ElementProperties.PROP_MODIFIERS,
String.class,
bundle.getString ("PROP_modifiers"),
bundle.getString ("HINT_modifiers")
) {
public Object getValue () throws InvocationTargetException {
Object result = null;
try {
result = obj.getModifiers();
} catch (IOException ex) {
// ignore - return null
} catch (ClassNotFoundException ex) {
// ignore - return null
}
return result;
}
});
ps.put(new PropertySupport.ReadOnly (
ElementProperties.PROP_SUPERCLASS,
String.class,
bundle.getString ("PROP_superclass"),
bundle.getString ("HINT_superclass")
) {
public Object getValue () throws InvocationTargetException {
return obj.getSuperclass();
}
});
ps.put(new PropertySupport.ReadOnly (
ElementProperties.PROP_CLASS_OR_INTERFACE,
Boolean.TYPE,
bundle.getString ("PROP_isInterface"),
bundle.getString ("HINT_isInterface")
) {
public Object getValue () throws InvocationTargetException {
return obj.isInterface() ? Boolean.TRUE : Boolean.FALSE;
}
});
ps.put(new PropertySupport.ReadOnly (
PROP_IS_APPLET,
Boolean.TYPE,
bundle.getString ("PROP_isApplet"),
bundle.getString ("HINT_isApplet")
) {
public Object getValue () throws InvocationTargetException {
return obj.isApplet() ? Boolean.TRUE : Boolean.FALSE;
}
});
ps.put(new PropertySupport.ReadOnly (
PROP_IS_JAVA_BEAN,
Boolean.TYPE,
bundle.getString ("PROP_isJavaBean"),
bundle.getString ("HINT_isJavaBean")
) {
public Object getValue () throws InvocationTargetException {
return obj.isJavaBean() ? Boolean.TRUE : Boolean.FALSE;
}
});
return s;
}
/** The implementation of the Runnable interface
* (initialization tasks in separate thread)
*/
public void run () {
// set right source element to our children
SourceCookie sc =
(SourceCookie)getDataObject().getCookie(SourceCookie.class);
if (sc != null) {
if (!initialized)
sc.getSource().addPropertyChangeListener(
WeakListener.propertyChange(this, sc.getSource()));
initialized = true;
}
resolveIcons();
}
public void propertyChange(PropertyChangeEvent ev) {
if (ElementProperties.PROP_STATUS.equals(ev.getPropertyName()))
Util.getClassProcessor().post(this, 200);
}
// --------------------------------------------------------------------
// private methods
/** Sets error tooltip based on given exception message.
* @param exc Exception which describes the failure.
*/
protected void setErrorToolTip (Exception exc) {
String errMsg = findErrorMessage(exc);
errorMsg = MessageFormat.format(
NbBundle.getBundle(ClassDataNode.class).getString("FMT_ErrorHint"),
new Object[] { errMsg }
);
setShortDescription(errorMsg);
}
private String findErrorMessage(Throwable t) {
if (t == null) {
return null;
}
ErrorManager.Annotation[] ann = ErrorManager.getDefault().findAnnotations(t);
if (ann == null)
return t.getLocalizedMessage();
for (int i = 0; i < ann.length; i++) {
String normal = ann[i].getMessage();
String localized = ann[i].getLocalizedMessage();
if (localized != null)
return localized;
Throwable t2 = ann[i].getStackTrace();
if (t2 == null)
continue;
localized = t2.getLocalizedMessage();
if (localized != null) {
if (!localized.equals(normal))
return localized;
}
}
return t.getLocalizedMessage();
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.