/* * Copyright (c) 2012-2016 Marsha Chechik, Alessio Di Sandro, Michalis Famelis, * Rick Salay. * 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: * Alessio Di Sandro - Implementation. */ package edu.toronto.cs.se.mmint.mid.relationship.diagram.part; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.gef.EditPartViewer; import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramDropTargetListener; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.dnd.TransferData; /** * The Relationship diagram drop listener. * * @author Alessio Di Sandro * */ public class RelationshipDiagramOutlineDropListener extends DiagramDropTargetListener { /** * Constructor: initialises the superclass. * * @param viewer * The diagram viewer. * @param xfer * The transfer object. */ public RelationshipDiagramOutlineDropListener(EditPartViewer viewer, Transfer xfer) { super(viewer, xfer); } /** * Gets the objects being dropped. * * @return The objects being dropped. */ @Override protected List<RelationshipDiagramOutlineDropObject> getObjectsBeingDropped() { TransferData data = getCurrentEvent().currentDataType; List<RelationshipDiagramOutlineDropObject> result = new ArrayList<RelationshipDiagramOutlineDropObject>(); Object transferedData = LocalSelectionTransfer.getTransfer().nativeToJava(data); if (transferedData instanceof IStructuredSelection) { for (Iterator<?> it = ((IStructuredSelection) transferedData).iterator(); it.hasNext();) { Object transferedObject = it.next(); if (transferedObject instanceof RelationshipDiagramOutlineDropObject) { result.add((RelationshipDiagramOutlineDropObject) transferedObject); } } } return result; } /** * Checks if the drop is enabled. * * @return True. */ @Override public boolean isEnabled(DropTargetEvent event) { // drag and drop is always enabled on the drop side, but filtered on the drag side return true; } }