[224185] Binary Java EE 5 IArchive support
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentArchiveLoadAdapter.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentArchiveLoadAdapter.java deleted file mode 100644 index d1b6938..0000000 --- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentArchiveLoadAdapter.java +++ /dev/null
@@ -1,127 +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.web.archive.operations; - -import java.io.File; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.IPath; -import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants; -import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException; -import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent; -import org.eclipse.jst.j2ee.internal.archive.ComponentArchiveLoadAdapter; -import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; -import org.eclipse.jst.j2ee.internal.project.ProjectSupportResourceHandler; -import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit; -import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent; -import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities; -import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; -import org.eclipse.wst.common.componentcore.resources.IVirtualReference; - -public class WebComponentArchiveLoadAdapter extends ComponentArchiveLoadAdapter { - - public WebComponentArchiveLoadAdapter(IVirtualComponent vComponent) { - super(vComponent); - } - - public WebComponentArchiveLoadAdapter(IVirtualComponent vComponent, boolean includeClasspathComponents) { - super(vComponent, includeClasspathComponents); - } - - public List getFiles() { - //super.getFiles(); - addLooseLibJARsToFiles(); - return filesHolder.getFiles(); - } - - public IVirtualReference[] getLibModules() { - WebArtifactEdit webArtifactEdit = null; - try { - webArtifactEdit = (WebArtifactEdit) ComponentUtilities.getArtifactEditForRead(getComponent()); - if (webArtifactEdit != null) - return webArtifactEdit.getLibModules(); - } finally { - if (webArtifactEdit != null) - webArtifactEdit.dispose(); - } - return null; - - } - - public void addLooseLibJARsToFiles() { - IVirtualReference[] libModules = getLibModules(); - for (int i = 0; i < libModules.length; i++) { - IVirtualReference iLibModule = libModules[i]; - IVirtualComponent looseComponent = iLibModule.getReferencedComponent(); - if (looseComponent.isBinary()) { - VirtualArchiveComponent archiveComp = (VirtualArchiveComponent) looseComponent; - java.io.File diskFile = archiveComp.getUnderlyingDiskFile(); - if (!diskFile.exists()) { - IFile wbFile = archiveComp.getUnderlyingWorkbenchFile(); - diskFile = new File(wbFile.getLocation().toOSString()); - } - String uri = iLibModule.getRuntimePath().makeRelative().toString() + "/" + diskFile.getName(); //$NON-NLS-1$ - // addExternalFile(uri, diskFile); - } else { - String name = null; - String archiveName = iLibModule.getArchiveName(); - if (archiveName != null && archiveName.length() > 0) { - name = archiveName; - } else { - name = looseComponent.getName() + ".jar"; //$NON-NLS-1$ - } - String prefix = iLibModule.getRuntimePath().makeRelative().toString(); - if (prefix.length() > 0 && prefix.charAt(prefix.length() - 1)!= '/') { - prefix += "/"; //$NON-NLS-1$ - } - - addClasspathComponentDependencies(looseComponent); - - String uri = prefix + name; - try { - Archive utilJAR = J2EEProjectUtilities.asArchive(uri, looseComponent.getProject(), isExportSource()); - if (utilJAR == null) - continue; - // filesHolder.addFile(utilJAR); - } catch (OpenFailureException oe) { - String message = ProjectSupportResourceHandler.getString(ProjectSupportResourceHandler.UNABLE_TO_LOAD_MODULE_ERROR_, new Object[]{uri, getComponent().getProject().getName(), oe.getConcatenatedMessages()}); //$NON-NLS-1$ - org.eclipse.jem.util.logger.proxy.Logger.getLogger().logTrace(message); - } - } - } - } - - private void addClasspathComponentDependencies(final IVirtualComponent referencedComponent) { - // retrieve all Java classpath component dependencies - if (includeClasspathComponents && referencedComponent instanceof J2EEModuleVirtualComponent) { - final IVirtualReference[] cpRefs = ((J2EEModuleVirtualComponent) referencedComponent).getJavaClasspathReferences(); - for (int j = 0; j < cpRefs.length; j++) { - final IVirtualReference ref = cpRefs[j]; - final IPath runtimePath = ref.getRuntimePath(); - - // only process ../ mappings - if (ref.getReferencedComponent() instanceof VirtualArchiveComponent - && runtimePath.equals(IClasspathDependencyConstants.RUNTIME_MAPPING_INTO_CONTAINER_PATH)) { - final VirtualArchiveComponent comp = (VirtualArchiveComponent) ref.getReferencedComponent(); - File cpEntryFile = comp.getUnderlyingDiskFile(); - if (!cpEntryFile.exists()) { - final IFile wbFile = comp.getUnderlyingWorkbenchFile(); - cpEntryFile = new File(wbFile.getLocation().toOSString()); - } - // addExternalFile("WEB-INF/lib/" + ref.getArchiveName(), cpEntryFile); - } - } - } - } - -}
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEArchiveUtilities.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEArchiveUtilities.java index 5dfebad..8520460 100644 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEArchiveUtilities.java +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEArchiveUtilities.java
@@ -23,6 +23,7 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; +import org.eclipse.emf.ecore.EObject; import org.eclipse.jdt.core.ToolFactory; import org.eclipse.jdt.core.util.IAnnotation; import org.eclipse.jdt.core.util.IClassFileAttribute; @@ -376,6 +377,28 @@ return simpleArchive; } + + public static IArchive findArchive(Object modelObject){ + if(modelObject instanceof EObject){ + EObject eObject = (EObject)modelObject; + return JavaEEEMFArchiveAdapterHelper.findArchive(eObject); + } + return null; + } + + public static IVirtualComponent findComponent(IArchive anArchive){ + IArchiveLoadAdapter loadAdapter = null; + if(anArchive.getArchiveOptions().hasOption(WRAPPED_LOAD_ADAPTER)){ + loadAdapter = (IArchiveLoadAdapter)anArchive.getArchiveOptions().getOption(WRAPPED_LOAD_ADAPTER); + } else { + loadAdapter = (IArchiveLoadAdapter)anArchive.getArchiveOptions().getOption(ArchiveOptions.LOAD_ADAPTER); + } + if(loadAdapter instanceof JavaEEBinaryComponentLoadAdapter){ + return ((JavaEEBinaryComponentLoadAdapter)loadAdapter).getArchiveComponent(); + } + return null; + } + public static class JavaEEWrappingLoadAdapter implements IArchiveLoadAdapter {
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEEMFArchiveAdapterHelper.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEEMFArchiveAdapterHelper.java index c97c58c..3ae1139 100644 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEEMFArchiveAdapterHelper.java +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/JavaEEEMFArchiveAdapterHelper.java
@@ -21,8 +21,11 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.content.IContentDescription; +import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.impl.AdapterImpl; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.ContentHandler; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; @@ -40,8 +43,24 @@ public class JavaEEEMFArchiveAdapterHelper { - // TODO may not need this + public static IArchive findArchive(EObject eObject){ + EList <Adapter> adapters = eObject.eResource().getResourceSet().eAdapters(); + for(Adapter adapter:adapters){ + if(adapter instanceof EMFAddapter){ + return ((EMFAddapter) adapter).getHelper().getArchive(); + } + } + return null; + } + private class EMFAddapter extends AdapterImpl { + private JavaEEEMFArchiveAdapterHelper helper; + public EMFAddapter(JavaEEEMFArchiveAdapterHelper helper){ + this.helper = helper; + } + public JavaEEEMFArchiveAdapterHelper getHelper() { + return this.helper; + } }; protected ResourceSet resourceSet; @@ -118,7 +137,7 @@ if (resourceSet == null) { initializeResourceSet(); if (null == adapter) { - adapter = new EMFAddapter(); + adapter = new EMFAddapter(this); } resourceSet.eAdapters().add(adapter); } @@ -134,7 +153,7 @@ // add as adapter to new resource set if necessary if (newResourceSet != null && !newResourceSet.eAdapters().contains(adapter)) { if (adapter == null) { - adapter = new EMFAddapter(); + adapter = new EMFAddapter(this); } newResourceSet.eAdapters().add(adapter); }
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentLoadAdapter.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentLoadAdapter.java index 438cbf3..2841dcc 100644 --- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentLoadAdapter.java +++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentLoadAdapter.java
@@ -15,14 +15,21 @@ import org.eclipse.jst.jee.archive.IArchiveResource; import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent; +/** + * @author jsholl + * + */ public class JavaEEBinaryComponentLoadAdapter extends JavaEEEMFZipFileLoadAdapterImpl { private java.io.File file = null; private IPath archivePath; private boolean physicallyOpen = true; + private VirtualArchiveComponent archiveComponent; + public JavaEEBinaryComponentLoadAdapter(VirtualArchiveComponent archiveComponent) throws ArchiveOpenFailureException { super(); + this.archiveComponent = archiveComponent; java.io.File diskFile = null; diskFile = archiveComponent.getUnderlyingDiskFile(); if (!diskFile.exists()) { @@ -115,6 +122,7 @@ } } - - -} + public VirtualArchiveComponent getArchiveComponent() { + return archiveComponent; + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java index 1e1a44e..0675ace 100644 --- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java +++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java
@@ -31,12 +31,14 @@ import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil; import org.eclipse.jst.j2ee.internal.actions.AbstractOpenAction; import org.eclipse.jst.j2ee.internal.actions.ComponentEditorInput; +import org.eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities; import org.eclipse.jst.j2ee.internal.componentcore.ComponentArchiveOptions; import org.eclipse.jst.j2ee.internal.ejb.provider.J2EEJavaClassProviderHelper; import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages; import org.eclipse.jst.j2ee.webservice.wsdd.BeanLink; import org.eclipse.jst.javaee.core.JavaEEObject; import org.eclipse.jst.javaee.ejb.SessionBean; +import org.eclipse.jst.jee.archive.IArchive; import org.eclipse.jst.jee.ui.internal.navigator.appclient.GroupAppClientProvider; import org.eclipse.jst.jee.ui.internal.navigator.ear.GroupEARProvider; import org.eclipse.jst.jee.ui.internal.navigator.ejb.BeanInterfaceNode; @@ -205,6 +207,14 @@ .getComponent(); openAppropriateEditor(component); } + } else { + IArchive archive = JavaEEArchiveUtilities.findArchive(ro); + if(archive != null){ + IVirtualComponent component = JavaEEArchiveUtilities.findComponent(archive); + if(component != null){ + openAppropriateEditor(component); + } + } } } } else if (srcObject instanceof BeanInterfaceNode) {