[jbosstools-commits] JBoss Tools SVN: r17524 - in trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core: src/org/jboss/ide/eclipse/as/wtp/core and 3 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Sep 10 20:27:56 EDT 2009


Author: rob.stryker at jboss.com
Date: 2009-09-10 20:27:56 -0400 (Thu, 10 Sep 2009)
New Revision: 17524

Added:
   trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/util/
   trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/util/LimitedContainerVirtualFolder.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFolderReferenceResolver.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFoldersVirtualComponent.java
Modified:
   trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/plugin.xml
   trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/modules/JBTProjectModuleDelegate.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/JBTVirtualComponent.java
Log:
JBIDE-4320 - custom module factories and extensions BOUYA

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/plugin.xml
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/plugin.xml	2009-09-11 00:26:00 UTC (rev 17523)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/plugin.xml	2009-09-11 00:27:56 UTC (rev 17524)
@@ -2,5 +2,12 @@
 <?eclipse version="3.4"?>
 <plugin>
    <extension-point id="referenceResolver" name="referenceResolver" schema="schema/referenceResolver.exsd"/>
+   <extension
+         point="org.jboss.ide.eclipse.as.wtp.core.referenceResolver">
+      <resolver
+            class="org.jboss.ide.eclipse.as.wtp.core.vcf.OutputFolderReferenceResolver"
+            id="org.jboss.ide.eclipse.as.wtp.core.vcf.outputFolderReferenceResolver">
+      </resolver>
+   </extension>
  
 </plugin>

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/modules/JBTProjectModuleDelegate.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/modules/JBTProjectModuleDelegate.java	2009-09-11 00:26:00 UTC (rev 17523)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/modules/JBTProjectModuleDelegate.java	2009-09-11 00:27:56 UTC (rev 17524)
@@ -1,16 +1,23 @@
 package org.jboss.ide.eclipse.as.wtp.core.modules;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.jst.j2ee.internal.deployables.J2EEDeployableFactory;
 import org.eclipse.wst.common.componentcore.ArtifactEdit;
 import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.core.model.IModuleResource;
 import org.eclipse.wst.web.internal.deployables.ComponentDeployable;
 import org.jboss.ide.eclipse.as.wtp.core.vcf.JBTVirtualArchiveComponent;
 
@@ -24,7 +31,64 @@
 		super(project, aComponent);
 	}
 	
+	
 	/*
+	 * Let's make this clean and organized
+	 * @see org.eclipse.wst.web.internal.deployables.ComponentDeployable#members()
+	 */
+	public IModuleResource[] members() throws CoreException {
+		members.clear();
+		IVirtualComponent vc = ComponentCore.createComponent(getProject());
+		if (vc != null) {
+			addFromRootVirtualFolder(vc);
+			addConsumableReferences(vc);
+			addUtilMembers(vc);
+		}
+		
+		IModuleResource[] mr = new IModuleResource[members.size()];
+		members.toArray(mr);
+		return mr;
+	}
+	
+	protected void addFromRootVirtualFolder(IVirtualComponent vc) throws CoreException {
+		IVirtualFolder vFolder = vc.getRootFolder();
+		IModuleResource[] mr = getMembers(vFolder, Path.EMPTY);
+		int size = mr.length;
+		for (int j = 0; j < size; j++) {
+			members.add(mr[j]);
+		}
+	}
+	
+	
+	/*
+	 * This will recursively search for consumed components, and children
+	 * of consumed components, and will shove them into the members area. =D 
+	 */
+	protected void addConsumableReferences(IVirtualComponent vc) throws CoreException {
+		List consumableMembers = new ArrayList();
+		IVirtualReference[] refComponents = vc.getReferences();
+    	for (int i = 0; i < refComponents.length; i++) {
+    		IVirtualReference reference = refComponents[i];
+    		if (reference != null && reference.getDependencyType()==IVirtualReference.DEPENDENCY_TYPE_CONSUMES) {
+    			IVirtualComponent consumedComponent = reference.getReferencedComponent();
+    			if (consumedComponent!=null) {
+    				if (consumedComponent.getRootFolder()!=null) {
+    					IVirtualFolder vFolder = consumedComponent.getRootFolder();
+    					IModuleResource[] mr = getMembers(vFolder, reference.getRuntimePath().makeRelative());
+    					int size = mr.length;
+    					for (int j = 0; j < size; j++) {
+    						if (!members.contains(mr[j]))
+    							members.add(mr[j]);
+    					}
+    					addUtilMembers(consumedComponent);
+    					addConsumableReferences(consumedComponent);
+    				}
+    			}
+    		}
+    	}
+	}
+	
+	/*
 	 * This method is meant to be overridden by subclasses.  Return whether or not to add this file
 	 * to the members list. If it should be filtered out, or if it will be returned as a child 
 	 * module instead, return false. Otherwise return true. 
@@ -45,7 +109,7 @@
 	}
 	
 	/*
-	 * Should we meld the jar / external jar / var reference in with the members() IModuleResource objects.
+	 * Should we meld the jar / external jar / var / reference in with the members() IModuleResource objects.
 	 * If yes, the reference will appear like any other file.
 	 * If no, you are expected to handle this file as a child module and expose it yourself
 	 */
