// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataprofiler.core.ui.views; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTargetEffect; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.widgets.Control; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.dq.helper.PropertyHelper; import org.talend.repository.model.IRepositoryNode; /** * DOC qzhang class global comment. Detailled comment <br/> * * $Id: talend.epf 1 2006-09-29 17:06:40Z nrousseau $ */ public abstract class AbstractSelectionReceiver extends DropTargetEffect { private String extension; protected static int lastValidOperation; /** * DOC qzhang AbstractSelectionReceiver constructor comment. */ public AbstractSelectionReceiver(Control control, String extension) { super(control); this.extension = extension; } /* * (non-Javadoc) * * @see org.eclipse.swt.dnd.DropTargetAdapter#dragEnter(org.eclipse.swt.dnd.DropTargetEvent) */ @Override public void dragEnter(DropTargetEvent event) { super.dragEnter(event); execValidation(event, doDropValidation(event, LocalSelectionTransfer.getTransfer())); } /* * (non-Javadoc) * * @see org.eclipse.swt.dnd.DropTargetAdapter#dropAccept(org.eclipse.swt.dnd.DropTargetEvent) */ @Override public void dropAccept(DropTargetEvent event) { super.dropAccept(event); execValidation(event, doDropValidation(event, LocalSelectionTransfer.getTransfer())); } /** * DOC qzhang Comment method "execValidation". * * @param event * @param valid */ public void execValidation(DropTargetEvent event, boolean valid) { if (event.detail != DND.DROP_NONE) { // FIXME static value should not be assigned valus in a instance method. lastValidOperation = event.detail; } if (valid) { event.detail = lastValidOperation; } else { event.detail = DND.DROP_NONE; } } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.views.ISelectionReceiver#doDropValidation(org.eclipse.swt.dnd.DropTargetEvent, * org.eclipse.ui.navigator.CommonViewer) */ public boolean doDropValidation(DropTargetEvent event, LocalSelectionTransfer transfer) { boolean ret = false; Object[] firstElements = ((StructuredSelection) transfer.getSelection()).toArray(); for (Object object : firstElements) { if (object instanceof IFile) { IFile fe = (IFile) object; if (extension != null && extension.equals(fe.getFileExtension())) { ret = true; } } else if (object instanceof IRepositoryNode) { // // ADD msjian TDQ-4919: can not drag the ref project analysis to report IRepositoryViewObject obj = ((IRepositoryNode) object).getObject(); // if (!ProxyRepositoryFactory.getInstance().isEditableAndLockIfPossible(obj)) { // return false; // } // // TDQ-4919~ IPath itemPath = PropertyHelper.getItemPath(obj.getProperty()); if (itemPath == null) { continue; } if (extension != null && extension.equals(itemPath.getFileExtension())) { ret = true; } } if (!ret) { break; } } return ret; } @Override public void drop(DropTargetEvent event) { super.drop(event); drop(event, LocalSelectionTransfer.getTransfer()); } public abstract void drop(DropTargetEvent event, LocalSelectionTransfer transfer); }