package org.csstudio.sds.ui.internal.editor.dnd; import java.util.Collections; import java.util.List; import org.csstudio.platform.model.pvs.IProcessVariableAddress; import org.csstudio.platform.model.pvs.IProcessVariableAdressProvider; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.dnd.AbstractTransferDragSourceListener; import org.eclipse.gef.editparts.AbstractEditPart; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.Transfer; abstract class AbstractDragSourceListener<E> extends AbstractTransferDragSourceListener { public AbstractDragSourceListener(EditPartViewer viewer, Transfer transfer) { super(viewer, transfer); } @Override @SuppressWarnings("unchecked") public final void dragSetData(DragSourceEvent event) { List<AbstractEditPart> controllers = getViewer().getSelectedEditParts(); E transferDataObject = null; for (AbstractEditPart controller : controllers) { if (controller instanceof IProcessVariableAdressProvider) { IProcessVariableAdressProvider provider = (IProcessVariableAdressProvider) controller; transferDataObject = convert( provider.getPVAdress(), provider.getProcessVariableAdresses() != null ? provider .getProcessVariableAdresses() : Collections.EMPTY_LIST); } } event.doit = (transferDataObject != null); event.data = transferDataObject; } protected abstract E convert(IProcessVariableAddress mainAddress, List<IProcessVariableAddress> allAddresses); }