Java tutorial
// $codepro.audit.disable com.instantiations.assist.eclipse.analysis.audit.rule.effectivejava.alwaysOverridetoString.alwaysOverrideToString, com.instantiations.assist.eclipse.analysis.deserializeabilitySecurity, com.instantiations.assist.eclipse.analysis.enforceCloneableUsageSecurity /******************************************************************************* * 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 the context-sensitive command to add an anomaly on * a review item * * Contributors: * Sebastien Dubois - Created for Mylyn Review R4E project * ******************************************************************************/ package org.eclipse.mylyn.reviews.r4e.ui.internal.commands.handlers; import java.util.Iterator; import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.IStructuredSelection; 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.utils.AnomalyUtils; import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.R4EUIConstants; import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.UIUtils; import org.eclipse.swt.widgets.Display; /** * @author Sebastien Dubois * @version $Revision: 1.0 $ */ public class PasteElementHandler extends AbstractHandler { // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ /** * Field COMMAND_MESSAGE. (value is ""Pasting Element(s)..."") */ private static final String COMMAND_MESSAGE = "Pasting Element(s)..."; // ------------------------------------------------------------------------ // Methods // ------------------------------------------------------------------------ /** * Method execute. * * @param event * ExecutionEvent * @return Object * @see org.eclipse.core.commands.IHandler#execute(ExecutionEvent) */ public Object execute(final ExecutionEvent event) { final List<IR4EUIModelElement> selectedElements = UIUtils.getCommandUIElements(); final Job job = new Job(COMMAND_MESSAGE) { public String familyName = R4EUIConstants.R4E_UI_JOB_FAMILY; @Override public boolean belongsTo(Object family) { return familyName.equals(family); } @Override public IStatus run(IProgressMonitor monitor) { R4EUIModelController.setJobInProgress(true); for (IR4EUIModelElement target : selectedElements) { if (target != null) { final Object[] sourceSelection = new Object[1]; Display.getDefault().syncExec(new Runnable() { public void run() { sourceSelection[0] = R4EUIModelController.getNavigatorView().getClipboardContents(); } }); Object sourceElement = null; if (null != sourceSelection[0]) { for (final Iterator<?> iterator = ((IStructuredSelection) sourceSelection[0]) .iterator(); iterator.hasNext();) { sourceElement = iterator.next(); if (target instanceof R4EUIContent && sourceElement instanceof R4EUIAnomalyBasic && null == AnomalyUtils.isAnomalyExist( (R4EUIFileContext) target.getParent().getParent(), ((R4EUIContent) target).getPosition(), ((R4EUIAnomalyBasic) sourceElement).getAnomaly() .getDescription())) { try { //Pasting 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 { //Pasting 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); } } } } } } } R4EUIModelController.setJobInProgress(false); monitor.done(); return Status.OK_STATUS; } }; job.setUser(false); job.schedule(); return null; } }