[159314] Mishandling Utility jars
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/ImportJ2EEModuleDropAssistant.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/ImportJ2EEModuleDropAssistant.java index ea85dc0..a07688e 100644 --- a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/ImportJ2EEModuleDropAssistant.java +++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/ImportJ2EEModuleDropAssistant.java
@@ -19,7 +19,6 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; @@ -27,7 +26,6 @@ import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jst.j2ee.application.internal.operations.EARComponentImportDataModelProvider; -import org.eclipse.jst.j2ee.application.internal.operations.J2EEUtilityJarImportDataModelProvider; import org.eclipse.jst.j2ee.applicationclient.internal.creation.AppClientComponentImportDataModelProvider; import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory; @@ -37,29 +35,31 @@ import org.eclipse.jst.j2ee.internal.navigator.ui.Messages; import org.eclipse.jst.j2ee.internal.web.archive.operations.WebComponentImportDataModelProvider; import org.eclipse.jst.j2ee.navigator.internal.plugin.J2EENavigatorPlugin; -import org.eclipse.jst.j2ee.project.facet.EARFacetUtils; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.TransferData; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.CopyFilesAndFoldersOperation; import org.eclipse.ui.navigator.CommonDropAdapter; import org.eclipse.ui.progress.IProgressService; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; -import org.eclipse.wst.common.project.facet.core.IFacetedProject; -import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; public class ImportJ2EEModuleDropAssistant extends AddProjectToEARDropAssistant { public boolean isSupportedType(TransferData aTransferType) { return FileTransfer.getInstance().isSupportedType(aTransferType); } - + public IStatus handleDrop(CommonDropAdapter aDropAdapter, final DropTargetEvent aDropTargetEvent, final Object aTarget) { + if(FileTransfer.getInstance().isSupportedType(aDropAdapter.getCurrentTransfer())) { + final Shell shell = getShell(); + IProgressService service = PlatformUI.getWorkbench().getProgressService(); Job importArtifactsJob = new Job(Messages.ImportJ2EEModuleDropAssistant_Importing_Java_Enterprise_Edition_artifacts) { protected IStatus run(IProgressMonitor monitor) { @@ -78,10 +78,14 @@ SubProgressMonitor submonitor = new SubProgressMonitor(monitor, 10); IDataModel importDataModel = null; + boolean performSimpleJarCopy = false; + List simpleJarsToCopyList = null; IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); List createdComponents = new ArrayList(); for(int i=0; i<names.length && !monitor.isCanceled(); i++) { try { + importDataModel = null; + performSimpleJarCopy = false; int separatorIndex = names[i].lastIndexOf(File.separatorChar); int dotIndex = names[i].lastIndexOf('.'); if(separatorIndex > 0 && separatorIndex+1 < dotIndex) { @@ -104,8 +108,14 @@ importDataModel = DataModelFactory.createDataModel(new AppClientComponentImportDataModelProvider()); else if(archive.isEJBJarFile()) importDataModel = DataModelFactory.createDataModel(new EJBComponentImportDataModelProvider()); - else - importDataModel = DataModelFactory.createDataModel(new J2EEUtilityJarImportDataModelProvider()); + else { + performSimpleJarCopy = true; //handle Utility jars as regular jars. + if(simpleJarsToCopyList == null){ + simpleJarsToCopyList = new ArrayList(); + simpleJarsToCopyList.add(names[i]); + } + } + } finally { if(archive != null) archive.close(); @@ -119,7 +129,7 @@ createdComponents.add((IVirtualComponent) importDataModel.getProperty(IJ2EEComponentImportDataModelProperties.COMPONENT)); - } else { + } else if(!performSimpleJarCopy){ status.add(J2EENavigatorPlugin.createErrorStatus(0, NLS.bind(Messages.ImportJ2EEModuleDropAssistant_Could_not_recognize_extension_0_, extension), null)); } @@ -129,6 +139,7 @@ status.add(J2EENavigatorPlugin.createErrorStatus(0, msg, e)); } } + if(targetEARProject != null) { List createdModuleProjects = new ArrayList(); for(int i=0; i<createdComponents.size(); i++) { @@ -149,23 +160,34 @@ String msg = e.getMessage() != null ? e.getMessage() : e.toString(); status.add(J2EENavigatorPlugin.createErrorStatus(0, msg, null)); } - + //copy the simpleJarsOver + if(simpleJarsToCopyList != null ){ + try{ + final String [] jarsToCopyArray = new String[simpleJarsToCopyList.size()]; + simpleJarsToCopyList.toArray(jarsToCopyArray); + + CopyFilesAndFoldersOperation operation = new CopyFilesAndFoldersOperation(shell); + operation.copyFilesInCurrentThread(jarsToCopyArray, targetEARProject, monitor); + }catch (Throwable e) { + String msg = e.getMessage() != null ? e.getMessage() : e.toString(); + status.add(J2EENavigatorPlugin.createErrorStatus(0, msg, e)); + } + } } + return status; } }; + service.showInDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), importArtifactsJob); importArtifactsJob.setRule(ResourcesPlugin.getWorkspace().getRoot()); importArtifactsJob.schedule(); - - return Status.OK_STATUS; } return Status.CANCEL_STATUS; } - public IStatus validateDrop(Object target, int operation, TransferData transferType) { IStatus status = Status.CANCEL_STATUS;