/******************************************************************************* * Copyright (c) 2016 Frank Becker 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: * Frank Becker - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.bugzilla.rest.core; import java.io.InputStream; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.mylyn.commons.core.operations.IOperationMonitor; import org.eclipse.mylyn.commons.core.operations.OperationUtil; import org.eclipse.mylyn.commons.net.Policy; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.AbstractTaskAttachmentHandler; import org.eclipse.mylyn.tasks.core.data.AbstractTaskAttachmentSource; import org.eclipse.mylyn.tasks.core.data.TaskAttribute; public class BugzillaRestTaskAttachmentHandler extends AbstractTaskAttachmentHandler { private final BugzillaRestConnector connector; public BugzillaRestTaskAttachmentHandler(BugzillaRestConnector connector) { this.connector = connector; } @Override public boolean canGetContent(TaskRepository repository, ITask task) { return true; } @Override public boolean canPostContent(TaskRepository repository, ITask task) { return true; } @Override public InputStream getContent(@NonNull TaskRepository repository, @NonNull ITask task, @NonNull TaskAttribute attachmentAttribute, @Nullable IProgressMonitor monitor) throws CoreException { try { monitor = Policy.monitorFor(monitor); monitor.beginTask("getAttachment Data", IProgressMonitor.UNKNOWN); //$NON-NLS-1$ BugzillaRestClient client = connector.getClient(repository); try { IOperationMonitor progress = OperationUtil.convert(monitor, "get Attachment Data", 3); //$NON-NLS-1$ return client.getAttachmentData(attachmentAttribute, progress); } catch (BugzillaRestException e) { throw new CoreException(new Status(IStatus.ERROR, BugzillaRestCore.ID_PLUGIN, 2, "Error get attachment data.\n\n" + e.getMessage(), e)); //$NON-NLS-1$ } } finally { monitor.done(); } } @Override public void postContent(@NonNull TaskRepository repository, @NonNull ITask task, @NonNull AbstractTaskAttachmentSource source, @Nullable String comment, @Nullable TaskAttribute attachmentAttribute, @Nullable IProgressMonitor monitor) throws CoreException { try { monitor = Policy.monitorFor(monitor); monitor.beginTask("addAttachment Data", IProgressMonitor.UNKNOWN); BugzillaRestClient client = connector.getClient(repository); try { IOperationMonitor progress = OperationUtil.convert(monitor, "get Attachment Data", 3); client.addAttachment(task.getTaskId(), comment, source, attachmentAttribute, progress); } catch (BugzillaRestException e) { throw new CoreException(new Status(IStatus.ERROR, BugzillaRestCore.ID_PLUGIN, 2, "Error add attachment data.\n\n" + e.getMessage(), e)); } } finally { monitor.done(); } } }