blob: eeb165ce156555d57f337a8057175ddc4577aeb0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 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.bugzilla.ui.action;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.mylyn.commons.workbench.forms.CommonFormUtil;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaTaskDataHandler;
import org.eclipse.mylyn.internal.bugzilla.ui.editor.BugzillaTaskEditorPage;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskAttachment;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.editor.IFormPage;
import org.eclipse.ui.forms.widgets.Section;
/**
* @author Frank Becker
*/
@SuppressWarnings("restriction")
public class UpdateAttachmentJob extends Job {
private final List<ITaskAttachment> attachment;
private final TaskEditor editor;
private final boolean obsolete;
private IStatus error;
public UpdateAttachmentJob(List<ITaskAttachment> attachment, TaskEditor editor, boolean obsolete) {
super(Messages.UpdateAttachmentJob_update_attachment);
this.attachment = attachment;
this.editor = editor;
this.obsolete = obsolete;
}
public IStatus getError() {
return error;
}
@Override
protected IStatus run(IProgressMonitor monitor) {
final ITask task;
task = editor.getTaskEditorInput().getTask();
if (!task.getConnectorKind().equals(BugzillaCorePlugin.CONNECTOR_KIND)) {
return Status.OK_STATUS;
}
AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
task.getConnectorKind());
monitor.beginTask(Messages.UpdateAttachmentJob_update_attachments, attachment.size() * 10 + 10);
try {
for (ITaskAttachment taskAttachment : attachment) {
TaskAttribute taskAttribute = taskAttachment.getTaskAttribute();
TaskAttribute deprecated = taskAttribute.getMappedAttribute(TaskAttribute.ATTACHMENT_IS_DEPRECATED);
if (deprecated != null) {
if (deprecated.getValue().equals("1") && !obsolete) { //$NON-NLS-1$
try {
deprecated.setValue("0"); //$NON-NLS-1$
((BugzillaTaskDataHandler) connector.getTaskDataHandler()).postUpdateAttachment(
taskAttachment.getTaskRepository(), taskAttribute, "update", monitor); //$NON-NLS-1$
} catch (CoreException e) {
error = e.getStatus();
deprecated.setValue("1"); //$NON-NLS-1$
return Status.OK_STATUS;
}
} else if (deprecated.getValue().equals("0") && obsolete) { //$NON-NLS-1$
try {
deprecated.setValue("1"); //$NON-NLS-1$
((BugzillaTaskDataHandler) connector.getTaskDataHandler()).postUpdateAttachment(
taskAttachment.getTaskRepository(), taskAttribute, "update", monitor); //$NON-NLS-1$
} catch (CoreException e) {
error = e.getStatus();
deprecated.setValue("0"); //$NON-NLS-1$
return Status.OK_STATUS;
}
}
}
monitor.worked(10);
}
if (task != null) {
if (connector != null) {
TasksUiInternal.synchronizeTask(connector, task, true, new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
public void run() {
try {
if (editor != null) {
editor.refreshPages();
editor.getEditorSite().getPage().activate(editor);
IFormPage formPage = editor.getActivePageInstance();
if (formPage instanceof BugzillaTaskEditorPage) {
BugzillaTaskEditorPage bugzillaPage = (BugzillaTaskEditorPage) formPage;
Control control = bugzillaPage.getPart(
AbstractTaskEditorPage.ID_PART_ATTACHMENTS).getControl();
if (control instanceof Section) {
Section section = (Section) control;
CommonFormUtil.setExpanded(section, true);
}
}
}
} finally {
if (editor != null) {
editor.showBusy(false);
}
}
}
});
}
});
}
monitor.worked(10);
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
public void run() {
if (editor != null) {
editor.showBusy(true);
}
}
});
}
} catch (OperationCanceledException e) {
return Status.CANCEL_STATUS;
} finally {
monitor.done();
}
return Status.OK_STATUS;
}
}