Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java')
-rw-r--r--plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java1036
1 files changed, 0 insertions, 1036 deletions
diff --git a/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java b/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java
deleted file mode 100644
index 27a810a6a..000000000
--- a/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEFlexProjDeployable.java
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.j2ee.internal.deployables;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-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.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jem.workbench.utility.JemProjectUtilities;
-import org.eclipse.jst.j2ee.application.Application;
-import org.eclipse.jst.j2ee.classpathdep.ClasspathDependencyUtil;
-import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
-import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualArchiveComponent;
-import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent;
-import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit;
-import org.eclipse.jst.j2ee.ejb.EJBJar;
-import org.eclipse.jst.j2ee.internal.EjbModuleExtensionHelper;
-import org.eclipse.jst.j2ee.internal.IEJBModelExtenderManager;
-import org.eclipse.jst.j2ee.internal.J2EEConstants;
-import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyManifestUtil;
-import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyVirtualComponent;
-import org.eclipse.jst.j2ee.internal.plugin.IJ2EEModuleConstants;
-import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
-import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
-import org.eclipse.jst.server.core.IApplicationClientModule;
-import org.eclipse.jst.server.core.IConnectorModule;
-import org.eclipse.jst.server.core.IEJBModule;
-import org.eclipse.jst.server.core.IEnterpriseApplication;
-import org.eclipse.jst.server.core.IJ2EEModule;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.wst.common.componentcore.ArtifactEdit;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.internal.ComponentResource;
-import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
-import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
-import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
-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.internal.ModuleFile;
-import org.eclipse.wst.server.core.internal.ModuleFolder;
-import org.eclipse.wst.server.core.model.IModuleFile;
-import org.eclipse.wst.server.core.model.IModuleFolder;
-import org.eclipse.wst.server.core.model.IModuleResource;
-import org.eclipse.wst.web.internal.deployables.ComponentDeployable;
-/**
- * J2EE module superclass.
- */
-public class J2EEFlexProjDeployable extends ComponentDeployable implements IJ2EEModule, IEnterpriseApplication, IApplicationClientModule, IConnectorModule, IEJBModule, IWebModule {
- protected static final IPath WEB_CLASSES_PATH = new Path(J2EEConstants.WEB_INF_CLASSES);
- protected static final IPath MANIFEST_PATH = new Path(J2EEConstants.MANIFEST_URI);
- protected static IPath WEBLIB = new Path(J2EEConstants.WEB_INF_LIB).makeAbsolute();
- protected IPackageFragmentRoot[] cachedSourceContainers;
- protected IContainer[] cachedOutputContainers;
- protected HashMap cachedOutputMappings;
- protected HashMap cachedSourceOutputPairs;
- protected List classpathComponentDependencyURIs = new ArrayList();
-
- /**
- * Constructor for J2EEFlexProjDeployable.
- *
- * @param project
- * @param aComponent
- */
- public J2EEFlexProjDeployable(IProject project, IVirtualComponent aComponent) {
- super(project, aComponent);
- }
-
-
- /**
- * Constructor for J2EEFlexProjDeployable.
- *
- * @param project
- */
- public J2EEFlexProjDeployable(IProject project) {
- super(project);
- }
-
- /**
- * Returns the root folders for the resources in this module.
- *
- * @return a possibly-empty array of resource folders
- */
- public IContainer[] getResourceFolders() {
- List result = new ArrayList();
- IVirtualComponent vc = ComponentCore.createComponent(getProject());
- if (vc != null) {
- IVirtualFolder vFolder = vc.getRootFolder();
- if (vFolder != null) {
- IContainer[] underlyingFolders = vFolder.getUnderlyingFolders();
- result.addAll(Arrays.asList(underlyingFolders));
- }
- }
- return (IContainer[]) result.toArray(new IContainer[result.size()]);
- }
-
- /**
- * Returns the root folders containing Java output in this module.
- *
- * @return a possibly-empty array of Java output folders
- */
- public IContainer[] getJavaOutputFolders() {
- if (cachedOutputContainers == null)
- cachedOutputContainers = getJavaOutputFolders(getProject());
- return cachedOutputContainers;
- }
-
- public IContainer[] getJavaOutputFolders(IProject project) {
- if (project == null)
- return new IContainer[0];
- return J2EEProjectUtilities.getOutputContainers(project);
- }
-
- protected boolean shouldIncludeUtilityComponent(IVirtualComponent virtualComp,IVirtualReference[] references, ArtifactEdit edit) {
- // If the component module is an EAR we know all archives are filtered out of virtual component members
- // and we will return only those archives which are not binary J2EE modules in the EAR DD. These J2EE modules will
- // be returned by getChildModules()
- if (J2EEProjectUtilities.isEARProject(component.getProject())) {
- return virtualComp != null && virtualComp.isBinary() && !isNestedJ2EEModule(virtualComp, references, (EARArtifactEdit)edit);
- } else {
- return super.shouldIncludeUtilityComponent(virtualComp, references, edit);
- }
- }
-
- protected void addUtilMember(IVirtualComponent parent, IVirtualReference reference, IPath runtimePath) {
- // do not add classpath dependencies whose runtime path (../) maps to the parent component or that represent
- // class folders
- if (!runtimePath.equals(IClasspathDependencyConstants.RUNTIME_MAPPING_INTO_CONTAINER_PATH)
- && !ClasspathDependencyUtil.isClassFolderReference(reference)) {
- super.addUtilMember(parent, reference, runtimePath);
- }
- }
-
- protected IModuleResource[] getBinaryModuleMembers() {
- IPath archivePath = ((J2EEModuleVirtualArchiveComponent)component).getWorkspaceRelativePath();
- ModuleFile mf = null;
- if (archivePath != null) { //In Workspace
- IFile utilFile = ResourcesPlugin.getWorkspace().getRoot().getFile(archivePath);
- mf = new ModuleFile(utilFile, utilFile.getName(), ((J2EEModuleVirtualArchiveComponent)component).getRuntimePath().makeRelative());
- } else {
- File extFile = ((J2EEModuleVirtualArchiveComponent)component).getUnderlyingDiskFile();
- mf = new ModuleFile(extFile, extFile.getName(), ((J2EEModuleVirtualArchiveComponent)component).getRuntimePath().makeRelative());
- }
- return new IModuleResource[] {mf};
- }
-
- public IModuleResource[] members() throws CoreException {
- members.clear();
- classpathComponentDependencyURIs.clear();
-
- // Handle binary components
- if (component instanceof J2EEModuleVirtualArchiveComponent)
- return getBinaryModuleMembers();
-
- if (J2EEProjectUtilities.isEARProject(component.getProject())) {
- // If an EAR, add classpath contributions for all referenced modules
- addReferencedComponentClasspathDependencies(component, false);
- } else {
- if (J2EEProjectUtilities.isDynamicWebProject(component.getProject())) {
- // If a web, add classpath contributions for all WEB-INF/lib modules
- addReferencedComponentClasspathDependencies(component, true);
- }
- if (canExportClasspathComponentDependencies(component)){
- saveClasspathDependencyURIs(component);
- }
- // Add all Java output folders that have publish/export attributes
- addClassFolderDependencies(component);
- }
-
- // If j2ee project structure is a single root structure, just return optimized members
- if (isSingleRootStructure()) {
- final IModuleResource[] resources = getOptimizedMembers();
- if (!classpathComponentDependencyURIs.isEmpty()) {
- for (int i = 0; i < resources.length; i++) {
- if (resources[i] instanceof IModuleFolder) {
- IModuleFolder folder = (IModuleFolder) resources[i];
- if (folder.getName().equals(J2EEConstants.META_INF)) {
- IModuleResource[] files = folder.members();
- for (int j = 0; j < files.length; j++) {
- files[j] = replaceManifestFile((IModuleFile) files[j]);
- }
- }
- }
- }
- }
- // add to any potentially mapped Java class folders
- for (int i = 0; i < resources.length; i++) {
- members.add(resources[i]);
- }
- return (IModuleResource[]) members.toArray(new IModuleResource[members.size()]);
- }
-
- cachedSourceContainers = J2EEProjectUtilities.getSourceContainers(getProject());
- try {
- IPath javaPath = Path.EMPTY;
- if (J2EEProjectUtilities.isDynamicWebProject(component.getProject()))
- javaPath = WEB_CLASSES_PATH;
-
- if (component != null) {
- IVirtualFolder vFolder = component.getRootFolder();
- IModuleResource[] mr = getMembers(vFolder, Path.EMPTY);
- int size = mr.length;
- for (int j = 0; j < size; j++) {
- members.add(mr[j]);
- }
- }
-
- IContainer[] javaCont = getJavaOutputFolders();
- int size = javaCont.length;
- for (int i = 0; i < size; i++) {
- //If the java output is in the scope of the virtual component, ignore to avoid duplicates
- if (ComponentCore.createResources(javaCont[i]).length > 0)
- continue;
- IModuleResource[] mr = getMembers(javaCont[i], javaPath, javaPath, javaCont);
- int size2 = mr.length;
- for (int j = 0; j < size2; j++) {
- members.add(mr[j]);
- }
- }
-
- if (component != null) {
- addUtilMembers(component);
- List consumableMembers = getConsumableReferencedMembers(component);
- if (!consumableMembers.isEmpty())
- members.addAll(consumableMembers);
- }
-
- IModuleResource[] mr = new IModuleResource[members.size()];
- members.toArray(mr);
- return mr;
- } finally {
- cachedSourceContainers = null;
- cachedOutputContainers = null;
- cachedOutputMappings = null;
- cachedSourceOutputPairs = null;
- }
- }
-
- protected IModuleFile createModuleFile(IFile file, IPath path) {
- // if this is the MANIFEST.MF file and we have classpath component dependencies,
- // update it
- return replaceManifestFile(super.createModuleFile(file, path));
- }
-
- protected IModuleFile replaceManifestFile(IModuleFile moduleFile) {
- final IFile file = (IFile) moduleFile.getAdapter(IFile.class);
- final IPath path = moduleFile.getModuleRelativePath();
- // if the MANIFEST.MF is being requested and we have classpath component dependencies,
- // dynamically generate a customized MANIFEST.MF and return that
- if (path.append(file.getName()).equals(MANIFEST_PATH) && !classpathComponentDependencyURIs.isEmpty()) {
- final IProject project = file.getProject();
- final IPath workingLocation = project.getWorkingLocation(J2EEPlugin.PLUGIN_ID);
- // create path to temp MANIFEST.MF
- final IPath tempManifestPath = workingLocation.append(MANIFEST_PATH);
- final File fsFile = tempManifestPath.toFile();
- if (!fsFile.exists()) {
- // create parent dirs for temp MANIFEST.MF
- final File parent = fsFile.getParentFile();
- if (!parent.exists()) {
- if (!parent.mkdirs()) {
- return moduleFile;
- }
- }
- }
- // create temp MANIFEST.MF using util method
- try {
- ClasspathDependencyManifestUtil.updateManifestClasspath(file, classpathComponentDependencyURIs, new FileOutputStream(fsFile));
- // create new ModuleFile that points to temp MANIFEST.MF
- return new ModuleFile(fsFile, file.getName(), path);
- } catch (IOException ioe) {
- return moduleFile;
- }
- }
- return moduleFile;
- }
-
- protected IModuleResource[] handleJavaPath(IPath path, IPath javaPath, IPath curPath, IContainer[] javaCont, IModuleResource[] mr, IContainer cc) throws CoreException {
- if (curPath.equals(javaPath)) {
- int size = javaCont.length;
- for (int i = 0; i < size; i++) {
- IModuleResource[] mr2 = getMembers(javaCont[i], path.append(cc.getName()), null, null);
- IModuleResource[] mr3 = new IModuleResource[mr.length + mr2.length];
- System.arraycopy(mr, 0, mr3, 0, mr.length);
- System.arraycopy(mr2, 0, mr3, mr.length, mr2.length);
- mr = mr3;
- }
- } else {
- boolean containsFolder = false;
- String name = javaPath.segment(curPath.segmentCount());
- int size = mr.length;
- for (int i = 0; i < size && !containsFolder; i++) {
- if (mr[i] instanceof IModuleFolder) {
- IModuleFolder mf2 = (IModuleFolder) mr[i];
- if (name.equals(mf2.getName())) {
- containsFolder = true;
- }
- }
- }
-
- if (!containsFolder && javaCont.length > 0) {
- ModuleFolder mf2 = new ModuleFolder(javaCont[0], name, curPath);
- IModuleResource[] mrf = new IModuleResource[0];
- size = javaCont.length;
- for (int i = 0; i < size; i++) {
- IModuleResource[] mrf2 = getMembers(javaCont[i], javaPath, null, null);
- IModuleResource[] mrf3 = new IModuleResource[mrf.length + mrf2.length];
- System.arraycopy(mrf, 0, mrf3, 0, mrf.length);
- System.arraycopy(mrf2, 0, mrf3, mrf.length, mrf2.length);
- mrf = mrf3;
- }
-
- mf2.setMembers(mrf);
-
- IModuleResource[] mr3 = new IModuleResource[mr.length + 1];
- System.arraycopy(mr, 0, mr3, 0, mr.length);
- mr3[mr.length] = mf2;
- mr = mr3;
- }
- }
- return mr;
- }
-
- /**
- * Returns the classpath as a list of absolute IPaths.
- *
- * @return an array of paths
- */
- public IPath[] getClasspath() {
- List paths = new ArrayList();
- IJavaProject proj = JemProjectUtilities.getJavaProject(getProject());
- URL[] urls = JemProjectUtilities.getClasspathAsURLArray(proj);
- for (int i = 0; i < urls.length; i++) {
- URL url = urls[i];
- paths.add(Path.fromOSString(url.getPath()));
- }
- return (IPath[]) paths.toArray(new IPath[paths.size()]);
- }
-
- public String getJNDIName(String ejbName) {
- if (!J2EEProjectUtilities.isEJBProject(component.getProject()))
- return null;
- EjbModuleExtensionHelper modHelper = null;
- EJBJar jar = null;
- ArtifactEdit ejbEdit = null;
- try {
- ejbEdit = ComponentUtilities.getArtifactEditForRead(component);
- if (ejbEdit != null) {
- jar = (EJBJar) ejbEdit.getContentModelRoot();
- modHelper = IEJBModelExtenderManager.INSTANCE.getEJBModuleExtension(null);
- return modHelper == null ? null : modHelper.getJNDIName(jar, jar.getEnterpriseBeanNamed(ejbName));
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (ejbEdit != null)
- ejbEdit.dispose();
- }
- return null;
- }
-
- /**
- * This method will handle a number of J2EE related scenarios. If this is an ear and a child module is passed in,
- * the URI for that child module will be returned. If no child module was passed, the URI of the EAR is returned.
- * If this is a child component and the module passed in is the EAR, we grab the module uri for this compared to that
- * EAR. If no ear module is passed in we look for one and use it and return URI relative to found EAR. If no EAR's
- * are found the URI is returned in a default manner.
- *
- * @return URI string
- */
- public String getURI(IModule module) {
- // If the component is an ear and the module passed in is a child module
- if (component!=null && module!=null && J2EEProjectUtilities.isEARProject(component.getProject()))
- return getContainedURI(module);
-
- IVirtualComponent ear = null;
- String aURI = null;
- // If the component is a child module and the module passed in is the ear
- if (module != null && J2EEProjectUtilities.isEARProject(module.getProject()))
- ear = ComponentCore.createComponent(module.getProject());
- // else if the component is a child module and the module passed in is null, search for first ear
- else if (module==null && component != null) {
- IProject[] earProjects = J2EEProjectUtilities.getReferencingEARProjects(component.getProject());
- if (earProjects.length>0)
- ear = ComponentCore.createComponent(earProjects[0]);
- }
- // We have a valid ear and the component is a valid child
- if (ear != null && component != null) {
- EARArtifactEdit earEdit = null;
- try {
- earEdit = EARArtifactEdit.getEARArtifactEditForRead(ear);
- if (earEdit != null)
- aURI = earEdit.getModuleURI(component);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (earEdit != null)
- earEdit.dispose();
- }
- }
- // We have an ear component and no child module
- else if (component!=null && J2EEProjectUtilities.isEARProject(component.getProject())) {
- aURI = component.getDeployedName()+IJ2EEModuleConstants.EAR_EXT;
- }
- // We have child components but could not find valid ears
- else if (component != null && J2EEProjectUtilities.isDynamicWebProject(component.getProject())) {
- if (module != null) {
- IVirtualComponent webComp = ComponentCore.createComponent(component.getProject());
- String extension = IJ2EEModuleConstants.JAR_EXT;
- if (J2EEProjectUtilities.isDynamicWebProject(module.getProject())) {
- extension = IJ2EEModuleConstants.WAR_EXT;
- } else if (J2EEProjectUtilities.isJCAProject(module.getProject())) {
- extension = IJ2EEModuleConstants.RAR_EXT;
- }
- IVirtualReference reference = webComp.getReference(module.getProject().getName());
- if(reference != null){
- aURI = ComponentUtilities.getDeployUriOfComponent(reference, extension);
- } else {
- aURI = webComp.getDeployedName() + extension;
- }
- }
- else {
- aURI = component.getDeployedName() + IJ2EEModuleConstants.WAR_EXT;
- }
- }
- else if (component!=null && (J2EEProjectUtilities.isEJBProject(component.getProject()) || J2EEProjectUtilities.isApplicationClientProject(component.getProject()))) {
- aURI = component.getDeployedName()+IJ2EEModuleConstants.JAR_EXT;
- }
- else if (component!=null && J2EEProjectUtilities.isJCAProject(component.getProject())) {
- aURI = component.getDeployedName()+IJ2EEModuleConstants.RAR_EXT;
- }
-
- if (aURI !=null && aURI.length()>1 && aURI.startsWith("/")) //$NON-NLS-1$
- aURI = aURI.substring(1);
- return aURI;
- }
-
- protected boolean isBinaryModuleArchive(IModule module) {
- if (module!=null && module.getName().endsWith(IJ2EEModuleConstants.JAR_EXT) || module.getName().endsWith(IJ2EEModuleConstants.WAR_EXT) ||
- module.getName().endsWith(IJ2EEModuleConstants.RAR_EXT)) {
- if (component!=null && J2EEProjectUtilities.isEARProject(component.getProject()))
- return true;
- }
- return false;
- }
-
- private String getContainedURI(IModule module) {
- if (component instanceof J2EEModuleVirtualArchiveComponent || isBinaryModuleArchive(module))
- return new Path(module.getName()).lastSegment();
-
- IVirtualComponent comp = ComponentCore.createComponent(module.getProject());
- String aURI = null;
- if (comp!=null && component!=null && J2EEProjectUtilities.isEARProject(component.getProject())) {
- EARArtifactEdit earEdit = null;
- try {
- earEdit = EARArtifactEdit.getEARArtifactEditForRead(component);
- if (earEdit != null)
- aURI = earEdit.getModuleURI(comp);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (earEdit != null)
- earEdit.dispose();
- }
- }
- if (aURI !=null && aURI.length()>1 && aURI.startsWith("/")) //$NON-NLS-1$
- aURI = aURI.substring(1);
- return aURI;
- }
-
- /**
- * This method returns the context root property from the deployable project's .component file
- */
- public String getContextRoot() {
- Properties props = component.getMetaProperties();
- if(props.containsKey(J2EEConstants.CONTEXTROOT))
- return props.getProperty(J2EEConstants.CONTEXTROOT);
- return component.getName();
- }
-
- /**
- * This method is applicable for a web deployable. The module passed in should either be null or
- * the EAR module the web deployable is contained in. It will return the context root from the EAR
- * if it has one or return the .component value in the web project if it is standalone.
- *
- * @param module
- * @return contextRoot String
- */
- public String getContextRoot(IModule earModule) {
- IProject deployProject = component.getProject();
- String contextRoot = null;
- if (earModule == null)
- return getContextRoot();
- else if (J2EEProjectUtilities.isEARProject(earModule.getProject()) && J2EEProjectUtilities.isDynamicWebProject(deployProject)) {
- EARArtifactEdit edit = null;
- try {
- edit = EARArtifactEdit.getEARArtifactEditForRead(earModule.getProject());
- contextRoot = edit.getWebContextRoot(deployProject);
- } finally {
- if (edit!=null)
- edit.dispose();
- }
- }
- return contextRoot;
- }
-
- /**
- * Find the source container, if any, for the given file.
- *
- * @param file
- * @return IPackageFragmentRoot sourceContainer for IFile
- */
- protected IPackageFragmentRoot getSourceContainer(IFile file) {
- if (file == null)
- return null;
- IPackageFragmentRoot[] srcContainers = getSourceContainers();
- for (int i=0; i<srcContainers.length; i++) {
- IPath srcPath = srcContainers[i].getPath();
- if (srcPath.isPrefixOf(file.getFullPath()))
- return srcContainers[i];
- }
- return null;
- }
-
- /**
- * Either returns value from cache or stores result as value in cache for the corresponding
- * output container for the given source container.
- *
- * @param sourceContainer
- * @return IContainer output container for given source container
- */
- protected IContainer getOutputContainer(IPackageFragmentRoot sourceContainer) {
- if (sourceContainer == null)
- return null;
-
- HashMap pairs = getCachedSourceOutputPairs();
- IContainer output = (IContainer) pairs.get(sourceContainer);
- if (output == null) {
- output = J2EEProjectUtilities.getOutputContainer(getProject(), sourceContainer);
- pairs.put(sourceContainer,output);
- }
- return output;
- }
-
- private IPackageFragmentRoot[] getSourceContainers() {
- if (cachedSourceContainers != null)
- return cachedSourceContainers;
- return J2EEProjectUtilities.getSourceContainers(getProject());
- }
-
- protected List getConsumableReferencedMembers(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 && isProjectOfType(consumedComponent.getProject(),IModuleConstants.JST_UTILITY_MODULE)) {
- if (consumedComponent != null && 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);
- List childConsumableMembers = getConsumableReferencedMembers(consumedComponent);
- if (!childConsumableMembers.isEmpty())
- members.addAll(childConsumableMembers);
- }
-
- IContainer[] javaCont = getJavaOutputFolders(consumedComponent.getProject());
- int size = javaCont.length;
- for (int j = 0; j < size; j++) {
- IModuleResource[] mr = getMembers(javaCont[j], reference.getRuntimePath(), reference.getRuntimePath(), javaCont);
- int size2 = mr.length;
- for (int k = 0; k < size2; k++) {
- if (!members.contains(mr[k]))
- members.add(mr[k]);
- }
- }
- }
- }
- }
- return consumableMembers;
- }
-
- protected IModule gatherModuleReference(IVirtualComponent component, IVirtualComponent targetComponent ) {
- IModule module = super.gatherModuleReference(component, targetComponent);
- // Handle binary module components
- if (targetComponent instanceof J2EEModuleVirtualArchiveComponent) {
- if (J2EEProjectUtilities.isEARProject(component.getProject()) || targetComponent.getProject()!=component.getProject())
- module = ServerUtil.getModule(J2EEDeployableFactory.ID+":"+targetComponent.getName()); //$NON-NLS-1$
- }
- return module;
- }
-
- /**
- * Determine if the component is nested J2EE module on the application.xml of this EAR
- * @param aComponent
- * @return boolean is passed in component a nested J2EE module on this EAR
- */
- private boolean isNestedJ2EEModule(IVirtualComponent aComponent, IVirtualReference[] references, EARArtifactEdit edit) {
- if (edit==null)
- return false;
- Application app = edit.getApplication();
- if (app == null) { // if no application.xml, return false
- return false;
- }
- IVirtualReference reference = getReferenceNamed(references,aComponent.getName());
- // Ensure module URI exists on EAR DD for binary archive
- return app.getFirstModule(reference.getArchiveName()) != null;
- }
-
- protected IVirtualReference getReferenceNamed(IVirtualReference[] references, String name) {
- for (int i=0; i<references.length; i++) {
- if (references[i].getReferencedComponent().getName().equals(name))
- return references[i];
- }
- return null;
- }
-
- protected ArtifactEdit getComponentArtifactEditForRead() {
- return EARArtifactEdit.getEARArtifactEditForRead(component.getProject());
- }
-
- /**
- * The references for J2EE module deployment are only those child modules of EARs or web modules
- */
- protected IVirtualReference[] getReferences(IVirtualComponent aComponent) {
- if (aComponent == null || aComponent.isBinary()) {
- return new IVirtualReference[] {};
- } else if (J2EEProjectUtilities.isDynamicWebProject(aComponent.getProject())) {
- return getWebLibModules((J2EEModuleVirtualComponent)aComponent);
- } else if (J2EEProjectUtilities.isEARProject(aComponent.getProject())) {
- return super.getReferences(aComponent);
- } else {
- return new IVirtualReference[] {};
- }
- }
-
- /**
- * This method will return the list of dependent modules which are utility jars in the web lib
- * folder of the deployed path of the module. It will not return null.
- *
- * @return array of the web library dependent modules
- */
- private IVirtualReference[] getWebLibModules(J2EEModuleVirtualComponent comp) {
- List result = new ArrayList();
- IVirtualReference[] refComponents = comp.getNonManifestReferences();
- // Check the deployed path to make sure it has a lib parent folder and matchs the web.xml
- // base path
- for (int i = 0; i < refComponents.length; i++) {
- if (refComponents[i].getRuntimePath().equals(WEBLIB))
- result.add(refComponents[i]);
- }
- return (IVirtualReference[]) result.toArray(new IVirtualReference[result.size()]);
- }
-
- /*
- * Add any classpath component dependencies from this component
- */
- private void addReferencedComponentClasspathDependencies(final IVirtualComponent component, final boolean web) {
- final IVirtualReference[] refs = component.getReferences();
- final Set absolutePaths = new HashSet();
- for (int i = 0; i < refs.length; i++) {
- final IVirtualReference reference = refs[i];
- final IPath runtimePath = reference.getRuntimePath();
- final IVirtualComponent referencedComponent = reference.getReferencedComponent();
-
- // if we are adding to a web project, only process references with the /WEB-INF/lib runtime path
- if (web && !runtimePath.equals(WEBLIB)) {
- continue;
- }
-
- // if the reference cannot export dependencies, skip
- if (!canExportClasspathComponentDependencies(referencedComponent)) {
- continue;
- }
-
- if (!referencedComponent.isBinary() && referencedComponent instanceof J2EEModuleVirtualComponent) {
- final IVirtualReference[] cpRefs = ((J2EEModuleVirtualComponent) referencedComponent).getJavaClasspathReferences();
- for (int j = 0; j < cpRefs.length; j++) {
- final IVirtualReference cpRef = cpRefs[j];
- IPath cpRefRuntimePath = cpRef.getRuntimePath();
-
- if (cpRef.getReferencedComponent() instanceof ClasspathDependencyVirtualComponent) {
- // want to avoid adding dups
- ClasspathDependencyVirtualComponent cpComp = (ClasspathDependencyVirtualComponent) cpRef.getReferencedComponent();
- // don't want to process class folder refs here
- if (cpComp.isClassFolder()) {
- continue;
- }
- if (cpRefRuntimePath.equals(IClasspathDependencyConstants.RUNTIME_MAPPING_INTO_CONTAINER_PATH)) {
- // runtime path within deployed app will be runtime path of parent component
- cpRefRuntimePath = runtimePath;
- }
- final IPath absolutePath = ClasspathDependencyUtil.getClasspathVirtualReferenceLocation(cpRef);
- if (absolutePaths.contains(absolutePath)) {
- // have already added a member for this archive
- continue;
- } else {
- addUtilMember(component, cpRef, cpRefRuntimePath);
- absolutePaths.add(absolutePath);
- }
- }
- }
- }
- }
- }
-
- private boolean canExportClasspathComponentDependencies(IVirtualComponent component) {
- final IProject project = component.getProject();
- // check for valid project type
- if (J2EEProjectUtilities.isEJBProject(project)
- || J2EEProjectUtilities.isDynamicWebProject(project)
- || J2EEProjectUtilities.isJCAProject(project)
- || J2EEProjectUtilities.isUtilityProject(project)) {
- return true;
- }
- return false;
- }
-
- private void saveClasspathDependencyURIs(IVirtualComponent component) {
- if (!component.isBinary() && component instanceof J2EEModuleVirtualComponent) {
- final IVirtualReference[] cpRefs = ((J2EEModuleVirtualComponent) component).getJavaClasspathReferences();
- for (int j = 0; j < cpRefs.length; j++) {
- final IVirtualReference cpRef = cpRefs[j];
- // if we are adding to an EAR project, only process references with the root mapping
- if (!cpRef.getRuntimePath().equals(IClasspathDependencyConstants.RUNTIME_MAPPING_INTO_CONTAINER_PATH)) {
- // fails the runtime path test
- continue;
- }
- if (cpRef.getReferencedComponent() instanceof VirtualArchiveComponent) {
- classpathComponentDependencyURIs.add(cpRef.getArchiveName());
- }
- }
- }
- }
-
- private void addClassFolderDependencies(final IVirtualComponent component) throws CoreException {
- if (!component.isBinary() && component instanceof J2EEModuleVirtualComponent) {
- final IVirtualReference[] cpRefs = ((J2EEModuleVirtualComponent) component).getJavaClasspathReferences();
- for (int i = 0; i < cpRefs.length; i++) {
- final IVirtualReference cpRef = cpRefs[i];
- final IPath runtimePath = cpRef.getRuntimePath();
- final IVirtualComponent comp = cpRef.getReferencedComponent();
- if (comp instanceof ClasspathDependencyVirtualComponent) {
- final ClasspathDependencyVirtualComponent cpComp = (ClasspathDependencyVirtualComponent) comp;
- if (cpComp.isClassFolder()) {
- IPath targetPath = null;
- if (runtimePath.equals(IClasspathDependencyConstants.RUNTIME_MAPPING_INTO_COMPONENT_PATH)) {
- targetPath = Path.EMPTY;
- } else if (runtimePath.equals(IClasspathDependencyConstants.WEB_INF_CLASSES_PATH)) {
- targetPath = WEB_CLASSES_PATH;
- } else {
- continue;
- }
- final IContainer container = cpComp.getClassFolder();
- final IModuleResource[] mr = getMembers(container, targetPath, targetPath, new IContainer[]{container});
- for (int j = 0; j < mr.length; j++) {
- members.add(mr[j]);
- }
- }
- }
- }
- }
- }
-
- /**
- * Returns <code>true</code> if this module has a simple structure based on a
- * single root folder, and <code>false</code> otherwise.
- * <p>
- * In a single root structure, all files that are contained within the root folder
- * are part of the module, and are already in the correct module structure. No
- * module resources exist outside of this single folder.
- *
- * For J2EE, this method will check if the project is already in J2EE spec standard output form.
- * The project must follow certain rules, but in general, the project's content roots must be source folders
- * and the output folder must also be the the content root folder.
- * </p>
- *
- * @return <code>true</code> if this module has a single root structure, and
- * <code>false</code> otherwise
- */
- public boolean isSingleRootStructure() {
- StructureEdit edit = null;
- try {
- edit = StructureEdit.getStructureEditForRead(getProject());
- if (edit == null || edit.getComponent() == null)
- return false;
- WorkbenchComponent wbComp = edit.getComponent();
- List resourceMaps = wbComp.getResources();
-
- if (J2EEProjectUtilities.isEARProject(getProject())) {
- // Always return false for EARs so that members for EAR are always calculated and j2ee modules
- // are filtered out
- return false;
- } else if (J2EEProjectUtilities.isDynamicWebProject(getProject())) {
- // Ensure there are only basic component resource mappings -- one for the content folder
- // and any for src folders mapped to WEB-INF/classes
- if (hasDefaultWebResourceMappings(resourceMaps)) {
- // Verify only one java output folder
- if (getJavaOutputFolders().length==1) {
- // Verify the java output folder is to <content root>/WEB-INF/classes
- IPath javaOutputPath = getJavaOutputFolders()[0].getProjectRelativePath();
- IPath compRootPath = component.getRootFolder().getUnderlyingFolder().getProjectRelativePath();
- if (compRootPath.append(J2EEConstants.WEB_INF_CLASSES).equals(javaOutputPath))
- return true;
- }
- }
- return false;
- } else if (J2EEProjectUtilities.isEJBProject(getProject()) || J2EEProjectUtilities.isJCAProject(getProject())
- || J2EEProjectUtilities.isApplicationClientProject(getProject()) || J2EEProjectUtilities.isUtilityProject(getProject())) {
- // Ensure there are only source folder component resource mappings to the root content folder
- if (isRootResourceMapping(resourceMaps,false)) {
- // Verify only one java outputfolder
- if (getJavaOutputFolders().length==1) {
- // At this point for utility projects, this project is optimized, we can just use the output folder
- if (J2EEProjectUtilities.isUtilityProject(getProject()))
- return true;
- // Verify the java output folder is the same as one of the content roots
- IPath javaOutputPath = getJavaOutputFolders()[0].getProjectRelativePath();
- IContainer[] rootFolders = component.getRootFolder().getUnderlyingFolders();
- for (int i=0; i<rootFolders.length; i++) {
- IPath compRootPath = rootFolders[i].getProjectRelativePath();
- if (javaOutputPath.equals(compRootPath))
- return true;
- }
- }
- }
- return false;
- }
- return true;
- } finally {
- if (edit !=null)
- edit.dispose();
- }
- }
-
- /**
- * Ensure that any component resource mappings are for source folders and
- * that they map to the root content folder
- *
- * @param resourceMaps
- * @return boolean
- */
- private boolean isRootResourceMapping(List resourceMaps, boolean isForEAR) {
- // If the list is empty, return false
- if (resourceMaps.size()<1)
- return false;
-
- for (int i=0; i<resourceMaps.size(); i++) {
- ComponentResource resourceMap = (ComponentResource) resourceMaps.get(i);
- // Verify it maps to "/" for the content root
- if (!resourceMap.getRuntimePath().equals(Path.ROOT))
- return false;
- // If this is not for an EAR, verify it is also a src container
- if (!isForEAR) {
- IPath sourcePath = getProject().getFullPath().append(resourceMap.getSourcePath());
- if (!isSourceContainer(sourcePath))
- return false;
- }
- }
- return true;
- }
-
- /**
- * Checks if the path argument is to a source container for the project.
- *
- * @param a workspace relative full path
- * @return is path a source container?
- */
- private boolean isSourceContainer(IPath path) {
- IPackageFragmentRoot[] srcContainers = getSourceContainers();
- for (int i=0; i<srcContainers.length; i++) {
- if (srcContainers[i].getPath().equals(path))
- return true;
- }
- return false;
- }
-
- /**
- * Ensure the default web setup is correct with one resource map and any number of java
- * resource maps to WEB-INF/classes
- *
- * @param resourceMaps
- * @return boolean
- */
- private boolean hasDefaultWebResourceMappings(List resourceMaps) {
- int rootValidMaps = 0;
- int javaValidRoots = 0;
-
- // If there aren't at least 2 maps, return false
- if (resourceMaps.size()<2)
- return false;
-
- IPath webInfClasses = new Path(J2EEConstants.WEB_INF_CLASSES).makeAbsolute();
- for (int i=0; i<resourceMaps.size(); i++) {
- ComponentResource resourceMap = (ComponentResource) resourceMaps.get(i);
- IPath sourcePath = getProject().getFullPath().append(resourceMap.getSourcePath());
-
- // Verify if the map is for the content root
- if (resourceMap.getRuntimePath().equals(Path.ROOT)) {
- rootValidMaps++;
- // Verify if the map is for a java src folder and is mapped to "WEB-INF/classes"
- } else if (resourceMap.getRuntimePath().equals(webInfClasses) && isSourceContainer(sourcePath)) {
- javaValidRoots++;
- // Otherwise we bail because we have a non optimized map
- } else {
- return false;
- }
- }
- // Make sure only one of the maps is the content root, and that at least one is for the java folder
- return rootValidMaps==1 && javaValidRoots>0;
- }
-
- /**
- * This method is added for performance reasons.
- * It assumes the virtual component is not using any flexible features and is in a standard J2EE format
- * with one component root folder and an output folder the same as its content folder. This will bypass
- * the virtual component API and just return the module resources as they are on disk.
- *
- * @return array of ModuleResources
- * @throws CoreException
- */
- private IModuleResource[] getOptimizedMembers() throws CoreException {
- if (component != null) {
- // For java utility modules, we can just use the output container, at this point we know there is only one
- if (J2EEProjectUtilities.isUtilityProject(getProject())) {
- return getModuleResources(Path.EMPTY, getJavaOutputFolders()[0]);
- }
- // For J2EE modules, we use the contents of the content root
- else {
- IVirtualFolder vFolder = component.getRootFolder();
- return getModuleResources(Path.EMPTY, vFolder.getUnderlyingFolder());
- }
- }
- return new IModuleResource[] {};
- }
-
- /**
- * This method will return from cache or add to cache whether or not an output container
- * is mapped in the virtual component.
- *
- * @param outputContainer
- * @return if output container is mapped
- */
- private boolean isOutputContainerMapped(IContainer outputContainer) {
- if (outputContainer == null)
- return false;
-
- HashMap outputMaps = getCachedOutputMappings();
- Boolean result = (Boolean) outputMaps.get(outputContainer);
- if (result == null) {
- // If there are any component resources for the container, we know it is mapped
- if (ComponentCore.createResources(outputContainer).length > 0)
- result = Boolean.TRUE;
- // Otherwise it is not mapped
- else
- result = Boolean.FALSE;
- // Cache the result in the map for this output container
- outputMaps.put(outputContainer, result);
- }
- return result.booleanValue();
- }
-
- /**
- * Lazy initialize the cached output mappings
- * @return HashMap
- */
- private HashMap getCachedOutputMappings() {
- if (cachedOutputMappings==null)
- cachedOutputMappings = new HashMap();
- return cachedOutputMappings;
- }
-
- /**
- * Lazy initialize the cached source - output pairings
- * @return HashMap
- */
- private HashMap getCachedSourceOutputPairs() {
- if (cachedSourceOutputPairs==null)
- cachedSourceOutputPairs = new HashMap();
- return cachedSourceOutputPairs;
- }
-
- /**
- * This file should be added to the members list from the virtual component maps only if:
- * a) it is not in a source folder
- * b) it is in a source folder, and the corresponding output folder is a mapped component resource
- *
- * @return boolean should file be added to members
- */
- protected boolean shouldAddComponentFile(IFile file) {
- IPackageFragmentRoot sourceContainer = getSourceContainer(file);
- // If the file is not in a source container, return true
- if (sourceContainer==null) {
- return true;
- // Else if it is a source container and the output container is mapped in the component, return true
- // Otherwise, return false.
- } else {
- IContainer outputContainer = getOutputContainer(sourceContainer);
- return outputContainer!=null && isOutputContainerMapped(outputContainer);
- }
- }
-}

Back to the top