|
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.web.project.ui; import java.awt.Image; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyEditor; import java.beans.PropertyEditorSupport; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import java.util.SortedSet; import java.util.StringTokenizer; import java.util.TreeSet; import javax.swing.AbstractAction; import javax.swing.Action; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.loaders.DataFolder; import org.openide.nodes.*; import org.openide.util.*; import org.openide.util.actions.SystemAction; import org.openide.util.lookup.Lookups; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.SubprojectProvider; import org.netbeans.spi.project.support.ant.AntProjectHelper; import org.netbeans.spi.project.support.ant.EditableProperties; import org.netbeans.spi.project.support.ant.PropertyEvaluator; import org.netbeans.spi.project.support.ant.ReferenceHelper; import org.netbeans.spi.project.ui.LogicalViewProvider; import org.netbeans.spi.project.ui.support.CommonProjectActions; import org.netbeans.spi.project.ui.support.ProjectSensitiveActions; import org.netbeans.spi.java.project.support.ui.BrokenReferencesSupport; import org.netbeans.api.java.project.JavaProjectConstants; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.modules.web.api.webmodule.WebProjectConstants; import org.netbeans.modules.web.project.WebProjectType; import org.netbeans.modules.web.project.ui.customizer.WebProjectProperties; import org.netbeans.spi.java.project.support.ui.PackageView; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Text; /** * Support for creating logical views. * @author Petr Hrebejk */ public class WebPhysicalViewProvider implements LogicalViewProvider { private final Project project; private final AntProjectHelper helper; private final PropertyEvaluator evaluator; private final SubprojectProvider spp; private final ReferenceHelper resolver; public WebPhysicalViewProvider(Project project, AntProjectHelper helper, PropertyEvaluator evaluator, SubprojectProvider spp, ReferenceHelper resolver) { this.project = project; assert project != null; this.helper = helper; assert helper != null; this.evaluator = evaluator; assert evaluator != null; this.spp = spp; assert spp != null; this.resolver = resolver; } public Node createLogicalView() { return new WebLogicalViewRootNode(); } public Node findPath(Node root, Object target) { Project project = (Project) root.getLookup().lookup(Project.class); if (project == null) return null; if (target instanceof FileObject) { FileObject fo = (FileObject) target; Project owner = FileOwnerQuery.getOwner(fo); if (!project.equals(owner)) return null; // Don't waste time if project does not own the fo // trying to find node in docbase Node result = findNodeInDocBase(root, fo); if (result!=null) return result; // trying to find node in sources Node[] nodes = root.getChildren().getNodes(true); for (int i = nodes.length-1; i >= 0; i--) { result = PackageView.findPath(nodes[i], target); if (result!=null) return result; } } return null; } private Node findNodeInDocBase(Node root, FileObject fo) { FileObject rootfo = helper.resolveFileObject(evaluator.getProperty (WebProjectProperties.WEB_DOCBASE_DIR)); String relPath = FileUtil.getRelativePath(rootfo, fo); if (relPath == null) { return null; } int idx = relPath.indexOf('.'); //NOI18N if (idx != -1) relPath = relPath.substring(0, idx); StringTokenizer st = new StringTokenizer(relPath, "/"); //NOI18N Node result = NodeOp.findChild(root,rootfo.getName()); while (st.hasMoreTokens()) { result = NodeOp.findChild(result, st.nextToken()); } return result; } private static Lookup createLookup( Project project ) { DataFolder rootFolder = DataFolder.findFolder( project.getProjectDirectory() ); // XXX Remove root folder after FindAction rewrite return Lookups.fixed( new Object[] { project, rootFolder } ); } // Private innerclasses ---------------------------------------------------- private static final String[] BREAKABLE_PROPERTIES = new String[] { WebProjectProperties.JAVAC_CLASSPATH, WebProjectProperties.DEBUG_CLASSPATH, WebProjectProperties.WAR_CONTENT_ADDITIONAL, WebProjectProperties.SRC_DIR, WebProjectProperties.WEB_DOCBASE_DIR }; public static boolean hasBrokenLinks(AntProjectHelper helper, ReferenceHelper resolver) { return BrokenReferencesSupport.isBroken(helper, resolver, BREAKABLE_PROPERTIES, new String[] {WebProjectProperties.JAVA_PLATFORM}); } /** Filter node containin additional features for the J2SE physical */ private final class WebLogicalViewRootNode extends AbstractNode { private Image icon; private Lookup lookup; private Action brokenLinksAction; private boolean broken; public WebLogicalViewRootNode() { super( new WebViews.LogicalViewChildren( helper, evaluator ), createLookup( project ) ); setIconBase( "org/netbeans/modules/web/project/ui/resources/webProjectIcon" ); // NOI18N setName( ProjectUtils.getInformation( project ).getDisplayName() ); if (hasBrokenLinks(helper, resolver)) { broken = true; brokenLinksAction = new BrokenLinksAction(); } } public Action[] getActions( boolean context ) { if ( context ) return super.getActions( true ); else return getAdditionalActions(); } public boolean canRename() { return false; } // Private methods ------------------------------------------------- private Action[] getAdditionalActions() { ResourceBundle bundle = NbBundle.getBundle(WebPhysicalViewProvider.class); return new Action[] { CommonProjectActions.newFileAction(), null, ProjectSensitiveActions.projectCommandAction( ActionProvider.COMMAND_BUILD, bundle.getString( "LBL_BuildAction_Name" ), null ), // NOI18N ProjectSensitiveActions.projectCommandAction( ActionProvider.COMMAND_REBUILD, bundle.getString( "LBL_RebuildAction_Name" ), null ), // NOI18N ProjectSensitiveActions.projectCommandAction( ActionProvider.COMMAND_CLEAN, bundle.getString( "LBL_CleanAction_Name" ), null ), // NOI18N ProjectSensitiveActions.projectCommandAction( JavaProjectConstants.COMMAND_JAVADOC, bundle.getString( "LBL_JavadocAction_Name" ), null ), // NOI18N null, ProjectSensitiveActions.projectCommandAction( ActionProvider.COMMAND_RUN, bundle.getString( "LBL_RunAction_Name" ), null ), // NOI18N ProjectSensitiveActions.projectCommandAction( ActionProvider.COMMAND_DEBUG, bundle.getString( "LBL_DebugAction_Name" ), null ), // NOI18N ProjectSensitiveActions.projectCommandAction( WebProjectConstants.COMMAND_REDEPLOY, bundle.getString( "LBL_RedeployAction_Name" ), null ), // NOI18N null, CommonProjectActions.setAsMainProjectAction(), CommonProjectActions.openSubprojectsAction(), CommonProjectActions.closeProjectAction(), null, SystemAction.get( org.openide.actions.FindAction.class ), null, // SystemAction.get( org.openide.actions.DeleteAction.class ), // null, SystemAction.get( org.openide.actions.ToolsAction.class ), null, brokenLinksAction, CommonProjectActions.customizeProjectAction(), }; } /** This action is created only when project has broken references. * Once these are resolved the action is disabled. */ private class BrokenLinksAction extends AbstractAction implements PropertyChangeListener { public BrokenLinksAction() { evaluator.addPropertyChangeListener(this); putValue(Action.NAME, NbBundle.getMessage(WebPhysicalViewProvider.class, "LBL_Fix_Broken_Links_Action")); } public void actionPerformed(ActionEvent e) { BrokenReferencesSupport.showCustomizer(helper, resolver, BREAKABLE_PROPERTIES, new String[]{WebProjectProperties.JAVA_PLATFORM}); if (!hasBrokenLinks(helper, resolver)) { disable(); } } public void propertyChange(PropertyChangeEvent evt) { if (!broken) { disable(); return; } broken = hasBrokenLinks(helper, resolver); if (!broken) { disable(); } } private void disable() { broken = false; setEnabled(false); evaluator.removePropertyChangeListener(this); fireIconChange(); fireOpenedIconChange(); } } } /** Factory for project actions. |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 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.