| /******************************************************************************* |
| * 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.core.runtime.CoreException; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaRepositoryConnector; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaTaskDataHandler; |
| import org.eclipse.mylyn.internal.bugzilla.ui.tasklist.StackTrace; |
| import org.eclipse.mylyn.tasks.core.ITask; |
| import org.eclipse.mylyn.tasks.core.TaskRepository; |
| import org.eclipse.mylyn.tasks.core.data.TaskData; |
| import org.eclipse.mylyn.tasks.ui.TasksUi; |
| |
| /** |
| * Class to store the DoiInfo of a BugzillaSearchHit |
| * |
| * TODO: refactor |
| * |
| * @author Shawn Minto |
| */ |
| public class BugzillaReportInfo { |
| |
| private static final int MAX_LABEL_LENGTH = 150; |
| |
| private static final long serialVersionUID = 3257004367222419506L; |
| |
| /** The BugzillaSearchHit associated with this DoiInfo */ |
| private final ITask hit; |
| |
| /** Whether this search hit was from an exact search like a stack trace */ |
| private boolean isExact = false; |
| |
| /** List of all of the StackTrace's in the given bug */ |
| private final List<StackTrace> stackTraces; |
| |
| /** The bug report associated with this DoiInfo */ |
| private TaskData bug; |
| |
| /** |
| * Constructor |
| * |
| * @param initialValue |
| * The initial Doi value |
| * @param hit |
| * The BugzillaSearchHit associated with this DoiInfo |
| * @param isExact |
| * Whether the search was exact or not |
| */ |
| public BugzillaReportInfo(float initialValue, ITask hit, boolean isExact) { |
| this.hit = hit; |
| this.isExact = isExact; |
| bug = null; |
| stackTraces = new ArrayList<StackTrace>(); |
| } |
| |
| /** |
| * Get the bugzilla search hit relating to this DoiInfo |
| * |
| * @return The BugzillaSearchHit related to this DoiInfo |
| */ |
| public ITask getHit() { |
| return hit; |
| } |
| |
| @Override |
| public String toString() { |
| return hit.toString(); |
| } |
| |
| /** |
| * Determine if the search hit this represents is exact or not |
| * |
| * @return <code>true</code> if the search was exact otherwise <code>false</code> |
| */ |
| public boolean isExact() { |
| return isExact; |
| } |
| |
| /** |
| * Set whether this bug has any exact elements in it - the search used was fully qualified |
| * |
| * @param isExact |
| * - Whether there are any exact element matches in it |
| */ |
| public void setExact(boolean isExact) { |
| this.isExact = isExact; |
| } |
| |
| /** |
| * Get the bug report associated with this DoiInfo<br> |
| * The bug is downloaded if it was not previously |
| * |
| * @return Returns the BugReport |
| */ |
| public TaskData getBug() throws CoreException { |
| if (bug == null) { |
| // get the bug report |
| TaskRepository repository = TasksUi.getRepositoryManager().getRepository(BugzillaCorePlugin.CONNECTOR_KIND, |
| hit.getRepositoryUrl()); |
| BugzillaRepositoryConnector bugzillaConnector = (BugzillaRepositoryConnector) TasksUi.getRepositoryManager() |
| .getRepositoryConnector(BugzillaCorePlugin.CONNECTOR_KIND); |
| BugzillaTaskDataHandler handler = new BugzillaTaskDataHandler(bugzillaConnector); |
| bug = handler.getTaskData(repository, hit.getTaskId(), new NullProgressMonitor()); |
| } |
| return bug; |
| } |
| |
| /** |
| * Set the bug report associated with this DoiInfo |
| * |
| * @param bug |
| * - BugReport that this is associated with |
| */ |
| public void setBug(TaskData bug) { |
| this.bug = bug; |
| } |
| |
| /** |
| * Get all of the stack traces contained in the bug |
| * |
| * @return Returns a list of StackTrace's |
| */ |
| public List<StackTrace> getStackTraces() { |
| return stackTraces; |
| } |
| |
| /** |
| * Determine whether the doi info has any stack traces associated with it |
| * |
| * @return <code>true</code> if there are some stack traces else <code>false</code> |
| */ |
| public boolean hasStackTraces() { |
| return !stackTraces.isEmpty(); |
| } |
| |
| /** |
| * Add a stack trace to this DoiInfo |
| * |
| * @param stackTrace |
| * - The StackTrace to add |
| */ |
| public void addStackTrace(StackTrace stackTrace) { |
| this.stackTraces.add(stackTrace); |
| } |
| |
| /** |
| * Add an array of stack traces to this DoiInfo |
| * |
| * @param stackTracesToAdd |
| * - The StackTraces to add |
| */ |
| public void addStackTraces(StackTrace[] stackTracesToAdd) { |
| for (StackTrace element : stackTracesToAdd) { |
| this.stackTraces.add(element); |
| } |
| } |
| |
| /** |
| * Get the name of the bug report |
| * |
| * @return The name of the bug report, max 20 characters |
| */ |
| public String getName() { |
| String description = hit.getSummary(); |
| int length = description.length(); |
| if (length > MAX_LABEL_LENGTH) { |
| description = description.substring(0, MAX_LABEL_LENGTH) + ".."; |
| } |
| return "bug " + hit.getTaskId() + ": " + description; |
| } |
| |
| public String getElementHandle() { |
| return hit.getRepositoryUrl() + ";" + hit.getTaskId(); |
| } |
| } |