? maven-subproject Index: arch.xml =================================================================== RCS file: /cvs/java/j2seproject/arch.xml,v retrieving revision 1.13 diff -u -r1.13 arch.xml --- arch.xml 15 Aug 2006 15:21:20 -0000 1.13 +++ arch.xml 28 Aug 2006 08:20:55 -0000 @@ -1073,6 +1073,12 @@ Please note that the latter is not part of any public APIs and you need implementation dependency to make use of it.

+ +

+ "Projects/org-netbeans-modules-java-j2seproject/Nodes" folder's content is used to construct the project's child nodes. + It's content is expected to be NodeFactory instances. +

+
Index: nbproject/project.properties =================================================================== RCS file: /cvs/java/j2seproject/nbproject/project.properties,v retrieving revision 1.29 diff -u -r1.29 project.properties --- nbproject/project.properties 15 Aug 2006 16:10:51 -0000 1.29 +++ nbproject/project.properties 28 Aug 2006 08:20:55 -0000 @@ -15,7 +15,7 @@ # Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun # Microsystems, Inc. All Rights Reserved. -spec.version.base=1.7.0 +spec.version.base=1.8.0 javadoc.arch=${basedir}/arch.xml Index: src/org/netbeans/modules/java/j2seproject/ui/J2SELogicalViewProvider.java =================================================================== RCS file: /cvs/java/j2seproject/src/org/netbeans/modules/java/j2seproject/ui/J2SELogicalViewProvider.java,v retrieving revision 1.19 diff -u -r1.19 J2SELogicalViewProvider.java --- src/org/netbeans/modules/java/j2seproject/ui/J2SELogicalViewProvider.java 11 Aug 2006 13:21:03 -0000 1.19 +++ src/org/netbeans/modules/java/j2seproject/ui/J2SELogicalViewProvider.java 28 Aug 2006 08:20:55 -0000 @@ -24,14 +24,10 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.CharConversionException; -import java.io.File; import java.io.IOException; -import java.net.URI; -import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -42,7 +38,6 @@ import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JSeparator; -import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.netbeans.api.java.platform.JavaPlatform; @@ -54,29 +49,24 @@ import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; import org.netbeans.modules.java.j2seproject.J2SEProjectUtil; -import org.netbeans.modules.java.j2seproject.ui.customizer.CustomizerLibraries; -import org.netbeans.modules.java.j2seproject.ui.customizer.CustomizerProviderImpl; import org.netbeans.modules.java.j2seproject.ui.customizer.J2SEProjectProperties; import org.netbeans.modules.java.j2seproject.J2SEProject; import org.netbeans.modules.java.j2seproject.SourceRoots; import org.netbeans.modules.java.j2seproject.UpdateHelper; -import org.netbeans.modules.java.j2seproject.wsclient.J2SEProjectWebServicesClientSupport; import org.netbeans.spi.java.project.support.ui.BrokenReferencesSupport; import org.netbeans.spi.java.project.support.ui.PackageView; 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.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.NodeFactorySupport; import org.netbeans.spi.project.ui.support.DefaultProjectOperations; import org.netbeans.spi.project.ui.support.ProjectSensitiveActions; import org.openide.ErrorManager; import org.openide.actions.FindAction; import org.openide.actions.ToolsAction; -import org.openide.filesystems.FileChangeAdapter; -import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.FileStatusEvent; @@ -90,8 +80,6 @@ import org.openide.loaders.FolderLookup; import org.openide.modules.SpecificationVersion; import org.openide.nodes.AbstractNode; -import org.openide.nodes.Children; -import org.openide.nodes.FilterNode; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.Lookup; @@ -102,8 +90,6 @@ import org.openide.util.actions.SystemAction; import org.openide.util.lookup.Lookups; import org.openide.xml.XMLUtil; -import org.netbeans.modules.websvc.api.client.WebServicesClientSupport; -import org.netbeans.modules.websvc.api.client.WebServicesClientView; /** * Support for creating logical views. @@ -119,9 +105,6 @@ private final SubprojectProvider spp; private final ReferenceHelper resolver; private List changeListeners; - - // Web service client - private static final Object KEY_SERVICE_REFS = "serviceRefs"; // NOI18N public J2SELogicalViewProvider(J2SEProject project, UpdateHelper helper, PropertyEvaluator evaluator, SubprojectProvider spp, ReferenceHelper resolver) { this.project = project; @@ -139,6 +122,18 @@ return new J2SELogicalViewRootNode(); } + public PropertyEvaluator getEvaluator() { + return evaluator; + } + + public ReferenceHelper getRefHelper() { + return resolver; + } + + public UpdateHelper getUpdateHelper() { + return helper; + } + public Node findPath(Node root, Object target) { Project project = (Project) root.getLookup().lookup(Project.class); if (project == null) { @@ -284,7 +279,8 @@ // icon badging <<< public J2SELogicalViewRootNode() { - super(new LogicalViewChildren(project, evaluator, helper, resolver), Lookups.singleton(project)); + super(NodeFactorySupport.createCompositeChildren(project, "Projects/org-netbeans-modules-java-j2seproject/Nodes"), + Lookups.singleton(project)); setIconBaseWithExtension("org/netbeans/modules/java/j2seproject/ui/resources/j2seProject.gif"); super.setName( ProjectUtils.getInformation( project ).getDisplayName() ); if (hasBrokenLinks()) { @@ -650,352 +646,6 @@ } - } - - private static final class LogicalViewChildren extends Children.Keys/**/ implements ChangeListener { - - private static final Object LIBRARIES = "Libs"; //NOI18N - private static final Object TEST_LIBRARIES = "TestLibs"; //NOI18N - private static final String WSDL_FOLDER=J2SEProjectWebServicesClientSupport.WSDL_FOLDER; - - private final Project project; - private final PropertyEvaluator evaluator; - private final UpdateHelper helper; - private final ReferenceHelper resolver; - private final SourceRoots testSources; - - private final WsdlCreationListener wsdlListener; - private final MetaInfListener metaInfListener; - private FileObject wsdlFolder; - - public LogicalViewChildren(J2SEProject project, PropertyEvaluator evaluator, UpdateHelper helper, ReferenceHelper resolver) { - this.project = project; - this.evaluator = evaluator; - this.helper = helper; - this.resolver = resolver; - this.testSources = project.getTestSourceRoots(); - this.metaInfListener = new MetaInfListener(); - this.wsdlListener = new WsdlCreationListener(); - } - - protected void addNotify() { - super.addNotify(); - getSources().addChangeListener(this); - - AntProjectHelper projectHelper = helper.getAntProjectHelper(); - String prop = evaluator.getProperty("meta.inf.dir"); //NOI18N - if (prop!=null) { - FileObject metaInf = projectHelper.resolveFileObject(prop); - if (metaInf!=null) metaInf.addFileChangeListener(metaInfListener); - } - prop = evaluator.getProperty("src.dir"); //NOI18N - if (prop!=null) { - FileObject srcDir = projectHelper.resolveFileObject(prop); - if (srcDir!=null) srcDir.addFileChangeListener(metaInfListener); - } - - //XXX: Not very nice, the wsdlFolder should be hold by this class because it listens on it - WebServicesClientSupport wsClientSupportImpl = WebServicesClientSupport.getWebServicesClientSupport(project.getProjectDirectory()); - try { - if (wsClientSupportImpl != null) { - wsdlFolder = wsClientSupportImpl.getWsdlFolder(false); - } - } catch (IOException ex) { - ErrorManager.getDefault().notify(ex); - } - if (wsdlFolder != null) { - wsdlFolder.addFileChangeListener(wsdlListener); - } - setKeys(getKeys()); - } - - protected void removeNotify() { - setKeys(Collections.EMPTY_SET); - getSources().removeChangeListener(this); - - AntProjectHelper projectHelper = helper.getAntProjectHelper(); - String prop = evaluator.getProperty("meta.inf.dir"); //NOI18N - if (prop!=null) { - FileObject metaInf = projectHelper.resolveFileObject(prop); - if (metaInf!=null) metaInf.addFileChangeListener(metaInfListener); - } - prop = evaluator.getProperty("src.dir"); //NOI18N - if (prop!=null) { - FileObject srcDir = projectHelper.resolveFileObject(prop); - if (srcDir!=null) srcDir.removeFileChangeListener(metaInfListener); - } - if (wsdlFolder != null) { - wsdlFolder.removeFileChangeListener(wsdlListener); - } - - super.removeNotify(); - } - - protected Node[] createNodes(Object key) { - Node[] result; - if (key == LIBRARIES) { - //Libraries Node - result = new Node[] { - new LibrariesNode(NbBundle.getMessage(J2SELogicalViewProvider.class,"CTL_LibrariesNode"), - project, evaluator, helper, resolver, J2SEProjectProperties.RUN_CLASSPATH, - new String[] {J2SEProjectProperties.BUILD_CLASSES_DIR}, - "platform.active", // NOI18N - new Action[] { - LibrariesNode.createAddProjectAction(project, J2SEProjectProperties.JAVAC_CLASSPATH), - LibrariesNode.createAddLibraryAction(project, J2SEProjectProperties.JAVAC_CLASSPATH), - LibrariesNode.createAddFolderAction(project, J2SEProjectProperties.JAVAC_CLASSPATH), - null, - new PreselectPropertiesAction(project, "Libraries", CustomizerLibraries.COMPILE), // NOI18N - } - ), - }; - } else if (key == TEST_LIBRARIES) { - result = new Node[] { - new LibrariesNode(NbBundle.getMessage(J2SELogicalViewProvider.class,"CTL_TestLibrariesNode"), - project, evaluator, helper, resolver, J2SEProjectProperties.RUN_TEST_CLASSPATH, - new String[] { - J2SEProjectProperties.BUILD_TEST_CLASSES_DIR, - J2SEProjectProperties.JAVAC_CLASSPATH, - J2SEProjectProperties.BUILD_CLASSES_DIR, - }, - null, - new Action[] { - LibrariesNode.createAddProjectAction(project, J2SEProjectProperties.JAVAC_TEST_CLASSPATH), - LibrariesNode.createAddLibraryAction(project, J2SEProjectProperties.JAVAC_TEST_CLASSPATH), - LibrariesNode.createAddFolderAction(project, J2SEProjectProperties.JAVAC_TEST_CLASSPATH), - null, - new PreselectPropertiesAction(project, "Libraries", CustomizerLibraries.COMPILE_TESTS), // NOI18N - } - ), - }; - } - // else if (key instanceof SourceGroup) { - else if (key instanceof SourceGroupKey) { - //Source root - result = new Node[] {new PackageViewFilterNode(((SourceGroupKey) key).group, project)}; - - } else if (key == KEY_SERVICE_REFS) { - result = null; - FileObject clientRoot = project.getProjectDirectory(); - WebServicesClientView clientView = WebServicesClientView.getWebServicesClientView(clientRoot); - if (clientView != null) { - WebServicesClientSupport wss = WebServicesClientSupport.getWebServicesClientSupport(clientRoot); - if (wss!=null) { - FileObject wsdlFolder = wss.getWsdlFolder(); - if (wsdlFolder!=null) { - FileObject[] children = wsdlFolder.getChildren(); - boolean foundWsdl = false; - for (int i=0;i + + + + + + + + Index: src/org/netbeans/modules/java/j2seproject/wsclient/WebServicesNodeFactory.java =================================================================== RCS file: src/org/netbeans/modules/java/j2seproject/wsclient/WebServicesNodeFactory.java diff -N src/org/netbeans/modules/java/j2seproject/wsclient/WebServicesNodeFactory.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/netbeans/modules/java/j2seproject/wsclient/WebServicesNodeFactory.java 28 Aug 2006 08:20:56 -0000 @@ -0,0 +1,246 @@ +/* + * The contents of this file are subject to the terms of the Common Development + * and Distribution License (the License). You may not use this file except in + * compliance with the License. + * + * You can obtain a copy of the License at http://www.netbeans.org/cddl.html + * or http://www.netbeans.org/cddl.txt. + * + * When distributing Covered Code, include this CDDL Header Notice in each file + * and include the License file at http://www.netbeans.org/cddl.txt. + * If applicable, add the following below the CDDL Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * The Original Software is NetBeans. The Initial Developer of the Original + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun + * Microsystems, Inc. All Rights Reserved. + */ + +package org.netbeans.modules.java.j2seproject.wsclient; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.netbeans.api.project.Project; +import org.netbeans.modules.java.j2seproject.J2SEProject; +import org.netbeans.modules.java.j2seproject.UpdateHelper; +import org.netbeans.modules.java.j2seproject.ui.J2SELogicalViewProvider; +import org.netbeans.modules.websvc.api.client.WebServicesClientSupport; +import org.netbeans.modules.websvc.api.client.WebServicesClientView; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.PropertyEvaluator; +import org.netbeans.spi.project.support.ant.ReferenceHelper; +import org.netbeans.spi.project.ui.support.NodeFactory; +import org.netbeans.spi.project.ui.support.NodeList; +import org.openide.ErrorManager; +import org.openide.filesystems.FileChangeAdapter; +import org.openide.filesystems.FileEvent; +import org.openide.filesystems.FileObject; +import org.openide.nodes.Node; + +/** + * + * @author mkleint + */ +public class WebServicesNodeFactory implements NodeFactory { + + /** Creates a new instance of WebServicesNodeFactory */ + public WebServicesNodeFactory() { + } + + public NodeList createNodes(Project p) { + J2SEProject project = (J2SEProject)p.getLookup().lookup(J2SEProject.class); + assert project != null; + return new WsNodeList(project); + } + + public Node findPath(Project p, Node root, Object target) { + return null; + } + + private static class WsNodeList implements NodeList { + + private static final String WSDL_FOLDER=J2SEProjectWebServicesClientSupport.WSDL_FOLDER; + // Web service client + private static final Object KEY_SERVICE_REFS = "serviceRefs"; // NOI18N + + private J2SEProject project; + + private List listeners = new ArrayList(); + private final WsdlCreationListener wsdlListener; + private final MetaInfListener metaInfListener; + private FileObject wsdlFolder; + + private PropertyEvaluator evaluator; + private UpdateHelper helper; + private ReferenceHelper resolver; + + + public WsNodeList(J2SEProject proj) { + project = proj; + this.metaInfListener = new MetaInfListener(); + this.wsdlListener = new WsdlCreationListener(); + J2SELogicalViewProvider logView = (J2SELogicalViewProvider)project.getLookup().lookup(J2SELogicalViewProvider.class); + assert logView != null; + evaluator = logView.getEvaluator(); + helper = logView.getUpdateHelper(); + resolver = logView.getRefHelper(); + } + + public List keys() { + return Collections.singletonList(KEY_SERVICE_REFS); + } + + public synchronized void addChangeListener(ChangeListener l) { + listeners.add(l); + } + + public synchronized void removeChangeListener(ChangeListener l) { + listeners.remove(l); + } + + private void fireChange() { + ArrayList list = new ArrayList(); + synchronized (this) { + list.addAll(listeners); + } + Iterator it = list.iterator(); + while (it.hasNext()) { + ChangeListener elem = (ChangeListener) it.next(); + elem.stateChanged(new ChangeEvent( this )); + } + } + + public Node node(Object key) { + FileObject clientRoot = project.getProjectDirectory(); + WebServicesClientView clientView = WebServicesClientView.getWebServicesClientView(clientRoot); + if (clientView != null) { + WebServicesClientSupport wss = WebServicesClientSupport.getWebServicesClientSupport(clientRoot); + if (wss!=null) { + FileObject wsdlFolder = wss.getWsdlFolder(); + if (wsdlFolder!=null) { + FileObject[] children = wsdlFolder.getChildren(); + boolean foundWsdl = false; + for (int i=0;i