Author: rob.stryker(a)jboss.com
Date: 2009-08-04 18:00:24 -0400 (Tue, 04 Aug 2009)
New Revision: 16966
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleFactory.java
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/META-INF/MANIFEST.MF
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleDelegate.java
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualArchiveComponent.java
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualComponent.java
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualFolder.java
Log:
Working on superclasses for JBIDE-4320
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/META-INF/MANIFEST.MF
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/META-INF/MANIFEST.MF 2009-08-04
21:15:39 UTC (rev 16965)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/META-INF/MANIFEST.MF 2009-08-04
22:00:24 UTC (rev 16966)
@@ -14,7 +14,8 @@
org.eclipse.jst.j2ee.core;bundle-version="1.1.300",
org.eclipse.jst.j2ee;bundle-version="1.1.300",
org.eclipse.wst.common.project.facet.core;bundle-version="1.4.0",
- org.eclipse.jem.util;bundle-version="2.0.200"
+ org.eclipse.jem.util;bundle-version="2.0.200",
+ org.eclipse.wst.web;bundle-version="1.1.300"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Export-Package: org.jboss.ide.eclipse.as.wtp.override.core.modules,
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleDelegate.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleDelegate.java 2009-08-04
21:15:39 UTC (rev 16965)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleDelegate.java 2009-08-04
22:00:24 UTC (rev 16966)
@@ -1,62 +1,100 @@
package org.jboss.ide.eclipse.as.wtp.override.core.modules;
-import java.util.ArrayList;
-
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
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.resources.IVirtualComponent;
-import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
-import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.model.IModuleResource;
-import org.eclipse.wst.server.core.util.ModuleFile;
-import org.eclipse.wst.server.core.util.ModuleFolder;
-import org.eclipse.wst.server.core.util.ProjectModule;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.web.internal.deployables.ComponentDeployable;
+import org.jboss.ide.eclipse.as.wtp.override.core.vcf.JBTVirtualArchiveComponent;
-public class JBTProjectModuleDelegate extends ProjectModule {
- public JBTProjectModuleDelegate() {
- super();
- }
+public abstract class JBTProjectModuleDelegate extends ComponentDeployable implements
IJBTModule {
+
public JBTProjectModuleDelegate(IProject project) {
- super(project);
+ this(project,ComponentCore.createComponent(project));
}
- @Override
- public IModule[] getChildModules() {
- return null;
+ public JBTProjectModuleDelegate(IProject project, IVirtualComponent aComponent) {
+ super(project, aComponent);
}
+
+ /*
+ * 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.
+ *
+ * @param file
+ * @return boolean should add file?
+ */
+ protected boolean shouldAddComponentFile(IFile file) {
+ return true;
+ }
- public IModuleResource[] members() throws CoreException {
- IProject project = getProject();
- final IVirtualComponent c = ComponentCore.createComponent(project);
- IVirtualFolder vf = c.getRootFolder();
- IModuleResource[] children = getResources(vf);
- return children;
+ /**
+ * If you will need to check any xml artifacts to verify whether a file should
+ * be added as a child module or a member, return that artifact here
+ */
+ protected ArtifactEdit getComponentArtifactEditForRead() {
+ return null;
}
+
+ /*
+ * 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
+ */
+ protected boolean shouldIncludeUtilityComponent(IVirtualComponent virtualComp,
IVirtualReference[] components, ArtifactEdit edit) {
+ // superclass just checks to make sure it's a binary component
+ return super.shouldIncludeUtilityComponent(virtualComp, components, edit);
+ }
- protected IModuleResource[] getResources(IVirtualFolder parent) {
- ArrayList<IModuleResource> members = new ArrayList<IModuleResource>();
- IVirtualResource[] resources = new IVirtualResource[]{};
- try {
- resources = parent.members();
- } catch( CoreException ce ) {}
- for( int i = 0; i < resources.length; i++ ) {
- if( resources[i].getType() == IVirtualResource.FILE) {
- IFile f = (IFile)resources[i].getUnderlyingResource();
- ModuleFile mf = new ModuleFile(f, f.getName(),
resources[i].getRuntimePath().removeLastSegments(1));
- members.add(mf);
- } else if( resources[i].getType() == IVirtualResource.FOLDER){
- IFolder folder = (IFolder)resources[i].getUnderlyingResource();
- ModuleFolder mf = new ModuleFolder(folder, folder.getName(),
resources[i].getRuntimePath().removeLastSegments(1));
- IModuleResource[] children = getResources((IVirtualFolder)resources[i]);
- mf.setMembers(children);
- members.add(mf);
+ /*
+ * If you have an IVirtualReference which should *not* be included as a utility
component,
+ * you should return an IModule for that object here. Excerpt is from
J2EEFlexProjDeployable
+ */
+ protected IModule gatherModuleReference(IVirtualComponent component,
IVirtualComponent targetComponent ) {
+ IModule module = super.gatherModuleReference(component, targetComponent);
+ // Handle binary module components
+ if (targetComponent instanceof JBTVirtualArchiveComponent) {
+ module =
ServerUtil.getModule(getFactoryId()+":"+targetComponent.getName());
//$NON-NLS-1$
+ }
+ return module;
+ }
+
+ protected abstract String getFactoryId();
+
+ public String getURI(IModule child) {
+ if( component != null && child != null ) {
+ IVirtualReference[] components = getReferences(component);
+ for (int i = 0; i < components.length; i++) {
+ IVirtualReference reference = components[i];
+ if (reference != null &&
reference.getDependencyType()==IVirtualReference.DEPENDENCY_TYPE_USES) {
+ IVirtualComponent virtualComp = reference.getReferencedComponent();
+ IModule module = gatherModuleReference(component, virtualComp);
+ if( child.equals(module)) {
+ if( !virtualComp.isBinary()) {
+ IPath path = reference.getRuntimePath();
+ return path.append(reference.getArchiveName()).toString();
+ } else if( virtualComp instanceof JBTVirtualArchiveComponent ){
+ JBTVirtualArchiveComponent moduleVirtualArchiveComponent =
(JBTVirtualArchiveComponent)virtualComp;
+ IPath moduleDeployPath = moduleVirtualArchiveComponent.getDeploymentPath();
+ String moduleName = new
Path(moduleVirtualArchiveComponent.getName()).lastSegment();
+ if (moduleName.equals(moduleDeployPath.lastSegment())){
+ return moduleDeployPath.toString();
+ }
+ return moduleDeployPath.append(moduleName).toString();
+ }
+ }
+ }
}
}
- return (IModuleResource[]) members
- .toArray(new IModuleResource[members.size()]);
+ return child.getName();
}
+
}
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleFactory.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleFactory.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/modules/JBTProjectModuleFactory.java 2009-08-04
22:00:24 UTC (rev 16966)
@@ -0,0 +1,85 @@
+package org.jboss.ide.eclipse.as.wtp.override.core.modules;
+
+import java.util.HashMap;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.internal.ModuleFactory;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
+import org.eclipse.wst.server.core.model.ModuleDelegate;
+import org.eclipse.wst.server.core.model.ModuleFactoryDelegate;
+import org.eclipse.wst.server.core.util.ProjectModuleFactoryDelegate;
+import org.jboss.ide.eclipse.as.wtp.override.core.Activator;
+
+public abstract class JBTProjectModuleFactory extends ProjectModuleFactoryDelegate {
+ public static JBTProjectModuleFactory getFactory(String id) {
+ ModuleFactory[] factories = ServerPlugin.getModuleFactories();
+ for (int i = 0; i < factories.length; i++) {
+ if (factories[i].getId().equals(id)) {
+ ModuleFactoryDelegate o = factories[i]
+ .getDelegate(new NullProgressMonitor());
+ return (JBTProjectModuleFactory)o;
+ }
+ }
+ return null;
+ }
+
+
+ protected HashMap<IModule, JBTProjectModuleDelegate> moduleToDelegate;
+ protected String moduleType;
+ protected String facetType;
+ public JBTProjectModuleFactory(String moduleType, String facetType) {
+ moduleToDelegate = new HashMap<IModule, JBTProjectModuleDelegate>();
+ this.moduleType = moduleType;
+ this.facetType = facetType;
+ }
+
+ @Override
+ protected void clearCache(IProject project) {
+ super.clearCache(project);
+ moduleToDelegate.remove(project);
+ }
+
+ @Override
+ public ModuleDelegate getModuleDelegate(IModule module) {
+ return moduleToDelegate.get(module);
+ }
+
+ protected IModule[] createModules(IProject project) {
+ IFacetedProject facetProject;
+ try {
+ facetProject = ProjectFacetsManager.create(project);
+ if (facetProject == null) {
+ return null;
+ }
+ IProjectFacet facet = ProjectFacetsManager
+ .getProjectFacet(facetType);
+
+ if (facetProject.hasProjectFacet(facet)) {
+ IProjectFacetVersion version = facetProject.getProjectFacetVersion(facet);
+ IModule module = createModule(
+ moduleType + "." + project.getName(),
+ project.getName(),
+ moduleType,
+ version.getVersionString(),
+ project);
+ moduleToDelegate.put(module, createDelegate(project));
+
+ // TODO - create children!!! see JEEDeployableFactory
+ return new IModule[] { module };
+ }
+ } catch (CoreException e) {
+ Activator.getDefault().getLog().log(e.getStatus());
+ }
+ return null;
+ }
+
+ protected abstract JBTProjectModuleDelegate createDelegate(IProject project);
+
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualArchiveComponent.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualArchiveComponent.java 2009-08-04
21:15:39 UTC (rev 16965)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualArchiveComponent.java 2009-08-04
22:00:24 UTC (rev 16966)
@@ -3,13 +3,22 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualArchiveComponent;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
public class JBTVirtualArchiveComponent
- extends J2EEModuleVirtualArchiveComponent implements IJBTComponent {
+ extends VirtualArchiveComponent implements IJBTComponent {
+ private IPath deploymentPath;
public JBTVirtualArchiveComponent(IProject aComponentProject,
String archiveLocation, IPath aRuntimePath) {
super(aComponentProject, archiveLocation, aRuntimePath);
}
+ public IPath getDeploymentPath() {
+ return deploymentPath;
+ }
+ public void setDeploymentPath(IPath path) {
+ this.deploymentPath = path;
+ }
+
}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualComponent.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualComponent.java 2009-08-04
21:15:39 UTC (rev 16965)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualComponent.java 2009-08-04
22:00:24 UTC (rev 16966)
@@ -66,25 +66,10 @@
IVirtualReference[] cached = getCachedReferences();
if (cached != null)
return cached;
- List<IVirtualReference> hardReferences = getHardReferences(this);
- if( exposesLooseReferences()) {
- List dynamicReferences = getLooseArchiveReferences(this, hardReferences);
- if (dynamicReferences != null) {
- hardReferences.addAll(dynamicReferences);
- }
- }
- cachedReferences = (IVirtualReference[]) hardReferences.toArray(new
IVirtualReference[hardReferences.size()]);
+ cachedReferences = getHardReferences(this);
return cachedReferences;
}
-
- protected boolean exposesLooseReferences() {
- return false;
- }
- protected boolean isDynamicComponent(IVirtualFile file) {
- return false;
- }
-
// Returns cache if still valid or null
public IVirtualReference[] getCachedReferences() {
if (cachedReferences != null && checkIfStillValid())
@@ -98,7 +83,7 @@
return DependencyGraphManager.getInstance().checkIfStillValid(depGraphModStamp);
}
- private static List<IVirtualReference> getHardReferences(IVirtualComponent
earComponent) {
+ private static IVirtualReference[] getHardReferences(IVirtualComponent earComponent) {
StructureEdit core = null;
List hardReferences = new ArrayList();
try {
@@ -127,7 +112,7 @@
if (core != null)
core.dispose();
}
- return hardReferences;
+ return (IVirtualReference[]) hardReferences.toArray(new
IVirtualReference[hardReferences.size()]);
}
protected static String getArchiveName(IVirtualComponent referencedIVirtualComponent,
ReferencedComponent referencedComponent) {
@@ -199,6 +184,7 @@
}
return uri;
}
+ /*
private static List getLooseArchiveReferences(JBTVirtualComponent component, List
hardReferences) {
return getLooseArchiveReferences(component, hardReferences, null,
(EARVirtualRootFolder)component.getRootFolder());
@@ -207,7 +193,7 @@
private static List getLooseArchiveReferences(JBTVirtualComponent component, List
hardReferences, List dynamicReferences, EARVirtualRootFolder folder) {
return null;
}
-
+*/
// Potentially to be overridden (awesome?)
protected static IVirtualReference createVirtualReference(IVirtualComponent context,
ReferencedComponent referencedComponent) {
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualFolder.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualFolder.java 2009-08-04
21:15:39 UTC (rev 16965)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.wtp.override.core/src/org/jboss/ide/eclipse/as/wtp/override/core/vcf/JBTVirtualFolder.java 2009-08-04
22:00:24 UTC (rev 16966)
@@ -1,17 +1,16 @@
package org.jboss.ide.eclipse.as.wtp.override.core.vcf;
-import java.util.ArrayList;
-import java.util.List;
-
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.jst.j2ee.internal.common.classpath.J2EEComponentClasspathUpdater;
import org.eclipse.wst.common.componentcore.internal.resources.VirtualFolder;
-import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
-import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
+/**
+ * Currently does nothing at all, which is awesome.
+ * Virtual components in jbt should be super dumb.
+ * Stick with the model damnit.
+ * @author rob
+ *
+ */
public class JBTVirtualFolder extends VirtualFolder {
private JBTVirtualComponent component;
public JBTVirtualFolder(IProject aComponentProject,
@@ -19,44 +18,4 @@
super(aComponentProject, aRuntimePath);
this.component = component;
}
-
- public IVirtualResource[] superMembers() throws CoreException {
- return superMembers(IResource.NONE);
- }
-
- public IVirtualResource[] superMembers(int memberFlags) throws CoreException {
- return super.members(memberFlags);
- }
-
- public boolean isDynamicComponent(IVirtualFile vFile){
- return component.isDynamicComponent(vFile);
- }
-
- /**
- * For now, just rip out files with .jar, .rar, or .war file extensions, because these
are
- * the only files automatically added dyamically
- */
- public IVirtualResource[] members(int memberFlags) throws CoreException {
- // If this component doesn't expose loose refs, just give normal answer
- if( !component.exposesLooseReferences() ) {
- return superMembers(memberFlags);
- }
-
- IVirtualResource[] members = superMembers(memberFlags);
- List virtualResources = new ArrayList();
- boolean shouldAdd = true;
- for (int i = 0; i < members.length; i++) {
- shouldAdd = true;
- if (IVirtualResource.FILE == members[i].getType()) {
- if(isDynamicComponent((IVirtualFile)members[i])){
- shouldAdd = false;
- }
- }
- if (shouldAdd) {
- virtualResources.add(members[i]);
- }
- }
- return (IVirtualResource[]) virtualResources
- .toArray(new IVirtualResource[virtualResources.size()]);
- }
}