| /******************************************************************************* |
| * Copyright (c) 2003, 2004 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.navigator.internal.dnd; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.Iterator; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.swt.dnd.TransferData; |
| import org.eclipse.wst.common.frameworks.internal.AdaptabilityUtility; |
| import org.eclipse.wst.common.frameworks.internal.operations.WTPOperationDataModel; |
| import org.eclipse.wst.common.navigator.internal.views.NavigatorPlugin; |
| import org.eclipse.wst.common.navigator.internal.views.dnd.CommonNavigatorDropAdapter; |
| import org.eclipse.wst.common.navigator.internal.views.dnd.IDropValidator; |
| import org.eclipse.wst.common.navigator.internal.views.dnd.NavigatorDropActionDelegate; |
| |
| /** |
| * @author jsholl |
| * |
| */ |
| public abstract class AddProjectToEarDropAction extends NavigatorDropActionDelegate implements IDropValidator { |
| |
| public AddProjectToEarDropAction() { |
| super(); |
| } |
| |
| public boolean validateDrop(CommonNavigatorDropAdapter dropAdapter, Object target, int operation, TransferData transferType) { |
| return false; |
| //TODO switch to components |
| // if (LocalSelectionTransfer.getInstance().isSupportedType(transferType) || PluginTransfer.getInstance().isSupportedType(transferType)) { |
| // IProject earProject = (IProject) AdaptabilityUtility.getAdapter(target, IProject.class); |
| // if (null == earProject || !earProject.isAccessible()) { |
| // return false; |
| // } |
| // |
| // int earVersion = earNature.getApplication().getJ2EEVersionID(); |
| // |
| // ISelection selection = LocalSelectionTransfer.getInstance().getSelection(); |
| // if (selection == null || !(selection instanceof IStructuredSelection)) { |
| // return false; |
| // } |
| // IStructuredSelection structuredSelection = (IStructuredSelection) selection; |
| // if (structuredSelection.isEmpty()) { |
| // return false; |
| // } |
| // Object key = new Object(); |
| // EAREditModel editModel = null; |
| // try { |
| // editModel = earNature.getEarEditModelForRead(key); |
| // Iterator iterator = structuredSelection.iterator(); |
| // while (iterator.hasNext()) { |
| // Object next = iterator.next(); |
| // IProject projectToAdd = (IProject) AdaptabilityUtility.getAdapter(next, IProject.class); |
| // if (null == projectToAdd || !projectToAdd.isAccessible()) { |
| // return false; |
| // } |
| // |
| // if (!validateProjectToAdd(projectToAdd, earVersion)) { |
| // return false; |
| // } |
| // |
| // if (editModel.hasMappingToProject(projectToAdd)) { |
| // return false; |
| // } |
| // } |
| // } finally { |
| // if (null != editModel) { |
| // editModel.releaseAccess(key); |
| // } |
| // } |
| // return true; |
| // } |
| // return false; |
| } |
| |
| protected abstract boolean validateProjectToAdd(IProject projectToAdd, int earVersion); |
| |
| protected abstract WTPOperationDataModel getDataModel(IProject earProject, IProject projectToAdd); |
| |
| protected void doInit() { |
| //default nothing |
| } |
| |
| public boolean run(Object source, Object target) { |
| if (source instanceof IStructuredSelection) |
| return run((IStructuredSelection) source, (IProject) AdaptabilityUtility.getAdapter(target, IProject.class)); |
| return false; |
| } |
| |
| public boolean run(CommonNavigatorDropAdapter dropAdapter, Object source, Object target) { |
| return run(source, target); |
| } |
| |
| protected boolean run(IStructuredSelection selection, IProject earProject) { |
| if (selection == null || selection.isEmpty() || earProject == null || !earProject.isAccessible()) |
| return false; |
| |
| for (Iterator selectionIterator = selection.iterator(); selectionIterator.hasNext();) { |
| Object sourceObject = selectionIterator.next(); |
| |
| IProject projectToAdd = (IProject) AdaptabilityUtility.getAdapter(sourceObject, IProject.class); |
| if (projectToAdd != null) { |
| try { |
| WTPOperationDataModel dataModel = getDataModel(earProject, projectToAdd); |
| dataModel.getDefaultOperation().run(null); |
| } catch (InvocationTargetException e) { |
| NavigatorPlugin.log(e.toString()); |
| } catch (InterruptedException e) { |
| NavigatorPlugin.log(e.toString()); |
| } |
| } |
| } |
| return true; |
| } |
| |
| } |