[187914] EE5 Module import support
diff --git a/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveFactoryImpl.java b/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveFactoryImpl.java index e8820cc..03bb10d 100644 --- a/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveFactoryImpl.java +++ b/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveFactoryImpl.java
@@ -55,12 +55,11 @@ ((ArchiveImpl) archive).close(); // TODO add tracing support } - + public void saveArchive(IArchive archive, IPath outputPath, IProgressMonitor monitor) throws ArchiveSaveFailureException { final int SAVE_TICKS = 198; - final int CLOSE_TICKS = 2; final int CLEANUP_TICKS = 1; - final int TOTAL_TICKS = SAVE_TICKS + CLOSE_TICKS + CLEANUP_TICKS; + final int TOTAL_TICKS = SAVE_TICKS + CLEANUP_TICKS; try { monitor.beginTask("Saving archive to: " + outputPath.toOSString(), TOTAL_TICKS); String aUri = outputPath.toOSString(); @@ -75,8 +74,6 @@ save(aSaveAdapter, new SubProgressMonitor(monitor, SAVE_TICKS)); aSaveAdapter.close(); - closeArchive(archive); - monitor.worked(CLOSE_TICKS); if (fileExisted) { ArchiveUtil.cleanupAfterTempSave(aUri, aFile, destinationFile); } @@ -134,7 +131,6 @@ save(aSaveAdapter, new SubProgressMonitor(monitor, SAVE_TICKS)); aSaveAdapter.close(); - closeArchive(archive); monitor.worked(CLOSE_TICKS); } catch (ArchiveSaveFailureException failure) { try {
diff --git a/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveImpl.java b/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveImpl.java index fd4c2cb..834c62b 100644 --- a/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveImpl.java +++ b/plugins/org.eclipse.jst.j2ee.core/archive/org/eclipse/jst/jee/archive/internal/ArchiveImpl.java
@@ -269,6 +269,7 @@ nestedArchiveOptions.setOption(ArchiveOptions.LOAD_ADAPTER, nestedLoadAdapter); IArchive nestedArchive = IArchiveFactory.INSTANCE.openArchive(nestedArchiveOptions); nestedArchive.setPath(cachedArchiveResource.getPath()); + nestedArchive.setArchive(this); // replace the IArchiveResource with the nested IArchive and reset // the index archiveFileIndex.index.put(nestedArchive.getPath(), nestedArchive);
diff --git a/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportDataModelProvider.java b/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportDataModelProvider.java index fea9af0..6bca36c 100644 --- a/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportDataModelProvider.java +++ b/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportDataModelProvider.java
@@ -59,9 +59,9 @@ public boolean propertySet(String propertyName, Object propertyValue) { boolean set = super.propertySet(propertyName, propertyValue); - if (propertyName.equals(FILE)) { + if (propertyName.equals(ARCHIVE_WRAPPER)) { IDataModel moduleDM = model.getNestedModel(NESTED_MODEL_J2EE_COMPONENT_CREATION); - if (getModuleFile() != null) { + if (getArchiveWrapper() != null) { FacetDataModelMap map = (FacetDataModelMap) moduleDM.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP); IDataModel jcaFacetDataModel = map.getFacetDataModel( J2EEProjectUtilities.JCA );
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportDataModelProvider.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportDataModelProvider.java index 1bf14b9..f5c9219 100644 --- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportDataModelProvider.java +++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportDataModelProvider.java
@@ -20,8 +20,9 @@ import org.eclipse.jst.j2ee.application.internal.operations.J2EEUtilityJarImportDataModelProvider; import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory; -import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile; import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException; +import org.eclipse.jst.j2ee.internal.J2EEConstants; +import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper; import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil; import org.eclipse.jst.j2ee.internal.common.XMLResource; import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; @@ -65,7 +66,7 @@ } protected IStatus validateModuleType() { - if (getArchiveFile() instanceof WARFile) + if (getArchiveWrapper().getJavaEEQuickPeek().getType() == J2EEConstants.WEB_TYPE) return OK_STATUS; // TODO: STRING MOVE @@ -74,10 +75,10 @@ public boolean propertySet(String propertyName, Object propertyValue) { super.propertySet(propertyName, propertyValue); - if (propertyName.equals(FILE)) { + if (propertyName.equals(ARCHIVE_WRAPPER)) { IDataModel moduleDM = model.getNestedModel(NESTED_MODEL_J2EE_COMPONENT_CREATION); - if (getModuleFile() != null) { + if (getArchiveWrapper() != null) { FacetDataModelMap map = (FacetDataModelMap) moduleDM.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP); IDataModel webFacetDataModel = map.getFacetDataModel( J2EEProjectUtilities.DYNAMIC_WEB ); @@ -88,14 +89,13 @@ model.notifyPropertyChange(PROJECT_NAME, IDataModel.VALID_VALUES_CHG); } - Archive archive = (Archive) propertyValue; - if (null != archive) { - WARFile war = (WARFile) archive; - List libs = war.getLibArchives(); + ArchiveWrapper archiveWrapper = (ArchiveWrapper) propertyValue; + if (null != archiveWrapper) { + List <ArchiveWrapper> libs = archiveWrapper.getWebLibs(); List nestedModels = new ArrayList(); for (int i = 0; i < libs.size(); i++) { IDataModel localModel = DataModelFactory.createDataModel(new J2EEUtilityJarImportDataModelProvider()); - localModel.setProperty(FILE, libs.get(i)); + localModel.setProperty(ARCHIVE_WRAPPER, libs.get(i)); localModel.setProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME, getProperty(IFacetProjectCreationDataModelProperties.FACET_RUNTIME)); nestedModels.add(localModel); }
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportOperation.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportOperation.java index 3a0ca4f..be57eed 100644 --- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportOperation.java +++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentImportOperation.java
@@ -22,9 +22,9 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jem.util.logger.proxy.Logger; -import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy; import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties; +import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper; import org.eclipse.jst.j2ee.internal.archive.ComponentArchiveSaveAdapter; import org.eclipse.jst.j2ee.internal.archive.WebComponentArchiveSaveAdapter; import org.eclipse.jst.j2ee.internal.archive.operations.J2EEArtifactImportOperation; @@ -53,13 +53,12 @@ List selectedLibs = (List) model.getProperty(IWebComponentImportDataModelProperties.WEB_LIB_ARCHIVES_SELECTED); List libProjects = (List) model.getProperty(IWebComponentImportDataModelProperties.WEB_LIB_MODELS); IDataModel importModel = null; -// IVirtualComponent nestedComponent = null; - Archive libArchive = null; + ArchiveWrapper libArchive = null; for (int i = 0; null != libProjects && i < libProjects.size(); i++) { importModel = (IDataModel) libProjects.get(i); - libArchive = (Archive) importModel.getProperty(IJ2EEComponentImportDataModelProperties.FILE); + libArchive = (ArchiveWrapper) importModel.getProperty(IJ2EEComponentImportDataModelProperties.ARCHIVE_WRAPPER); if (selectedLibs.contains(libArchive)) { - baseWork += LINK_COMPONENTS_WORK + PROJECT_CREATION_WORK + libArchive.getFiles().size(); + baseWork += LINK_COMPONENTS_WORK + PROJECT_CREATION_WORK + libArchive.getSize(); } } @@ -92,17 +91,17 @@ List libProjects = (List) model.getProperty(IWebComponentImportDataModelProperties.WEB_LIB_MODELS); IDataModel importModel = null; IVirtualComponent nestedComponent = null; - Archive libArchive = null; + ArchiveWrapper libArchive = null; List targetComponents = new ArrayList(); Map compToURIMap = new HashMap(); for (int i = 0; null != libProjects && i < libProjects.size(); i++) { importModel = (IDataModel) libProjects.get(i); - libArchive = (Archive) importModel.getProperty(IJ2EEComponentImportDataModelProperties.FILE); + libArchive = (ArchiveWrapper) importModel.getProperty(IJ2EEComponentImportDataModelProperties.ARCHIVE_WRAPPER); if (selectedLibs.contains(libArchive)) { - importModel.getDefaultOperation().execute(new SubProgressMonitor(monitor, PROJECT_CREATION_WORK + libArchive.getFiles().size()) , info); + importModel.getDefaultOperation().execute(new SubProgressMonitor(monitor, PROJECT_CREATION_WORK + libArchive.getSize()) , info); nestedComponent = (IVirtualComponent) importModel.getProperty(IJ2EEComponentImportDataModelProperties.COMPONENT); targetComponents.add(nestedComponent); - String archiveURI = libArchive.getURI(); + String archiveURI = libArchive.getPath().toOSString(); int lastIndex = archiveURI.lastIndexOf('/'); if (-1 != lastIndex && lastIndex + 1 < archiveURI.length()) { lastIndex++;
diff --git a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/internal/creation/AppClientComponentImportDataModelProvider.java b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/internal/creation/AppClientComponentImportDataModelProvider.java index 988a067..dc3b7b4 100644 --- a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/internal/creation/AppClientComponentImportDataModelProvider.java +++ b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/internal/creation/AppClientComponentImportDataModelProvider.java
@@ -56,9 +56,9 @@ public boolean propertySet(String propertyName, Object propertyValue) { boolean set = super.propertySet(propertyName, propertyValue); - if (propertyName.equals(FILE)) { + if (propertyName.equals(ARCHIVE_WRAPPER)) { IDataModel moduleDM = model.getNestedModel(NESTED_MODEL_J2EE_COMPONENT_CREATION); - if (getModuleFile() != null) { + if (getArchiveWrapper() != null) { FacetDataModelMap map = (FacetDataModelMap) moduleDM.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP); IDataModel appClientFacetDataModel = map.getFacetDataModel( J2EEProjectUtilities.APPLICATION_CLIENT );
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentImportDataModelProperties.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentImportDataModelProperties.java index 7977678..2a680fa 100644 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentImportDataModelProperties.java +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentImportDataModelProperties.java
@@ -41,6 +41,7 @@ /** * Optional, type Archive, used when a file is available as an object rather than a url (i.e. * using the FILE_NAME property will not work). + * @deprecated use {@link #ARCHIVE_WRAPPER} */ public static final String FILE = "IJ2EEArtifactImportDataModelProperties.FILE"; //$NON-NLS-1$ /** @@ -52,6 +53,13 @@ * Unsettable property used to retreive the component after the operation has executed. */ public static final String COMPONENT = "IJ2EEComponentImportDataModelProperties.COMPONENT"; //$NON-NLS-1$ + + /** + * Unsettable property used for archive switch. + */ + public static final String ARCHIVE_WRAPPER = "IJ2EEComponentImportDataModelProperties.ARCHIVE_WRAPPER"; //$NON-NLS-1$ + + /** * Optional, type IOverwriteHandler. Defines a IOverwriteHandler for the component in the * workspace if an existing component should be overwritten (OVERWRITE_COMPONENT). @@ -60,6 +68,7 @@ /** * Optional, type SaveFilter, default is null + * @deprecated */ public static final String SAVE_FILTER = "IJ2EEArtifactImportDataModelProperties.SAVE_FILTER"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ArchiveWrapper.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ArchiveWrapper.java new file mode 100644 index 0000000..baa9f28 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ArchiveWrapper.java
@@ -0,0 +1,176 @@ +/******************************************************************************* + * Copyright (c) 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.archive; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.jem.util.logger.proxy.Logger; +import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; +import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleFile; +import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile; +import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil; +import org.eclipse.jst.j2ee.internal.J2EEConstants; +import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; +import org.eclipse.jst.jee.archive.ArchiveOpenFailureException; +import org.eclipse.jst.jee.archive.IArchive; +import org.eclipse.jst.jee.archive.IArchiveResource; +import org.eclipse.jst.jee.util.internal.JavaEEQuickPeek; + +public class ArchiveWrapper { + + private Archive commonArchive = null; + private IArchive archive = null; + private JavaEEQuickPeek jqp = null; + + public ArchiveWrapper(IArchive archive) { + + this.archive = archive; + JavaEEArchiveUtilities jea = JavaEEArchiveUtilities.INSTANCE; + jqp = jea.getJavaEEQuickPeek(archive); + + } + + public ArchiveWrapper(Archive mFile) { + + this.commonArchive = mFile; + int type = J2EEConstants.UNKNOWN; + + if (mFile.isApplicationClientFile()) { + type = J2EEConstants.APPLICATION_CLIENT_TYPE; + } else if (mFile.isEARFile()) { + type = J2EEConstants.APPLICATION_TYPE; + } else if (mFile.isEJBJarFile()) { + type = J2EEConstants.EJB_TYPE; + } else if (mFile.isWARFile()) { + type = J2EEConstants.WEB_TYPE; + } else if (mFile.isRARFile()) { + type = J2EEConstants.CONNECTOR_TYPE; + } + if (type != J2EEConstants.UNKNOWN) { + int version = ArchiveUtil.getFastSpecVersion((ModuleFile) mFile); + jqp = new JavaEEQuickPeek(type, version); + } + + } + + public JavaEEQuickPeek getJavaEEQuickPeek() { + return jqp; + } + + public Archive getCommonArchive() { + return (Archive) commonArchive; + } + + public IArchive getIArchive() { + return archive; + } + + public void close() { + try { + if (commonArchive != null) { + commonArchive.close(); + } + if (archive != null) { + JavaEEArchiveUtilities.INSTANCE.closeArchive(archive); + } + } catch (RuntimeException e) { + fail(); + } + + } + + public IPath getPath() { + if (commonArchive != null) { + IPath path = new Path(commonArchive.getURI()); + return path; + } + if (archive != null) { + return archive.getPath(); + } + fail(); + return null; + } + + private void fail() { + throw new RuntimeException("ArchiveWrapper is inconsistent."); + } + + public int getSize() { + if (commonArchive != null) + return commonArchive.getFiles().size(); + else + return archive.getArchiveResources().size(); + } + + private List <ArchiveWrapper> webLibs; + + public List <ArchiveWrapper> getWebLibs() { + if(webLibs != null){ + return webLibs; + } + if (jqp.getType() != J2EEVersionConstants.WEB_TYPE) { + fail(); + } + if (commonArchive != null) { + WARFile war = (WARFile) commonArchive; + List wrappedLibs = new ArrayList(); + List libs = war.getLibArchives(); + for(int i=0;i<libs.size(); i++){ + wrappedLibs.add(new ArchiveWrapper((Archive)libs.get(i))); + } + webLibs = wrappedLibs; + return wrappedLibs; + } + if (archive != null) { + webLibs = new ArrayList<ArchiveWrapper>(); + List<IArchiveResource> resources = archive.getArchiveResources(); + for (IArchiveResource resource : resources) { + if (resource.getType() != IArchiveResource.DIRECTORY_TYPE) { + IPath path = resource.getPath(); + if (path.segmentCount() > 2) { + if (path.segment(0).equals("WEB-INF") && path.segment(1).equals("lib")) { + String lastSegment = path.lastSegment(); + if (lastSegment.endsWith("jar") || lastSegment.endsWith("zip")) { + IArchive webLib; + try { + webLib = archive.getNestedArchive(resource); + webLibs.add(new ArchiveWrapper(webLib)); + } catch (ArchiveOpenFailureException e) { + Logger.getLogger().logError(e); + } + + } + } + } + } + } + + return webLibs; + } + fail(); + return null; + } + + public String getName() { + if (commonArchive != null) { + return commonArchive.getName(); + } + if (archive != null) { + return archive.getPath().lastSegment(); + } + fail(); + return null; + } + +}
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ComponentArchiveSaveAdapter.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ComponentArchiveSaveAdapter.java index 2370bde..c68ff90 100644 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ComponentArchiveSaveAdapter.java +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ComponentArchiveSaveAdapter.java
@@ -123,11 +123,11 @@ public void save(IArchiveResource aFile) throws ArchiveSaveFailureException { try { - InputStream in = aFile.getInputStream(); if (progressMonitor == null) progressMonitor = new NullProgressMonitor(); progressMonitor.subTask(aFile.getPath().toString()); - + InputStream in = aFile.getInputStream(); + IPath projectRelativePath = getProjectRelativePath(aFile); if (aFile.getType() == IArchiveResource.ARCHIVE_TYPE) { saveAsArchiveComponent((IArchive) aFile, projectRelativePath, in); @@ -142,7 +142,9 @@ String errorString = EJBArchiveOpsResourceHandler.ARCHIVE_OPERATION_SaveFile + aFile.getPath(); throw new ArchiveSaveFailureException(errorString); } finally { - progressMonitor.worked(1); + if(null != progressMonitor){ + progressMonitor.worked(1); + } } }
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 013928c..5820495 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
@@ -242,6 +242,7 @@ archiveToJavaEEQuickPeek.put(newArchive, quickPeek); return newArchive; } finally { + //TODO streamline this so the underlying zip file is only openend once. closeArchive(simpleArchive); } } else {
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentSaveStrategyImpl.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentSaveStrategyImpl.java index 65a0675..76f5f29 100644 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentSaveStrategyImpl.java +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentSaveStrategyImpl.java
@@ -10,36 +10,21 @@ *******************************************************************************/ package org.eclipse.jst.j2ee.internal.archive.operations; -import java.io.FileNotFoundException; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jdt.core.IClasspathEntry; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jem.workbench.utility.JemProjectUtilities; import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile; import org.eclipse.jst.j2ee.commonarchivecore.internal.File; import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.SaveFailureException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil; import org.eclipse.jst.j2ee.datamodel.properties.IEARComponentImportDataModelProperties; -import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; public class EARComponentSaveStrategyImpl extends ComponentSaveStrategyImpl { - protected Map createdComponentsMap; +// protected Map createdComponentsMap; public EARComponentSaveStrategyImpl(IVirtualComponent component) { super(component); @@ -53,43 +38,43 @@ if (null != overwriteHandler) { overwriteHandler.setEarSaveStrategy(this); } - buildProjectsMap(); +// buildProjectsMap(); } - /** - * Creates a Map mapping archive uris to projects for all archives in the ear that imported as - * projects. - */ - private void buildProjectsMap() { - createdComponentsMap = new HashMap(); - List createdProjectsList = (List) dataModel.getProperty(IEARComponentImportDataModelProperties.ALL_PROJECT_MODELS_LIST); - IDataModel importDM = null; - Archive anArchive = null; - for (int i = 0; i < createdProjectsList.size(); i++) { - importDM = (IDataModel) createdProjectsList.get(i); - anArchive = (Archive) importDM.getProperty(IJ2EEComponentImportDataModelProperties.FILE); - createdComponentsMap.put(anArchive.getURI(), importDM.getProperty(IJ2EEComponentImportDataModelProperties.COMPONENT)); - } - } +// /** +// * Creates a Map mapping archive uris to projects for all archives in the ear that imported as +// * projects. +// */ +// private void buildProjectsMap() { +// createdComponentsMap = new HashMap(); +// List createdProjectsList = (List) dataModel.getProperty(IEARComponentImportDataModelProperties.ALL_PROJECT_MODELS_LIST); +// IDataModel importDM = null; +// Archive anArchive = null; +// for (int i = 0; i < createdProjectsList.size(); i++) { +// importDM = (IDataModel) createdProjectsList.get(i); +// anArchive = (Archive) importDM.getProperty(IJ2EEComponentImportDataModelProperties.FILE); +// createdComponentsMap.put(anArchive.getURI(), importDM.getProperty(IJ2EEComponentImportDataModelProperties.COMPONENT)); +// } +// } - protected void addFileToClasspath(IProject p, IFile file, List cp) { - if (!file.exists()) - return; +// protected void addFileToClasspath(IProject p, IFile file, List cp) { +// if (!file.exists()) +// return; +// +// // Assume the file also contains the source +// IPath path = file.getFullPath(); +// IClasspathEntry entry = JavaCore.newLibraryEntry(path, path, null, true); +// if (!cp.contains(entry)) +// cp.add(entry); +// } - // Assume the file also contains the source - IPath path = file.getFullPath(); - IClasspathEntry entry = JavaCore.newLibraryEntry(path, path, null, true); - if (!cp.contains(entry)) - cp.add(entry); - } - - protected void addProjectToClasspath(IProject dependent, IProject prereq, List cp) { - IClasspathEntry entry = JavaCore.newProjectEntry(prereq.getFullPath(), true); - if (!cp.contains(entry)) - cp.add(entry); - } +// protected void addProjectToClasspath(IProject dependent, IProject prereq, List cp) { +// IClasspathEntry entry = JavaCore.newProjectEntry(prereq.getFullPath(), true); +// if (!cp.contains(entry)) +// cp.add(entry); +// } protected EARFile getEARFile() { return (EARFile) getArchive(); @@ -106,7 +91,7 @@ saveManifest(); saveMofResources(); progressMonitor.subTask(EARArchiveOpsResourceHandler.Updating_project_classpath_UI_); - updateComponentClasspaths(); + //updateComponentClasspaths(); } @@ -161,75 +146,75 @@ } - /* - * Parse the manifest of the module file; for each cp entry 1) cananonicalize to a uri that - * looks like the entry in the ear 2) If the ear contains a file with that uri (the entry is - * valid) a) If the file is another was blown out to a project, add a cp entry for a referenced - * project b) otherwise, add a cp entry that points to the file in the ear project, and cp - * entries for all prereqs - */ - protected void updateProjectClasspath(Archive anArchive, IVirtualComponent component) { +// /* +// * Parse the manifest of the module file; for each cp entry 1) cananonicalize to a uri that +// * looks like the entry in the ear 2) If the ear contains a file with that uri (the entry is +// * valid) a) If the file is another was blown out to a project, add a cp entry for a referenced +// * project b) otherwise, add a cp entry that points to the file in the ear project, and cp +// * entries for all prereqs +// */ +// protected void updateProjectClasspath(Archive anArchive, IVirtualComponent component) { +// +// String message = EARArchiveOpsResourceHandler.Updating_project_classpath_UI_ + component.getName(); +// progressMonitor.subTask(message); +// List projectCpEntries = new ArrayList(); +// Set visited = new HashSet(); +// traverseClasspaths(component.getProject(), anArchive, projectCpEntries, visited); +// +// try { +// if (!projectCpEntries.isEmpty()) +// JemProjectUtilities.appendJavaClassPath(component.getProject(), projectCpEntries); +// JemProjectUtilities.forceClasspathReload(component.getProject()); +// } catch (JavaModelException ex) { +// org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(ex); +// } +// +// } - String message = EARArchiveOpsResourceHandler.Updating_project_classpath_UI_ + component.getName(); - progressMonitor.subTask(message); - List projectCpEntries = new ArrayList(); - Set visited = new HashSet(); - traverseClasspaths(component.getProject(), anArchive, projectCpEntries, visited); +// /* +// * If you have a dependency to a JAR in the EAR project, and the JAR depends on another JAR in +// * the EAR; you want to compile cleanly after import, so you need both those JARs on your build +// * path +// */ +// protected void traverseClasspaths(IProject p, Archive anArchive, List projectCpEntries, Set visitedArchives) { +// visitedArchives.add(anArchive); +// String[] manifestCpEntries = anArchive.getManifest().getClassPathTokenized(); +// EARFile earFile = (EARFile) dataModel.getProperty(IJ2EEComponentImportDataModelProperties.FILE); +// for (int i = 0; i < manifestCpEntries.length; i++) { +// String uri = ArchiveUtil.deriveEARRelativeURI(manifestCpEntries[i], anArchive); +// // ensure the entry is valid or skip to the next +// if (uri == null) +// continue; +// File aFile = null; +// try { +// aFile = earFile.getFile(uri); +// } catch (FileNotFoundException notThere) { +// } +// if (aFile == null || !aFile.isArchive() || visitedArchives.contains(aFile)) +// continue; +// Archive depArchive = (Archive) aFile; +// IProject prereq = null; +// IVirtualComponent depComponent = (IVirtualComponent) createdComponentsMap.get(uri); +// if (depComponent != null) +// prereq = depComponent.getProject(); +// +// if (prereq != null) { +// addProjectToClasspath(p, prereq, projectCpEntries); +// } else { +// addFileToClasspath(p, vComponent.getRootFolder().getFile(uri).getUnderlyingFile(), projectCpEntries); +// traverseClasspaths(p, depArchive, projectCpEntries, visitedArchives); +// } +// } +// } - try { - if (!projectCpEntries.isEmpty()) - JemProjectUtilities.appendJavaClassPath(component.getProject(), projectCpEntries); - JemProjectUtilities.forceClasspathReload(component.getProject()); - } catch (JavaModelException ex) { - org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(ex); - } - - } - - /* - * If you have a dependency to a JAR in the EAR project, and the JAR depends on another JAR in - * the EAR; you want to compile cleanly after import, so you need both those JARs on your build - * path - */ - protected void traverseClasspaths(IProject p, Archive anArchive, List projectCpEntries, Set visitedArchives) { - visitedArchives.add(anArchive); - String[] manifestCpEntries = anArchive.getManifest().getClassPathTokenized(); - EARFile earFile = (EARFile) dataModel.getProperty(IJ2EEComponentImportDataModelProperties.FILE); - for (int i = 0; i < manifestCpEntries.length; i++) { - String uri = ArchiveUtil.deriveEARRelativeURI(manifestCpEntries[i], anArchive); - // ensure the entry is valid or skip to the next - if (uri == null) - continue; - File aFile = null; - try { - aFile = earFile.getFile(uri); - } catch (FileNotFoundException notThere) { - } - if (aFile == null || !aFile.isArchive() || visitedArchives.contains(aFile)) - continue; - Archive depArchive = (Archive) aFile; - IProject prereq = null; - IVirtualComponent depComponent = (IVirtualComponent) createdComponentsMap.get(uri); - if (depComponent != null) - prereq = depComponent.getProject(); - - if (prereq != null) { - addProjectToClasspath(p, prereq, projectCpEntries); - } else { - addFileToClasspath(p, vComponent.getRootFolder().getFile(uri).getUnderlyingFile(), projectCpEntries); - traverseClasspaths(p, depArchive, projectCpEntries, visitedArchives); - } - } - } - - protected void updateComponentClasspaths() { - List jarFiles = getEARFile().getArchiveFiles(); - for (int i = 0; i < jarFiles.size(); i++) { - Archive anArchive = (Archive) jarFiles.get(i); - IVirtualComponent component = (IVirtualComponent) createdComponentsMap.get(anArchive.getURI()); - if (component != null) - updateProjectClasspath(anArchive, component); - } - } +// protected void updateComponentClasspaths() { +// List jarFiles = getEARFile().getArchiveFiles(); +// for (int i = 0; i < jarFiles.size(); i++) { +// Archive anArchive = (Archive) jarFiles.get(i); +// IVirtualComponent component = (IVirtualComponent) createdComponentsMap.get(anArchive.getURI()); +// if (component != null) +// updateProjectClasspath(anArchive, component); +// } +// } }
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java index 02989eb..d5b8c72 100644 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java
@@ -22,8 +22,13 @@ import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy; import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties; +import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper; +import org.eclipse.jst.j2ee.internal.archive.ComponentArchiveSaveAdapter; import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathUpdater; import org.eclipse.jst.j2ee.internal.project.ProjectSupportResourceHandler; +import org.eclipse.jst.jee.archive.ArchiveOptions; +import org.eclipse.jst.jee.archive.IArchive; +import org.eclipse.jst.jee.archive.IArchiveFactory; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; @@ -33,10 +38,16 @@ public abstract class J2EEArtifactImportOperation extends AbstractDataModelOperation { + /** + * @deprecated use {@link #archiveWrapper} + */ protected Archive moduleFile; + protected ArchiveWrapper archiveWrapper; protected IVirtualComponent virtualComponent; protected IAdaptable info; protected final int PROJECT_CREATION_WORK = 30; + + private static IArchiveFactory archiveFactory = IArchiveFactory.INSTANCE; public J2EEArtifactImportOperation(IDataModel model) { super(model); @@ -47,7 +58,8 @@ J2EEComponentClasspathUpdater.getInstance().pauseUpdates(); this.info = anInfo; moduleFile = (Archive) model.getProperty(IJ2EEComponentImportDataModelProperties.FILE); - monitor.beginTask(ProjectSupportResourceHandler.getString(ProjectSupportResourceHandler.Importing_archive, new Object [] { moduleFile.getURI() }), computeTotalWork()); + archiveWrapper = (ArchiveWrapper)model.getProperty(IJ2EEComponentImportDataModelProperties.ARCHIVE_WRAPPER); + monitor.beginTask(ProjectSupportResourceHandler.getString(ProjectSupportResourceHandler.Importing_archive, new Object [] { archiveWrapper.getPath() }), computeTotalWork()); doExecute(monitor); return OK_STATUS; } finally { @@ -64,7 +76,7 @@ } protected int computeTotalWork() { - return PROJECT_CREATION_WORK + moduleFile.getFiles().size(); + return PROJECT_CREATION_WORK + archiveWrapper.getSize(); } /** @@ -76,7 +88,7 @@ virtualComponent = createVirtualComponent(model.getNestedModel(IJ2EEComponentImportDataModelProperties.NESTED_MODEL_J2EE_COMPONENT_CREATION), new SubProgressMonitor(monitor, PROJECT_CREATION_WORK)); try { - importModuleFile(new SubProgressMonitor(monitor, moduleFile.getFiles().size())); + importModuleFile(new SubProgressMonitor(monitor, archiveWrapper.getSize())); } catch (InvocationTargetException e) { throw new ExecutionException(e.getMessage(), e); } catch (InterruptedException e) { @@ -103,6 +115,10 @@ protected void modifyStrategy(SaveStrategy saveStrat) { } + + protected ComponentArchiveSaveAdapter getArchiveSaveAdapter(IVirtualComponent virtualComponent){ + return null; + } /** * perform the archive import operation @@ -112,13 +128,22 @@ */ protected void importModuleFile(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { - monitor.beginTask(null, moduleFile.getFiles().size()); - ComponentSaveStrategyImpl aStrategy = (ComponentSaveStrategyImpl) createSaveStrategy(virtualComponent); - aStrategy.setProgressMonitor(monitor); - aStrategy.setOverwriteHandler((IOverwriteHandler) model.getProperty(IJ2EEComponentImportDataModelProperties.OVERWRITE_HANDLER)); - aStrategy.setDataModel(model); - modifyStrategy(aStrategy); - moduleFile.save(aStrategy); + monitor.beginTask(null, archiveWrapper.getSize()); + if(archiveWrapper.getIArchive() != null){ + IArchive archive = archiveWrapper.getIArchive(); + ComponentArchiveSaveAdapter adap = getArchiveSaveAdapter(virtualComponent); + ArchiveOptions saveOptions = new ArchiveOptions(); + saveOptions.setOption(ArchiveOptions.SAVE_ADAPTER, adap); + archiveFactory.saveArchive(archive, saveOptions,monitor); + }else{ + ComponentSaveStrategyImpl aStrategy = (ComponentSaveStrategyImpl) createSaveStrategy(virtualComponent); + aStrategy.setProgressMonitor(monitor); + aStrategy.setOverwriteHandler((IOverwriteHandler) model.getProperty(IJ2EEComponentImportDataModelProperties.OVERWRITE_HANDLER)); + aStrategy.setDataModel(model); + modifyStrategy(aStrategy); + archiveWrapper.getCommonArchive().save(aStrategy); + } + } catch (OverwriteHandlerException oe) { throw new InterruptedException(); } catch (Exception ex) {
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactImportDataModelProvider.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactImportDataModelProvider.java index 6761fea..13a2871 100644 --- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactImportDataModelProvider.java +++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactImportDataModelProvider.java
@@ -19,6 +19,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.jem.util.emf.workbench.ProjectUtilities; @@ -29,7 +30,13 @@ import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.SaveFilter; import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil; import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties; +import org.eclipse.jst.j2ee.internal.J2EEConstants; +import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper; +import org.eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities; import org.eclipse.jst.j2ee.internal.project.J2EECreationResourceHandler; +import org.eclipse.jst.jee.archive.ArchiveOpenFailureException; +import org.eclipse.jst.jee.archive.IArchive; +import org.eclipse.jst.jee.util.internal.JavaEEQuickPeek; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.datamodel.FacetProjectCreationDataModelProvider; import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties; @@ -54,7 +61,7 @@ public static final String FACET_RUNTIME = "IJ2EEArtifactImportDataModelProperties.FACET_RUNTIME"; //$NON-NLS-1$ private IDataModel componentCreationDM; - private OpenFailureException cachedOpenFailureException = null; + private Throwable archiveOpenFailure = null; public Set getPropertyNames() { Set propertyNames = super.getPropertyNames(); @@ -67,6 +74,7 @@ propertyNames.add(PROJECT_NAME); propertyNames.add(COMPONENT); propertyNames.add( FACET_RUNTIME ); + propertyNames.add(ARCHIVE_WRAPPER); return propertyNames; } @@ -94,20 +102,34 @@ private boolean settingFileName = false; public boolean propertySet(String propertyName, Object propertyValue) { - if (propertyName.equals(FILE)) { - if (!settingFileName) { - setProperty(FILE_NAME, null); + if (propertyName.equals(ARCHIVE_WRAPPER)) { + if(propertyValue != null){ + if (!settingFileName) { + setProperty(FILE_NAME, null); + } + updateDefaultComponentName(); } - updateDefaultComponentName(); return true; - } else if (propertyName.equals(SAVE_FILTER) && getArchiveFile() != null) { - getArchiveFile().setSaveFilter(getSaveFilter()); + } else if(propertyName.equals(FILE)){ + if(propertyValue != null){ + if(!settingFileName) { + ArchiveWrapper archiveWrapper = getArchiveWrapper(); + if(null == archiveWrapper || archiveWrapper.getCommonArchive() != propertyValue){ + archiveWrapper = new ArchiveWrapper((Archive)propertyValue); + setProperty(ARCHIVE_WRAPPER, archiveWrapper); + } + } + } + } else if (propertyName.equals(SAVE_FILTER) && getArchiveWrapper() != null && getArchiveWrapper().getCommonArchive() != null) { + getArchiveWrapper().getCommonArchive().setSaveFilter(getSaveFilter()); } else if (FILE_NAME.equals(propertyName)) { try { - cachedOpenFailureException = null; + archiveOpenFailure = null; handleArchiveSetup((String) propertyValue); } catch (OpenFailureException oe) { - cachedOpenFailureException = oe; + archiveOpenFailure = oe; + } catch (ArchiveOpenFailureException e) { + archiveOpenFailure = e; } } else if( COMPONENT.equals(propertyName)){ throw new RuntimeException(propertyName + " should not be set."); //$NON-NLS-1$ @@ -131,11 +153,11 @@ private boolean doingComponentUpdate; private void updateDefaultComponentName() { - Archive archive = getArchiveFile(); - if (null != archive && getBooleanProperty(USE_DEFAULT_PROJECT_NAME)) { + ArchiveWrapper wrapper = getArchiveWrapper(); + if (null != wrapper && getBooleanProperty(USE_DEFAULT_PROJECT_NAME)) { try { doingComponentUpdate = true; - Path path = new Path(archive.getURI()); + IPath path = wrapper.getPath(); String defaultProjectName = path.segment(path.segmentCount() - 1); if (defaultProjectName.indexOf('.') > 0) { defaultProjectName = defaultProjectName.substring(0, defaultProjectName.lastIndexOf('.')); @@ -148,45 +170,73 @@ } } - private boolean handleArchiveSetup(String fileName) throws OpenFailureException { + private boolean handleArchiveSetup(String fileName) throws OpenFailureException, ArchiveOpenFailureException { try { settingFileName = true; - Archive archive = getArchiveFile(); - if (archive != null) { - archive.close(); + ArchiveWrapper wrapper = getArchiveWrapper(); + if (wrapper!= null) { + wrapper.close(); setProperty(FILE, null); + setProperty(ARCHIVE_WRAPPER, null); } String uri = getStringProperty(FILE_NAME); if (!archiveExistsOnFile()) return false; - archive = openArchive(uri); - if (null != archive) { - archive.setSaveFilter(getSaveFilter()); + wrapper = openArchiveWrapper(uri); + if(wrapper != null){ + setProperty(ARCHIVE_WRAPPER, wrapper); + if(wrapper.getCommonArchive() != null){ + setProperty(FILE, wrapper.getCommonArchive()); + } } - setProperty(FILE, archive); - return archive != null; + return wrapper!= null; } finally { settingFileName = false; } } + protected ArchiveWrapper openArchiveWrapper(String uri) throws OpenFailureException, ArchiveOpenFailureException{ + IArchive archive = null; + boolean isEE5 = false; + try{ + IPath path = new Path(uri); + archive = JavaEEArchiveUtilities.INSTANCE.openArchive(path); + archive.setPath(path); + JavaEEQuickPeek jqp = JavaEEArchiveUtilities.INSTANCE.getJavaEEQuickPeek(archive); + if(jqp.getJavaEEVersion() == J2EEConstants.JEE_5_0_ID){ + isEE5 = true; + return new ArchiveWrapper(archive); + } else { + Archive commonArchive = openArchive(uri); + if (null != commonArchive) { + commonArchive.setSaveFilter(getSaveFilter()); + } + return new ArchiveWrapper(commonArchive); + } + } finally { + if(!isEE5){ + JavaEEArchiveUtilities.INSTANCE.closeArchive(archive); + } + } + } + protected abstract Archive openArchive(String uri) throws OpenFailureException; - private boolean closeModuleFile() { - if (null != getArchiveFile()) { - getArchiveFile().close(); + private boolean closeArchive() { + if (null != getArchiveWrapper()) { + getArchiveWrapper().close(); } return true; } public IStatus validate(String propertyName) { - if (FILE_NAME.equals(propertyName) && !isPropertySet(FILE)) { + if (FILE_NAME.equals(propertyName) && !isPropertySet(ARCHIVE_WRAPPER)) { String fileName = getStringProperty(propertyName); if (fileName == null || fileName.length() == 0) { return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.ARCHIVE_FILE_NAME_EMPTY_ERROR, new Object[]{ArchiveUtil.getModuleFileTypeName(getType())})); - } else if (cachedOpenFailureException != null) { - return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(cachedOpenFailureException.getMessage())); + } else if (archiveOpenFailure != null) { + return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(archiveOpenFailure.getMessage())); } else if (fileName != null && !archiveExistsOnFile()) { return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.FILE_DOES_NOT_EXIST_ERROR, new Object[]{ArchiveUtil.getModuleFileTypeName(getType())})); } @@ -224,14 +274,22 @@ public void dispose() { if (getBooleanProperty(CLOSE_ARCHIVE_ON_DISPOSE)) - closeModuleFile(); + closeArchive(); super.dispose(); } protected final void setArchiveFile(Archive archiveFile) { setProperty(FILE, archiveFile); } - + + protected final ArchiveWrapper getArchiveWrapper(){ + return (ArchiveWrapper)getProperty(ARCHIVE_WRAPPER); + } + + /** + * @deprecated + * @return use ARCHIVE_WRAPPER + */ protected final Archive getArchiveFile() { return (Archive) getProperty(FILE); } @@ -265,7 +323,7 @@ * @return */ protected IStatus validateVersionSupportedByServer(){ - if( model.isPropertySet(FILE) && model.isPropertySet(IFacetProjectCreationDataModelProperties.FACET_RUNTIME)){ + if( model.isPropertySet(ARCHIVE_WRAPPER) && model.isPropertySet(IFacetProjectCreationDataModelProperties.FACET_RUNTIME)){ IDataModel projectModel = model.getNestedModel(NESTED_MODEL_J2EE_COMPONENT_CREATION); FacetDataModelMap map = (FacetDataModelMap) projectModel.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP); Collection projectFacets = (Collection)getProperty(FacetProjectCreationDataModelProvider.REQUIRED_FACETS_COLLECTION);
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEComponentImportDataModelProvider.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEComponentImportDataModelProvider.java index 2a96de9..48859e4 100644 --- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEComponentImportDataModelProvider.java +++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEComponentImportDataModelProvider.java
@@ -13,8 +13,8 @@ import java.util.Set; import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleFile; -import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil; import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEModuleImportDataModelProperties; +import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper; /** * This dataModel is a common super class used to import J2EE Modules. @@ -34,25 +34,13 @@ } protected int getModuleSpecVersion() { - if (!isPropertySet(EXTENDED_IMPORT_FACTORY)) { - return ArchiveUtil.getFastSpecVersion(getModuleFile()); - } - ExtendedImportFactory factory = (ExtendedImportFactory) getProperty(EXTENDED_IMPORT_FACTORY); - return factory.getSpecVersion(getModuleFile()); + ArchiveWrapper wrapper = getArchiveWrapper(); + return wrapper.getJavaEEQuickPeek().getVersion(); } -// public boolean propertySet(String propertyName, Object propertyValue) { -// boolean set = super.propertySet(propertyName, propertyValue); -// if (propertyName.equals(FILE)) { -// IDataModel moduleDM = model.getNestedModel(NESTED_MODEL_J2EE_COMPONENT_CREATION); -// if (getModuleFile() != null) { -// moduleDM.setIntProperty(IJ2EEComponentCreationDataModelProperties.COMPONENT_VERSION, getModuleSpecVersion()); -// model.notifyPropertyChange(PROJECT_NAME, IDataModel.VALID_VALUES_CHG); -// } -// } -// return set; -// } - + /** + * @deprecated use #IARCHIVE_WRAPPER + */ protected ModuleFile getModuleFile() { return (ModuleFile) getArchiveFile(); }
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEUtilityJarImportOperationNew.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEUtilityJarImportOperationNew.java index b384b3c..c4c4357 100644 --- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEUtilityJarImportOperationNew.java +++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEUtilityJarImportOperationNew.java
@@ -11,6 +11,8 @@ package org.eclipse.jst.j2ee.application.internal.operations; import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy; +import org.eclipse.jst.j2ee.internal.archive.ComponentArchiveSaveAdapter; +import org.eclipse.jst.j2ee.internal.archive.J2EEJavaComponentArchiveSaveAdapter; import org.eclipse.jst.j2ee.internal.archive.operations.J2EEArtifactImportOperation; import org.eclipse.jst.j2ee.internal.archive.operations.J2EEJavaComponentSaveStrategyImpl; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; @@ -28,6 +30,10 @@ super(dataModel); } + protected ComponentArchiveSaveAdapter getArchiveSaveAdapter(IVirtualComponent virtualComponent){ + return new J2EEJavaComponentArchiveSaveAdapter(virtualComponent); + } + protected SaveStrategy createSaveStrategy(IVirtualComponent virtualComponent) { J2EEJavaComponentSaveStrategyImpl saveStrat = new J2EEJavaComponentSaveStrategyImpl(virtualComponent); return saveStrat;
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AvailableWebLibProvider.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AvailableWebLibProvider.java index 31c24fb..d23afb7 100644 --- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AvailableWebLibProvider.java +++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AvailableWebLibProvider.java
@@ -17,8 +17,7 @@ import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jst.j2ee.commonarchivecore.internal.File; -import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile; +import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper; import org.eclipse.jst.j2ee.internal.wizard.AvailableJarsProvider; import org.eclipse.swt.graphics.Image; @@ -28,8 +27,8 @@ } public Object[] getElements(Object inputElement) { - if (inputElement instanceof WARFile) { - Object[] array = ((WARFile) inputElement).getLibArchives().toArray(); + if (inputElement instanceof ArchiveWrapper) { + Object[] array = ((ArchiveWrapper) inputElement).getWebLibs().toArray(); Arrays.sort(array, new Comparator() { public int compare(Object o1, Object o2) { return getColumnText(o1, 0).compareTo(getColumnText(o2, 0)); @@ -46,8 +45,8 @@ } public String getColumnText(Object element, int columnIndex) { - File file = (File) element; - return file.getName(); + ArchiveWrapper wrapper = (ArchiveWrapper)element; + return wrapper.getName(); } public void dispose() {
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WebComponentImportWebLibsPage.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WebComponentImportWebLibsPage.java index bdd2472..7546b04 100644 --- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WebComponentImportWebLibsPage.java +++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WebComponentImportWebLibsPage.java
@@ -20,8 +20,8 @@ import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile; import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties; +import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper; import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin; import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPluginIcons; import org.eclipse.jst.j2ee.internal.wizard.J2EEImportPage; @@ -48,7 +48,7 @@ public class WebComponentImportWebLibsPage extends J2EEImportPage { private Button deselectAllButton; private Button selectAllButton; - protected WARFile warFile; + protected ArchiveWrapper archiveWrapper; public CheckboxTableViewer availableJARsViewer; public boolean utilJarSelectionChanged = false; @@ -170,7 +170,7 @@ private void refreshEARFileIfNecessary() { if (isEARFileChanged()) { - warFile = (WARFile) model.getProperty(IJ2EEComponentImportDataModelProperties.FILE); + archiveWrapper = (ArchiveWrapper) model.getProperty(IJ2EEComponentImportDataModelProperties.ARCHIVE_WRAPPER); refresh(); } } @@ -184,11 +184,11 @@ } private void refresh() { - availableJARsViewer.setInput(warFile); + availableJARsViewer.setInput(archiveWrapper); } public boolean isEARFileChanged() { - return warFile != model.getProperty(IJ2EEComponentImportDataModelProperties.FILE); + return archiveWrapper != model.getProperty(IJ2EEComponentImportDataModelProperties.ARCHIVE_WRAPPER); } protected void enter() {