blob: 2ea2ac4433068f696d0b5dbecb4b88aedd19332b [file] [log] [blame]
/***********************************************************************
* Copyright (c) 2008 by SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
***********************************************************************/
package org.eclipse.jst.jee.ui.internal.navigator.dnd;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
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.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jst.j2ee.application.internal.operations.AddComponentToEnterpriseApplicationDataModelProvider;
import org.eclipse.jst.j2ee.application.internal.operations.IAddComponentToEnterpriseApplicationDataModelProperties;
import org.eclipse.jst.j2ee.application.internal.operations.RemoveComponentFromEnterpriseApplicationDataModelProvider;
import org.eclipse.jst.j2ee.application.internal.operations.UpdateManifestDataModelProperties;
import org.eclipse.jst.j2ee.application.internal.operations.UpdateManifestDataModelProvider;
import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifest;
import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualArchiveComponent;
import org.eclipse.jst.j2ee.internal.J2EEConstants;
import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
import org.eclipse.jst.j2ee.internal.dialogs.DependencyConflictResolveDialog;
import org.eclipse.jst.j2ee.internal.plugin.IJ2EEModuleConstants;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.jst.j2ee.internal.provider.J2EEItemProvider;
import org.eclipse.jst.j2ee.model.IModelProvider;
import org.eclipse.jst.j2ee.model.ModelProviderManager;
import org.eclipse.jst.j2ee.navigator.internal.plugin.J2EENavigatorPlugin;
import org.eclipse.jst.j2ee.project.facet.EARFacetUtils;
import org.eclipse.jst.javaee.application.Application;
import org.eclipse.jst.jee.ui.internal.Messages;
import org.eclipse.jst.jee.ui.internal.navigator.ear.AbstractEarNode;
import org.eclipse.jst.jee.ui.internal.navigator.ear.BundledNode;
import org.eclipse.jst.jee.ui.internal.navigator.ear.GroupEARProvider;
import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.CommonDropAdapter;
import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
import org.eclipse.ui.part.PluginTransfer;
import org.eclipse.ui.progress.IProgressService;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
import org.eclipse.wst.common.componentcore.internal.operation.RemoveReferenceComponentsDataModelProvider;
import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
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.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
/**
* Handles drop of JEE resources on EAR project thus adding them as modules.
*
* @author Dimitar Giormov
*
*/
public class AddProjectToEARDropAssistant extends CommonDropAdapterAssistant {
private static final Class IPROJECT_CLASS = IProject.class;
private IVirtualComponent earComponent = null;
private IProject earProject = null;
private String libDir = null;
private boolean resolveConflicts = false;
public AddProjectToEARDropAssistant() {
super();
}
public boolean isSupportedType(TransferData aTransferType) {
return LocalSelectionTransfer.getTransfer().isSupportedType(aTransferType);
}
public IStatus handleDrop(CommonDropAdapter aDropAdapter, DropTargetEvent aDropTargetEvent, final Object aTarget) {
if (LocalSelectionTransfer.getTransfer().isSupportedType(aDropAdapter.getCurrentTransfer())) {
final IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection();
IProgressService service = PlatformUI.getWorkbench().getProgressService();
resolveConflicts = false;
for (Iterator selectionIterator = selection.iterator(); selectionIterator.hasNext();) {
Object sourceObject = selectionIterator.next();
if (sourceObject instanceof IVirtualReference) {
IVirtualReference reference = (IVirtualReference) sourceObject;
/*
* If a reference is moved from the root to the lib
* directory check for conflicts with projects referenced by
* the ear referencing the same lib
*/
if (libDir.length() > 0 && !libDir.equals(reference.getRuntimePath().toString())) {
if (hasConflictingProjectInMetaInf(reference)) {
DependencyConflictResolveDialog dlg = new DependencyConflictResolveDialog(getShell(), DependencyConflictResolveDialog.DLG_TYPE_2);
if (dlg.open() == DependencyConflictResolveDialog.BTN_ID_CANCEL) {
return Status.CANCEL_STATUS;
} else {
resolveConflicts = true;
}
}
}
} else {
if (libDir.length() > 0){
IProject projectToAdd = getProject(sourceObject);
if (hasConflictingProjectInMetaInf(projectToAdd)) {
DependencyConflictResolveDialog dlg = new DependencyConflictResolveDialog(getShell(), DependencyConflictResolveDialog.DLG_TYPE_2);
if (dlg.open() == DependencyConflictResolveDialog.BTN_ID_CANCEL) {
return Status.CANCEL_STATUS;
} else {
resolveConflicts = true;
}
}
}
}
}
Job addProjectToEarJob = new Job(getJobTitle(earComponent)) {
protected IStatus run(IProgressMonitor monitor) {
IStatus status = null;
List<IVirtualComponent> componentsToAdd = new ArrayList<IVirtualComponent>();
List<IVirtualComponent> componentsToRemove = new ArrayList<IVirtualComponent>();
for (Iterator selectionIterator = selection.iterator(); selectionIterator.hasNext();) {
Object sourceObject = selectionIterator.next();
if (sourceObject instanceof JarPackageFragmentRoot) {
JarPackageFragmentRoot jarPackageFragment = (JarPackageFragmentRoot) sourceObject;
String type = VirtualArchiveComponent.LIBARCHIVETYPE + IPath.SEPARATOR;
IVirtualComponent archive = ComponentCore.createArchiveComponent(earComponent.getProject(), type + jarPackageFragment.getPath().toString());
componentsToAdd.add(archive);
} else if (sourceObject instanceof IVirtualReference) {
IVirtualReference reference = (IVirtualReference) sourceObject;
if (resolveConflicts) {
status = resolveConflicts(reference.getReferencedComponent());
if (!status.isOK()) {
return status;
}
}
IVirtualComponent archive = reference.getReferencedComponent();
componentsToRemove.add(archive);
status = removeComponentsFromEar(componentsToRemove, reference.getRuntimePath().toString());
if (!status.isOK())
return status;
componentsToAdd.add(archive);
} else {
IProject projectToAdd = getProject(sourceObject);
if (resolveConflicts) {
status = resolveConflicts(ComponentCore.createComponent(projectToAdd));
if (!status.isOK()) {
return status;
}
}
componentsToAdd.add(ComponentCore.createComponent(projectToAdd));
}
}
if (!componentsToAdd.isEmpty()) {
status = addComponentsToEar(componentsToAdd, libDir);
if (!status.isOK())
return status;
}
return status;
}
};
service.showInDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), addProjectToEarJob);
addProjectToEarJob.setRule(ResourcesPlugin.getWorkspace().getRoot());
addProjectToEarJob.schedule();
}
return Status.OK_STATUS;
}
public IStatus validateDrop(Object target, int operation, TransferData transferType) {
libDir = ""; //$NON-NLS-1$
if (LocalSelectionTransfer.getTransfer().isSupportedType(transferType) || PluginTransfer.getInstance().isSupportedType(transferType)) {
ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
if (selection != null && !selection.isEmpty() && (selection instanceof IStructuredSelection)) {
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
earProject = getProject(target);
if (earProject == null) {
return Status.CANCEL_STATUS;
}
earComponent = ComponentCore.createComponent(earProject);
int earVersion = getEarVersion(earProject);
if (target instanceof BundledNode && ((BundledNode) target).getBundledLibsDirectoryNode() == null) {
libDir = ((Application) ModelProviderManager.getModelProvider(earProject).getModelObject()).getLibraryDirectory();
if (libDir == null) {
libDir = J2EEConstants.EAR_DEFAULT_LIB_DIR;
}
}
IStatus status = null;
for (Iterator iterator = structuredSelection.iterator(); iterator.hasNext();) {
Object next = iterator.next();
if (next instanceof IVirtualReference) {
return Status.OK_STATUS;
}
/*
* Check if we try to add a JarPackageFragment that is
* already referenced
*/
if (next instanceof JarPackageFragmentRoot) {
JarPackageFragmentRoot jar = (JarPackageFragmentRoot) next;
for (IVirtualReference reference : earComponent.getReferences()) {
if (reference.getArchiveName().equals(jar.getElementName())) {
return Status.CANCEL_STATUS;
}
}
return Status.OK_STATUS;
}
/*
* Check if we try to add a module that is already
* referenced by the ear but at the same time allow to
* change its location from the root to the lib directory
* and the opposite.
*/
IProject projectToAdd = getProject(next);
hasConflictingProjectInMetaInf(ComponentCore.createComponent(projectToAdd));
try {
for (IProject referencedProject : earProject.getReferencedProjects()) {
if (referencedProject == projectToAdd) {
return Status.CANCEL_STATUS;
}
}
} catch (CoreException e) {
String msg = e.getMessage() != null ? e.getMessage() : e.toString();
status = J2EENavigatorPlugin.createErrorStatus(0, msg, e);
}
if ((status = validateProjectMayBeAdded(earProject, projectToAdd, earVersion)).isOK())
return status;
}
}
}
return Status.CANCEL_STATUS;
}
/**
* @param target
*/
private IStatus validateProjectMayBeAdded(IProject earProject, IProject projectToAdd, int earVersion) {
if (earProject == null || projectToAdd == null || earVersion < 0)
return J2EENavigatorPlugin.createErrorStatus(0, Messages.AddProjectToEARDropAssistant_Could_not_add_module_to_Enterprise_, null);
else if (!earProject.isAccessible()) {
return J2EENavigatorPlugin.createErrorStatus(0, NLS.bind(Messages.AddProjectToEARDropAssistant_The_project_0_cannot_be_accesse_, earProject.getName()), null);
} else if (!projectToAdd.isAccessible()) {
return J2EENavigatorPlugin.createErrorStatus(0, Messages.AddProjectToEARDropAssistant_The_dragged_project_cannot_be_added_, null);
}
IStatus isValid = validateProjectToAdd(projectToAdd, earVersion);
if (!isValid.isOK()) {
return isValid;
}
return Status.OK_STATUS;
}
/**
*
* @return -1 on error
*/
protected final int getEarVersion(IProject earProject) {
int earVersion = -1;
IModelProvider modelProvider = ModelProviderManager.getModelProvider(earProject);
IFacetedProject facetedProject = null;
try {
facetedProject = ProjectFacetsManager.create(earProject);
if (facetedProject != null) {
double double1 = Double.parseDouble(facetedProject.getProjectFacetVersion(EARFacetUtils.EAR_FACET).getVersionString());
earVersion = (int) (double1 * 10);
} else {
JEEUIPlugin.getDefault().logError("Could not acquire model elements for project \"" + earProject.getName() + "\".", null); //$NON-NLS-1$ //$NON-NLS-2$
}
} catch (CoreException e1) {
String msg = e1.getMessage() != null ? e1.getMessage() : e1.toString();
JEEUIPlugin.getDefault().logError(msg, e1);
}
return earVersion;
}
/**
* @param facetedProject
* @return
*/
protected final boolean hasEarFacet(IProject project) {
IFacetedProject facetedProject = null;
try {
facetedProject = ProjectFacetsManager.create(project);
} catch (CoreException e1) {
String msg = e1.getMessage() != null ? e1.getMessage() : e1.toString();
JEEUIPlugin.getDefault().logError(msg, e1);
}
return facetedProject != null && facetedProject.hasProjectFacet(EARFacetUtils.EAR_FACET);
}
protected final String calculateValidProjectName(final String originalName) {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
String validName = originalName;
int count = 1;
while (root.getProject(validName).exists()) {
validName = originalName + count++;
}
return validName;
}
protected String getJobTitle(IVirtualComponent earComponent) {
return NLS.bind(Messages.AddModuleToEarDropAssistant_Adding_module_to_ea_, earComponent.getName());
}
protected IStatus validateProjectToAdd(IProject projectToAdd, int earVersion) {
IStatus status = null;
try {
// check if the project to add is not an EAR itself
IFacetedProject facetedProject = ProjectFacetsManager.create(projectToAdd);
if (facetedProject == null) {
facetedProject = ProjectFacetsManager.create(projectToAdd, true, new NullProgressMonitor());
IProjectFacetVersion javafacetversion = ProjectFacetsManager.getProjectFacet(IModuleConstants.JST_JAVA).getDefaultVersion();
facetedProject.installProjectFacet(javafacetversion, null, null);
IProjectFacetVersion utilityfacetversion = ProjectFacetsManager.getProjectFacet(IModuleConstants.JST_UTILITY_MODULE).getDefaultVersion();
facetedProject.installProjectFacet(utilityfacetversion, null, null);
}
if (facetedProject.hasProjectFacet(EARFacetUtils.EAR_FACET))
status = Status.CANCEL_STATUS;
else
status = Status.OK_STATUS;
// check if the project to add is with Java EE version equal or
// lesser than that of the EAR
String verStr = J2EEProjectUtilities.getJ2EEProjectVersion(projectToAdd);
if (verStr != null) {
int version;
if (J2EEProjectUtilities.isApplicationClientProject(projectToAdd))
version = J2EEVersionUtil.convertAppClientVersionStringToJ2EEVersionID(verStr);
else if (J2EEProjectUtilities.isEJBProject(projectToAdd))
version = J2EEVersionUtil.convertEJBVersionStringToJ2EEVersionID(verStr);
else if (J2EEProjectUtilities.isDynamicWebProject(projectToAdd))
version = J2EEVersionUtil.convertWebVersionStringToJ2EEVersionID(verStr);
else if (J2EEProjectUtilities.isJCAProject(projectToAdd))
version = J2EEVersionUtil.convertConnectorVersionStringToJ2EEVersionID(verStr);
else
version = J2EEVersionUtil.convertVersionStringToInt(verStr);
if (version > earVersion)
status = Status.CANCEL_STATUS;
else
status = Status.OK_STATUS;
}
} catch (CoreException e) {
String msg = e.getMessage() != null ? e.getMessage() : e.toString();
status = J2EENavigatorPlugin.createErrorStatus(0, msg, e);
}
return status;
}
protected static IProject getProject(Object element) {
if (element == null)
return null;
IProject project = null;
if (element instanceof IAdaptable)
project = (IProject) ((IAdaptable) element).getAdapter(IPROJECT_CLASS);
else
project = (IProject) Platform.getAdapterManager().getAdapter(element, IPROJECT_CLASS);
if (element instanceof AbstractEarNode) {
project = ((AbstractEarNode) element).getEarProject();
}
if (element instanceof GroupEARProvider) {
project = ((GroupEARProvider) element).getProject();
}
if (element instanceof IVirtualReference) {
project = ((IVirtualReference) element).getReferencedComponent().getProject();
}
if (project == null) {
if (element instanceof EObject) {
project = ProjectUtilities.getProject((EObject) element);
} else if (element instanceof J2EEItemProvider) {
IFile associatedFile = ((J2EEItemProvider) element).getAssociatedFile();
if (associatedFile != null)
project = associatedFile.getProject();
}
}
return project;
}
protected static String getDefaultURI(IVirtualComponent component) {
IProject project = component.getProject();
String name = component.getName();
if (J2EEProjectUtilities.isDynamicWebProject(project)) {
name += IModuleExtensions.DOT_WAR;
} else if (J2EEProjectUtilities.isEARProject(project)) {
name += IModuleExtensions.DOT_EAR;
} else if (J2EEProjectUtilities.isJCAProject(project)) {
name += IModuleExtensions.DOT_RAR;
} else {
name += IModuleExtensions.DOT_JAR;
}
return name;
}
private boolean hasConflictingProjectInMetaInf(Object lib) {
IProject libProj = null;
if (lib instanceof IProject) {
libProj = (IProject) lib;
} else if (lib instanceof IVirtualComponent) {
libProj = ((IVirtualComponent) lib).getProject();
} else if (lib instanceof IVirtualReference){
libProj = ((IVirtualReference) lib).getReferencedComponent().getProject();
}
if(libProj == null){
return false;
}
IProject earProject = earComponent.getProject();
try {
IProject[] earRefProjects = earProject.getReferencedProjects();
for (int i = 0; i < earRefProjects.length; i++) {
if (!J2EEProjectUtilities.isEARProject(earRefProjects[i]) && !earRefProjects[i].equals(libProj)) {
IVirtualComponent cmp1 = ComponentCore.createComponent(earRefProjects[i]);
if (cmp1 == null){
continue;
}
IVirtualReference[] refs = cmp1.getReferences();
for (int j = 0; j < refs.length; j++) {
if (refs[j].getReferencedComponent().getProject().equals(libProj))
return true;
}
}
}
return false;
} catch (CoreException ce) {
int k = 0;
}
return false;
}
protected IStatus addComponentsToEar(List<IVirtualComponent> components, String libDir) {
IStatus status = null;
IDataModel datamodel = DataModelFactory.createDataModel(new AddComponentToEnterpriseApplicationDataModelProvider());
Map componentToURIMap = new HashMap();
IVirtualComponent moduleComponent = null;
for (Iterator itr = components.iterator(); itr.hasNext();) {
moduleComponent = (IVirtualComponent) itr.next();
componentToURIMap.put(moduleComponent, getDefaultURI(moduleComponent));
}
datamodel.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT, earComponent);
datamodel.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST, components);
datamodel.setProperty(IAddComponentToEnterpriseApplicationDataModelProperties.TARGET_COMPONENTS_TO_URI_MAP, componentToURIMap);
datamodel.setProperty(IAddComponentToEnterpriseApplicationDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH, libDir);
try {
return datamodel.getDefaultOperation().execute(new NullProgressMonitor(), null);
} catch (ExecutionException e) {
String msg = e.getMessage() != null ? e.getMessage() : e.toString();
JEEUIPlugin.getDefault().logError(msg, e);
}
return status;
}
protected IStatus removeComponentsFromEar(List<IVirtualComponent> components, String libDir) {
IStatus status = null;
IDataModel datamodel = DataModelFactory.createDataModel(new RemoveComponentFromEnterpriseApplicationDataModelProvider());
datamodel.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT, earComponent);
datamodel.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST, components);
try {
status = datamodel.getDefaultOperation().execute(new NullProgressMonitor(), null);
if (!status.isOK()) {
return status;
}
} catch (ExecutionException e) {
String msg = e.getMessage() != null ? e.getMessage() : e.toString();
JEEUIPlugin.getDefault().logError(msg, e);
}
return removeReferences(components, libDir, earComponent);
}
protected IStatus removeReferences(List<IVirtualComponent> components, String libDir, IVirtualComponent sourceComponent) {
IVirtualReference[] refs = sourceComponent.getReferences();
for (IVirtualReference ref : refs) {
ref.getRuntimePath();
}
Map componentToURIMap = new HashMap();
for (Iterator itr = components.iterator(); itr.hasNext();) {
IVirtualComponent moduleComponent = (IVirtualComponent) itr.next();
componentToURIMap.put(moduleComponent, getDefaultURI(moduleComponent));
}
final IDataModel model = DataModelFactory.createDataModel(new RemoveReferenceComponentsDataModelProvider());
model.setProperty(IAddComponentToEnterpriseApplicationDataModelProperties.TARGET_COMPONENTS_TO_URI_MAP, componentToURIMap);
model.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT, sourceComponent);
model.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST, components);
if (libDir.length() > 0) {
model.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_DEPLOY_PATH, libDir);
}
try {
return model.getDefaultOperation().execute(null, null);
} catch (ExecutionException e) {
String msg = e.getMessage() != null ? e.getMessage() : e.toString();
JEEUIPlugin.getDefault().logError(msg, e);
}
return Status.CANCEL_STATUS;
}
protected IStatus resolveConflicts(IVirtualComponent component) {
IProject earProject = earComponent.getProject();
try {
IProject[] earRefProjects = earProject.getReferencedProjects();
for (int i = 0; i < earRefProjects.length; i++) {
if (!J2EEProjectUtilities.isEARProject(earRefProjects[i])) {
IVirtualComponent cmp1 = ComponentCore.createComponent(earRefProjects[i]);
if(cmp1 == null){
continue;
}
IVirtualReference[] refs = cmp1.getReferences();
for (int j = 0; j < refs.length; j++) {
if (refs[j].getReferencedComponent().equals(component)) {
List<IVirtualComponent> components = new ArrayList<IVirtualComponent>();
components.add(refs[j].getReferencedComponent());
IStatus status = removeReferences(components, refs[j].getRuntimePath().toString(), refs[j].getEnclosingComponent());
if (!status.isOK()) {
return status;
}
try {
removeManifestDependency(refs[j].getEnclosingComponent(), refs[j].getReferencedComponent());
} catch (ExecutionException e) {
String msg = e.getMessage() != null ? e.getMessage() : e.toString();
JEEUIPlugin.getDefault().logError(msg, e);
}
}
}
}
}
} catch (CoreException ce) {
int k = 0;
}
// return false;
return Status.OK_STATUS;
}
private void removeManifestDependency(final IVirtualComponent source, final IVirtualComponent target) throws ExecutionException {
final String sourceProjName = source.getProject().getName();
String targetProjName;
if (target instanceof J2EEModuleVirtualArchiveComponent) {
targetProjName = ((J2EEModuleVirtualArchiveComponent) target).getName();
String[] pathSegments = targetProjName.split("" + IPath.SEPARATOR); //$NON-NLS-1$
targetProjName = pathSegments[pathSegments.length - 1];
} else {
targetProjName = target.getProject().getName();
}
final IProgressMonitor monitor = new NullProgressMonitor();
final IFile manifestmf = J2EEProjectUtilities.getManifestFile(source.getProject());
final ArchiveManifest mf = J2EEProjectUtilities.readManifest(source.getProject());
if (mf == null)
return;
final IDataModel updateManifestDataModel = DataModelFactory.createDataModel(new UpdateManifestDataModelProvider());
updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.PROJECT_NAME, sourceProjName);
updateManifestDataModel.setBooleanProperty(UpdateManifestDataModelProperties.MERGE, false);
updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.MANIFEST_FILE, manifestmf);
String[] cp = mf.getClassPathTokenized();
List cpList = new ArrayList();
String cpToRemove = (targetProjName.endsWith(IJ2EEModuleConstants.JAR_EXT)) ?
targetProjName : targetProjName + IJ2EEModuleConstants.JAR_EXT;
for (int i = 0; i < cp.length; i++) {
if (!cp[i].equals(cpToRemove)) {
cpList.add(cp[i]);
}
}
updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.JAR_LIST, cpList);
updateManifestDataModel.getDefaultOperation().execute(monitor, null);
}
}