Author: rob.stryker(a)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
+ }
+
+}
Show replies by date