|
What this is
This file is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
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.web.project.ui;
import java.awt.Image;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.SourceGroup;
import org.netbeans.api.queries.VisibilityQuery;
import org.openide.filesystems.FileObject;
import org.openide.loaders.DataFolder;
import org.openide.nodes.Children;
import org.openide.nodes.FilterNode;
import org.openide.nodes.Node;
import org.openide.util.NbBundle;
import org.openide.util.Utilities;
import org.netbeans.spi.java.project.support.ui.PackageView;
import org.netbeans.spi.project.support.ant.AntProjectHelper;
import org.netbeans.spi.project.support.ant.PropertyEvaluator;
import org.netbeans.modules.web.project.ui.customizer.WebProjectProperties;
import org.openide.loaders.ChangeableDataFilter;
import org.openide.loaders.DataFilter;
import org.openide.loaders.DataObject;
class WebViews {
private WebViews() {
}
static final class LogicalViewChildren extends Children.Keys/**/ {
// XXX does not react correctly to addition or removal of src/ subdir
private static final String KEY_SOURCE_DIR = "srcDir"; // NOI18N
private static final String KEY_DOC_BASE = "docBase"; //NOI18N
private AntProjectHelper helper;
private final PropertyEvaluator evaluator;
public LogicalViewChildren (AntProjectHelper helper, PropertyEvaluator evaluator) {
assert helper != null;
this.helper = helper;
this.evaluator = evaluator;
}
protected void addNotify() {
super.addNotify();
List l = new ArrayList();
DataFolder docBaseDir = getFolder(WebProjectProperties.WEB_DOCBASE_DIR);
if (docBaseDir != null) {
l.add(KEY_DOC_BASE);
}
DataFolder srcDir = getFolder(WebProjectProperties.SRC_DIR);
if (srcDir != null) {
l.add(KEY_SOURCE_DIR);
}
setKeys(l);
}
protected void removeNotify() {
setKeys(Collections.EMPTY_SET);
super.removeNotify();
}
protected Node[] createNodes(Object key) {
Node n = null;
if (key == KEY_SOURCE_DIR) {
FileObject srcRoot = helper.resolveFileObject(evaluator.getProperty (WebProjectProperties.SRC_DIR));
Project p = FileOwnerQuery.getOwner (srcRoot);
SourceGroup sgs [] = ProjectUtils.getSources (p).getSourceGroups (JavaProjectConstants.SOURCES_TYPE_JAVA);
for (int i = 0; i < sgs.length; i++) {
if (sgs [i].contains (srcRoot)) {
n = PackageView.createPackageView (sgs [i]);
break;
}
}
} else if (key == KEY_DOC_BASE) {
n = new DocBaseNode (getFolder(WebProjectProperties.WEB_DOCBASE_DIR));
}
return n == null ? new Node[0] : new Node[] {n};
}
private DataFolder getFolder(String propName) {
FileObject fo = helper.resolveFileObject(evaluator.getProperty (propName));
if (fo != null) {
DataFolder df = DataFolder.findFolder(fo);
return df;
}
return null;
}
}
static final class VisibilityQueryDataFilter implements ChangeListener, ChangeableDataFilter {
EventListenerList ell = new EventListenerList();
public VisibilityQueryDataFilter() {
VisibilityQuery.getDefault().addChangeListener( this );
}
public boolean acceptDataObject(DataObject obj) {
FileObject fo = obj.getPrimaryFile();
return VisibilityQuery.getDefault().isVisible( fo );
}
public void stateChanged( ChangeEvent e) {
Object[] listeners = ell.getListenerList();
ChangeEvent event = null;
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i] == ChangeListener.class) {
if ( event == null) {
event = new ChangeEvent( this );
}
((ChangeListener)listeners[i+1]).stateChanged( event );
}
}
}
public void addChangeListener( ChangeListener listener ) {
ell.add( ChangeListener.class, listener );
}
public void removeChangeListener( ChangeListener listener ) {
ell.remove( ChangeListener.class, listener );
}
}
private static final class DocBaseNode extends FilterNode {
private Image icon;
private static javax.swing.Action actions[];
private static final DataFilter VISIBILITY_QUERY_FILTER = new VisibilityQueryDataFilter();
private static Image WEB_PAGES_BADGE = Utilities.loadImage( "org/netbeans/modules/web/project/ui/resources/webPagesBadge.gif" ); //NOI18N
DocBaseNode (DataFolder folder) {
super (folder.getNodeDelegate(), folder.createNodeChildren(VISIBILITY_QUERY_FILTER));
}
public Image getIcon(int type) {
return computeIcon(false, type);
}
public Image getOpenedIcon(int type) {
return computeIcon(true, type);
}
private Node getDataFolderNodeDelegate() {
return ((DataFolder) getLookup().lookup(DataFolder.class)).getNodeDelegate();
}
private Image computeIcon(boolean opened, int type) {
Image image;
image = opened ? getDataFolderNodeDelegate().getOpenedIcon(type) : getDataFolderNodeDelegate().getIcon(type);
image = Utilities.mergeImages(image, WEB_PAGES_BADGE, 7, 7);
return image;
}
public String getDisplayName () {
return NbBundle.getMessage(WebViews.class, "LBL_Node_DocBase"); //NOI18N
}
public javax.swing.Action[] getActions( boolean context ) {
if ( actions == null ) {
actions = new javax.swing.Action[] {
org.netbeans.spi.project.ui.support.CommonProjectActions.newFileAction(),
null,
org.openide.util.actions.SystemAction.get( org.openide.actions.FileSystemRefreshAction.class ),
org.openide.util.actions.SystemAction.get( org.openide.actions.FindAction.class ),
null,
org.openide.util.actions.SystemAction.get( org.openide.actions.PasteAction.class ),
null,
org.openide.util.actions.SystemAction.get( org.openide.actions.ToolsAction.class ),
null,
org.openide.util.actions.SystemAction.get( org.openide.actions.PropertiesAction.class ),
};
}
return actions;
}
}
}
|