blob: 08a740f6c8a6928bc8d120802e2db8a8c88c153e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 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.sandbox.bridge.bugs;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.mylyn.context.core.IInteractionElement;
import org.eclipse.mylyn.context.ui.AbstractContextUiBridge;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaClient;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.deprecated.AbstractRepositoryTaskEditor;
import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTaskOutlinePage;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
/**
* @author Mik Kersten
* @author Shawn Minto
*/
public class BugzillaUiBridge extends AbstractContextUiBridge {
protected BugzillaContextLabelProvider labelProvider = new BugzillaContextLabelProvider();
@Override
public void open(IInteractionElement node) {
String handle = node.getHandleIdentifier();
String bugHandle = handle;
String server = handle.substring(0, handle.indexOf(";"));
handle = handle.substring(handle.indexOf(";") + 1);
int next = handle.indexOf(";");
int bugId;
if (next == -1) {
bugId = Integer.parseInt(handle);
} else {
bugId = Integer.parseInt(handle.substring(0, handle.indexOf(";")));
bugHandle = bugHandle.substring(0, next);
}
final AbstractTask task = TasksUiPlugin.getTaskList().getTask(handle);
if (task != null) {
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
public void run() {
TasksUiUtil.openTask(task);
}
});
} else {
String bugUrl = BugzillaClient.getBugUrlWithoutLogin(server, "" + bugId);
TasksUiUtil.openTask(server, "" + bugId, bugUrl);
}
}
public ILabelProvider getLabelProvider() {
return labelProvider;
}
@Override
public void close(IInteractionElement node) {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
if (page != null) {
IEditorReference[] references = page.getEditorReferences();
for (IEditorReference reference : references) {
IEditorPart part = reference.getEditor(false);
if (part != null) {
if (part instanceof AbstractRepositoryTaskEditor) {
((AbstractRepositoryTaskEditor) part).close();
} else if (part instanceof TaskEditor) {
((TaskEditor) part).close(true);
}
}
}
}
}
@Override
public boolean acceptsEditor(IEditorPart editorPart) {
return editorPart instanceof AbstractRepositoryTaskEditor;
}
@Override
public List<TreeViewer> getContentOutlineViewers(IEditorPart editor) {
List<TreeViewer> viewers = new ArrayList<TreeViewer>();
TreeViewer outline = getOutlineTreeViewer(editor);
if (outline != null) {
viewers.add(outline);
}
return viewers;
}
protected TreeViewer getOutlineTreeViewer(IEditorPart editor) {
if (editor instanceof AbstractRepositoryTaskEditor) {
AbstractRepositoryTaskEditor abe = (AbstractRepositoryTaskEditor) editor;
RepositoryTaskOutlinePage outline = abe.getOutline();
if (outline != null) {
return outline.getOutlineTreeViewer();
}
}
return null;
}
@Override
public Object getObjectForTextSelection(TextSelection selection, IEditorPart editor) {
return null;
}
public void restoreEditor(IInteractionElement document) {
// ignore
}
@Override
public IInteractionElement getElement(IEditorInput input) {
return null;
}
@Override
public String getContentType() {
return BugzillaStructureBridge.CONTENT_TYPE;
}
}