| /******************************************************************************* |
| * Copyright (c) 2010, 2011 Tasktop Technologies 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 |
| * |
| * Contributors: |
| * Tasktop Technologies - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.internal.builds.ui.commands; |
| |
| import java.util.List; |
| |
| import org.eclipse.core.commands.AbstractHandler; |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.mylyn.builds.core.IBuild; |
| import org.eclipse.mylyn.builds.core.IBuildElement; |
| import org.eclipse.mylyn.commons.ui.ClipboardCopier; |
| import org.eclipse.mylyn.internal.builds.ui.BuildsUiInternal; |
| import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.ui.handlers.HandlerUtil; |
| |
| /** |
| * @author Steffen Pingel |
| */ |
| public class CopyDetailsHandler extends AbstractHandler { |
| |
| public enum Mode { |
| KEY, SUMMARY, SUMMARY_URL, URL; |
| |
| public String toString() { |
| switch (this) { |
| case KEY: |
| return "ID"; |
| case URL: |
| return "URL"; |
| case SUMMARY: |
| return "Summary"; |
| case SUMMARY_URL: |
| return "Summary and URL"; |
| } |
| return null; |
| } |
| |
| } |
| |
| public static void copyDetails(List<IBuildElement> elements, final Mode mode) { |
| ClipboardCopier.getDefault().copy(elements, new ClipboardCopier.TextProvider() { |
| public String getTextForElement(Object element) { |
| return getTextFor(element, mode); |
| } |
| }); |
| } |
| |
| public static String getTextFor(Object object) { |
| return getTextFor(object, Mode.SUMMARY_URL); |
| } |
| |
| public static String getTextFor(Object object, Mode mode) { |
| StringBuffer sb = new StringBuffer(); |
| switch (mode) { |
| case KEY: |
| if (object instanceof IBuild) { |
| IBuild build = (IBuild) object; |
| if (build.getId() != null) { |
| sb.append(build.getId()); |
| } |
| } else if (object instanceof IBuildElement) { |
| IBuildElement element = (IBuildElement) object; |
| sb.append(element.getLabel()); |
| } |
| break; |
| case URL: |
| if (object instanceof IBuildElement) { |
| IBuildElement element = (IBuildElement) object; |
| if (element.getUrl() != null) { |
| sb.append(element.getUrl()); |
| } |
| } |
| break; |
| case SUMMARY: |
| if (object instanceof IBuild) { |
| IBuild build = (IBuild) object; |
| if (build.getLabel() != null) { |
| sb.append(NLS.bind("Build {0}", build.getLabel())); |
| } |
| } else if (object instanceof IBuildElement) { |
| IBuildElement element = (IBuildElement) object; |
| sb.append(element.getLabel()); |
| } |
| break; |
| case SUMMARY_URL: |
| if (object instanceof IBuildElement) { |
| IBuildElement element = (IBuildElement) object; |
| if (object instanceof IBuild) { |
| IBuild build = (IBuild) object; |
| if (build.getLabel() != null) { |
| sb.append(NLS.bind("Build {0}", build.getLabel())); |
| } |
| } |
| sb.append(element.getLabel()); |
| if (TasksUiInternal.isValidUrl(element.getUrl())) { |
| sb.append(ClipboardCopier.LINE_SEPARATOR); |
| sb.append(element.getUrl()); |
| } |
| } |
| break; |
| } |
| return sb.toString(); |
| } |
| |
| public Object execute(ExecutionEvent event) throws ExecutionException { |
| ISelection selection = HandlerUtil.getCurrentSelection(event); |
| if (selection instanceof IStructuredSelection) { |
| Mode mode = Mode.SUMMARY; |
| String kind = event.getParameter("kind"); |
| if (kind != null) { |
| try { |
| mode = Mode.valueOf(kind); |
| } catch (IllegalArgumentException e) { |
| throw new ExecutionException(NLS.bind("Invalid kind ''{0}'' specified", kind)); |
| } |
| } |
| copyDetails(BuildsUiInternal.getElements(event), mode); |
| } |
| return null; |
| } |
| |
| } |