/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * 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: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.ui.rcp.controllers.dnd; import java.util.Iterator; import org.eclipse.jface.viewers.ViewerDropAdapter; import org.eclipse.jubula.client.core.model.IEventExecTestCasePO; import org.eclipse.jubula.client.core.model.INodePO; import org.eclipse.jubula.client.core.model.ISpecTestCasePO; import org.eclipse.jubula.client.ui.constants.Constants; import org.eclipse.jubula.client.ui.rcp.Plugin; import org.eclipse.jubula.client.ui.rcp.editors.JBEditorHelper; import org.eclipse.jubula.client.ui.rcp.editors.TestCaseEditor; import org.eclipse.jubula.client.ui.rcp.handlers.AddExistingEventHandlerHandler; import org.eclipse.swt.dnd.TransferData; /** * @author BREDEX GmbH * @created 17.05.2005 */ public class EventHandlerDropTargetListener extends ViewerDropAdapter { /** * <code>m_editor</code> */ private TestCaseEditor m_editor; /** * @param editor the editor which contains the viewer. */ public EventHandlerDropTargetListener(TestCaseEditor editor) { super(editor.getEventHandlerTreeViewer()); m_editor = editor; boolean scrollExpand = Plugin.getDefault().getPreferenceStore(). getBoolean(Constants.TREEAUTOSCROLL_KEY); setScrollExpandEnabled(scrollExpand); } /** * {@inheritDoc} */ public boolean performDrop(Object data) { if (m_editor.getEditorHelper().requestEditableState() != JBEditorHelper.EditableState.OK) { return false; } LocalSelectionTransfer transfer = LocalSelectionTransfer.getInstance(); Iterator iter = (transfer.getSelection()).iterator(); while (iter.hasNext()) { Object obj = iter.next(); if (!(obj instanceof INodePO)) { return false; } INodePO node = (INodePO)obj; if (node instanceof ISpecTestCasePO) { INodePO target = (INodePO)getCurrentTarget(); ISpecTestCasePO specTcGUI = (ISpecTestCasePO)node; if (target != node) { addEventHandler(target, specTcGUI); } } } return true; } /** * @param target * the target to drop on. * @param eventSpecTc * the TestCase used as EventHandler. */ private void addEventHandler(INodePO target, ISpecTestCasePO eventSpecTc) { ISpecTestCasePO ownerSpecTc = (ISpecTestCasePO)m_editor .getEventHandlerTreeViewer().getInput(); if (target == null || target instanceof IEventExecTestCasePO) { if (AddExistingEventHandlerHandler .hasTestCaseAllEventHandler(ownerSpecTc)) { return; } m_editor.addEventHandler(eventSpecTc, ownerSpecTc); LocalSelectionTransfer.getInstance().setSelection(null); } } /** * {@inheritDoc} */ public boolean validateDrop(Object target, int operation, TransferData transferType) { if (LocalSelectionTransfer.getInstance().getSelection() == null) { return false; } LocalSelectionTransfer transfer = LocalSelectionTransfer.getInstance(); Iterator iter = transfer.getSelection().iterator(); while (iter.hasNext()) { Object obj = iter.next(); if (!(obj instanceof INodePO)) { return false; } INodePO node = (INodePO)obj; if (!(node instanceof ISpecTestCasePO)) { return false; } INodePO parent = (INodePO)getViewer().getInput(); if (node.hasCircularDependences(parent)) { return false; } } return true; } }