blob: 1a9f743f3e6587e9d0edca6104f63770406b2792 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Ericsson AB 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
*
* Description:
*
* This class implements an Adapter used when dropping Anomalies on Contents
* for cloning purposes
*
* Contributors:
* Sebastien Dubois - Created for Mylyn Review R4E project
*
*******************************************************************************/
package org.eclipse.mylyn.reviews.r4e.ui.internal.navigator;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ViewerDropAdapter;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.CompatibilityException;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIAnomalyBasic;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIComment;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIContent;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIFileContext;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelElement;
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.AnomalyUtils;
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.UIUtils;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TransferData;
/**
* @author Sebastien Dubois
* @version $Revision: 1.0 $
*/
public class R4EUIElementDropAdapter extends ViewerDropAdapter {
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor for R4EUIElementDragListener.
*
* @param aViewer
* - ReviewNavigatorTreeViewer
*/
public R4EUIElementDropAdapter(ReviewNavigatorTreeViewer viewer) {
super(viewer);
}
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
/**
* Method declared on ViewerDropAdapter
*
* @param aData
* - Object
*/
@Override
public boolean performDrop(Object aData) {
if (null != aData) {
R4EUIModelElement target = (R4EUIModelElement) getCurrentTarget();
if (target != null) {
Object[] sourceElements = ((IStructuredSelection) aData).toArray();
for (Object sourceElement : sourceElements) {
if (target instanceof R4EUIContent && sourceElement instanceof R4EUIAnomalyBasic) {
if (null == AnomalyUtils.isAnomalyExist((R4EUIFileContext) target.getParent().getParent(),
((R4EUIContent) target).getPosition(), ((R4EUIAnomalyBasic) sourceElement).getAnomaly()
.getDescription())) {
try {
//Dropping the anomaly into content creates a cloned linked anomaly
AnomalyUtils.cloneLinkedAnomaly((R4EUIContent) target,
(R4EUIAnomalyBasic) sourceElement);
} catch (ResourceHandlingException e) {
UIUtils.displayResourceErrorDialog(e);
} catch (OutOfSyncException e) {
UIUtils.displaySyncErrorDialog(e);
}
}
} else if (target instanceof R4EUIAnomalyBasic && sourceElement instanceof R4EUIComment) {
if (null == AnomalyUtils.isCommentExist((R4EUIAnomalyBasic) target,
((R4EUIComment) sourceElement).getComment().getDescription())) {
try {
//Dropping the comment into the Anomaly copies it to this anomaly
IR4EUIModelElement newUIComment = ((R4EUIAnomalyBasic) target).createChildren(((R4EUIComment) sourceElement).getComment());
UIUtils.setNavigatorViewFocus(newUIComment, AbstractTreeViewer.ALL_LEVELS);
} catch (ResourceHandlingException e) {
UIUtils.displayResourceErrorDialog(e);
} catch (OutOfSyncException e) {
UIUtils.displaySyncErrorDialog(e);
} catch (CompatibilityException e) {
UIUtils.displayCompatibilityErrorDialog(e);
}
}
}
}
return true;
}
}
return false;
}
/**
* Method declared on ViewerDropAdapter
*
* @param aTarget
* - Object
* @param aOperation
* - int
* @param aTransferType
* - TransferData
* @return boolean
*/
@Override
public boolean validateDrop(Object aTarget, int aOperation, TransferData aTransferType) {
IR4EUIModelElement elementSelected = (IR4EUIModelElement) ((IStructuredSelection) R4EUIModelController.getNavigatorView()
.getTreeViewer()
.getSelection()).getFirstElement();
if ((aTarget instanceof R4EUIContent && elementSelected instanceof R4EUIAnomalyBasic)
|| (aTarget instanceof R4EUIAnomalyBasic && elementSelected instanceof R4EUIComment)) {
return LocalSelectionTransfer.getTransfer().isSupportedType(aTransferType);
}
return false;
}
/**
* Method declared on ViewerDropAdapter
*
* @param aEvent
* - DropTargetEvent
*/
@Override
public void dragOver(DropTargetEvent aEvent) {
super.dragOver(aEvent);
aEvent.feedback = DND.FEEDBACK_INSERT_BEFORE;
}
}