@@ -67,8 +131,17 @@
 		return module;
     }
 
+    /**
+     * This should return the module factory which we are associated with.
+     * @return
+     */
     protected abstract String getFactoryId();
     
+    /*
+     * Get the URI for this child module relative to the parent module
+     * (non-Javadoc)
+     * @see org.jboss.ide.eclipse.as.wtp.core.modules.IJBTModule#getURI(org.eclipse.wst.server.core.IModule)
+     */
 	public String getURI(IModule child) {
 		if( component != null && child != null ) {
 	    	IVirtualReference[] components = getReferences(component);

Added: trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/util/LimitedContainerVirtualFolder.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/util/LimitedContainerVirtualFolder.java	                        (rev 0)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/util/LimitedContainerVirtualFolder.java	2009-09-11 00:27:56 UTC (rev 17524)
@@ -0,0 +1,69 @@
+package org.jboss.ide.eclipse.as.wtp.core.util;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualFile;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
+
+public class LimitedContainerVirtualFolder extends VirtualFolder {
+
+	private IContainer[] containers;
+	public LimitedContainerVirtualFolder(
+			IProject aComponentProject,
+			IPath aRuntimePath, 
+			IContainer[] containers) {
+		super(aComponentProject, aRuntimePath);
+		this.containers = containers;
+	}
+
+	public IContainer getUnderlyingFolder() { 
+		if( containers != null && containers.length > 0 
+				&& containers[0] != null )
+			return containers[0];
+		return null;
+	}
+	
+	public IContainer[] getUnderlyingFolders() {
+		return containers == null ? new IContainer[]{} : containers;
+	}
+	
+	public IVirtualResource[] members(int memberFlags) throws CoreException {
+		List<IVirtualResource> virtualResources = new ArrayList<IVirtualResource>(); // result
+		Set allNames = new HashSet();
+		
+		for( int i = 0; i < containers.length; i++ ) {
+			IResource realResource = containers[i];
+			if ((realResource != null) && (realResource.getType() == IResource.FOLDER || realResource.getType() == IResource.PROJECT)) {
+				IContainer realContainer = (IContainer) realResource;
+				IResource[] realChildResources = realContainer.members(memberFlags);
+				for (int realResourceIndex = 0; realResourceIndex < realChildResources.length; realResourceIndex++) {
+					IResource child = realChildResources[realResourceIndex];
+					String localName = child.getName();
+					if (allNames.add(localName)) {
+						IPath newRuntimePath = getRuntimePath().append(localName);
+						if (child instanceof IFile) {
+							virtualResources.add(new VirtualFile(getProject(), newRuntimePath, (IFile) child));
+						} else {
+							virtualResources.add(ComponentCore.createFolder(getProject(), newRuntimePath));
+						}
+					}
+				}
+			}
+			// An IResource.FILE would be an error condition (as this is a container)
+		}
+		return virtualResources.toArray(new IVirtualResource[virtualResources.size()]);
+	}
+
+	
+}

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/JBTVirtualComponent.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/JBTVirtualComponent.java	2009-09-11 00:26:00 UTC (rev 17523)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/JBTVirtualComponent.java	2009-09-11 00:27:56 UTC (rev 17524)
@@ -210,6 +210,8 @@
 	 * Overrides from VirtualComponent class
 	 * These are mostly here because of the extrapolation 
 	 * of createVirtualReference into its own method.
+	 * 
+	 * These can probably be removed in WTP 3.2
 	 * *******************************************/
 	@Override
 	public IVirtualReference[] getAllReferences() { 

Added: trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFolderReferenceResolver.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFolderReferenceResolver.java	                        (rev 0)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFolderReferenceResolver.java	2009-09-11 00:27:56 UTC (rev 17524)
@@ -0,0 +1,63 @@
+package org.jboss.ide.eclipse.as.wtp.core.vcf;
+
+import org.eclipse.core.internal.resources.Workspace;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
+import org.eclipse.wst.common.componentcore.internal.DependencyType;
+import org.eclipse.wst.common.componentcore.internal.ReferencedComponent;
+import org.eclipse.wst.common.componentcore.internal.impl.PlatformURLModuleConnection;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+
+public class OutputFolderReferenceResolver implements IReferenceResolver {
+	public static final String OUTPUT_FOLDER_SEGMENT = "org.jboss.ide.eclipse.as.wtp.core.vcf.outputFolder";
+	public static final String OUTPUT_FOLDER_PROTOCOL = PlatformURLModuleConnection.MODULE_PROTOCOL
+								+IPath.SEPARATOR+ OUTPUT_FOLDER_SEGMENT + IPath.SEPARATOR;
+	public OutputFolderReferenceResolver() {
+	}
+
+	public boolean canResolve(IVirtualComponent context,
+			ReferencedComponent referencedComponent) {
+		URI handle = referencedComponent.getHandle();
+		String s = handle.toString();
+		if(s.startsWith(OUTPUT_FOLDER_PROTOCOL))
+			return true;
+		return false;
+	}
+
+	public boolean canResolve(IVirtualReference reference) {
+		if( reference.getReferencedComponent() instanceof OutputFoldersVirtualComponent )
+			return true;
+		return false;
+	}
+
+	public IVirtualReference resolve(IVirtualComponent context,
+			ReferencedComponent referencedComponent) {
+		String project = referencedComponent.getHandle().segment(1);
+		IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject(project);
+		IVirtualComponent comp = new OutputFoldersVirtualComponent(p, context);
+		IVirtualReference ref = ComponentCore.createReference(context, comp);
+		ref.setArchiveName(referencedComponent.getArchiveName());
+		ref.setRuntimePath(referencedComponent.getRuntimePath());
+		ref.setDependencyType(referencedComponent.getDependencyType().getValue());
+		return ref;
+	}
+
+	public ReferencedComponent resolve(IVirtualReference reference) {
+		if( reference.getReferencedComponent() instanceof OutputFoldersVirtualComponent ) {
+			IProject p = reference.getReferencedComponent().getProject();
+			ReferencedComponent rc = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createReferencedComponent();
+			rc.setArchiveName(reference.getArchiveName());
+			rc.setRuntimePath(reference.getRuntimePath());
+			rc.setHandle(URI.createURI(OUTPUT_FOLDER_PROTOCOL + p.getName()));
+			rc.setDependencyType(DependencyType.CONSUMES_LITERAL);
+			return rc;
+		}
+		return null;
+	}
+
+}

Added: trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFoldersVirtualComponent.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFoldersVirtualComponent.java	                        (rev 0)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/wtp/core/vcf/OutputFoldersVirtualComponent.java	2009-09-11 00:27:56 UTC (rev 17524)
@@ -0,0 +1,112 @@
+package org.jboss.ide.eclipse.as.wtp.core.vcf;
+
+import java.util.Properties;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+import org.jboss.ide.eclipse.as.wtp.core.util.LimitedContainerVirtualFolder;
+
+public class OutputFoldersVirtualComponent implements IVirtualComponent {
+
+	private IProject project;
+	private IVirtualComponent referencingComp;
+	public OutputFoldersVirtualComponent(IProject p, IVirtualComponent referencingComponent) {
+		this.project = p;
+		this.referencingComp = referencingComponent;
+	}
+	
+	public void create(int updateFlags, IProgressMonitor aMonitor)
+			throws CoreException {
+		// Ignore
+	}
+
+	public boolean exists() {
+		return true;
+	}
+
+	public IVirtualComponent getComponent() {
+		return this;
+	}
+
+	public String getName() {
+		return getId();
+	}
+
+	public String getDeployedName() {
+		return getName();
+	}
+	
+	protected String getId() {
+		return OutputFolderReferenceResolver.OUTPUT_FOLDER_SEGMENT + Path.SEPARATOR + project.getName();
+	}
+
+	public IProject getProject() {
+		return project;
+	}
+	public IVirtualComponent[] getReferencingComponents() {
+		return referencingComp == null ? new IVirtualComponent[]{} : new IVirtualComponent[]{referencingComp};
+	}
+
+	public IVirtualFolder getRootFolder() {
+		IContainer[] containers = J2EEProjectUtilities.getOutputContainers(project);
+		return new LimitedContainerVirtualFolder(project, new Path("/"), containers);
+	}
+
+	public Properties getMetaProperties() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IPath[] getMetaResources() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IVirtualReference getReference(String aComponentName) {
+		// Ignore
+		return null;
+	}
+
+	public IVirtualReference[] getReferences() {
+		// Ignore; no children
+		return new IVirtualReference[]{};
+	}
+
+	public boolean isBinary() {
+		return false;
+	}
+
+	public void setMetaProperties(Properties properties) {
+		// Ignore
+	}
+
+	public void setMetaProperty(String name, String value) {
+		// Ignore
+	}
+
+	public void setMetaResources(IPath[] theMetaResourcePaths) {
+		// Ignore
+	}
+
+	public void setReferences(IVirtualReference[] theReferences) {
+		// Ignore
+	}
+
+	public Object getAdapter(Class adapter) {
+		// Ignore
+		return null;
+	}
+
+	public void addReferences(IVirtualReference[] references) {
+		// Ignore
+	}
+
+}



More information about the jbosstools-commits mailing list