blob: abc8f9871923f3bc08026f79426afd60cd202a33 [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.bugzilla.deprecated;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import org.eclipse.compare.IStreamContentAccessor;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.IStructureComparator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaAttribute;
import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
import org.eclipse.mylyn.internal.tasks.core.deprecated.TaskComment;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
/**
* A node for the tree used to compare bugs in the compare viewer.
*
* @author Rob Elves
*/
public class BugzillaCompareNode implements IStreamContentAccessor, IStructureComparator, ITypedElement {
/** The label for this piece of data. */
private String key;
/** The data for this node. */
private String value;
/** The children of this node. */
private ArrayList<BugzillaCompareNode> nodeChildren;
/** This node's image. */
private Image image;
/**
* Constructor. The image for this node is set to <code>null</code>.
*
* @param key
* The label for this node.
* @param value
* The data for this node.
*/
public BugzillaCompareNode(String key, String value) {
this(key, value, null);
}
/**
* Constructor.
*
* @param key
* The label for this node.
* @param value
* The data for this node.
* @param image
* The image for this node.
*/
public BugzillaCompareNode(String key, String value, Image image) {
super();
this.key = key;
this.value = checkText(value);
this.nodeChildren = null;
this.image = image;
}
/**
* This function checks to make sure the given string is not <code>null</code>. If it is, the empty string is
* returned instead.
*
* @param newValue
* The string to be checked.
* @return If the text is <code>null</code>, then return the null string (<code>""</code>). Otherwise, return the
* text.
*/
private String checkText(String newValue) {
return ((newValue == null) ? "" : newValue);
}
public Object[] getChildren() {
return (nodeChildren == null) ? new Object[0] : nodeChildren.toArray();
}
/**
* Adds a node to this node's list of children.
*
* @param bugNode
* The new child.
*/
public void addChild(BugzillaCompareNode bugNode) {
if (nodeChildren == null) {
nodeChildren = new ArrayList<BugzillaCompareNode>();
}
nodeChildren.add(bugNode);
}
public InputStream getContents() throws CoreException {
return new ByteArrayInputStream(getValue().getBytes());
}
/**
* @return The label for this node.
*/
public String getKey() {
return key;
}
/**
* Set the label for this node.
*
* @param key
* The new label.
*/
public void setKey(String key) {
this.key = key;
}
/**
* @return The data for this node.
*/
public String getValue() {
return value;
}
/**
* Set the data for this node.
*
* @param value
* The new data.
*/
public void setValue(String value) {
this.value = checkText(value);
}
public Image getImage() {
return image;
}
/**
* Sets the image for this object. This image is used when displaying this object in the UI.
*
* @param newImage
* The new image.
*/
public void setImage(Image newImage) {
this.image = newImage;
}
@Override
public boolean equals(Object arg0) {
if (arg0 instanceof BugzillaCompareNode) {
BugzillaCompareNode bugNode = (BugzillaCompareNode) arg0;
return getKey().equals(bugNode.getKey());
}
return super.equals(arg0);
}
@Override
public int hashCode() {
return getKey().hashCode();
}
public String getName() {
return getKey();
}
public String getType() {
return "bug report";
}
/**
* Parses the given <code>BugReport</code> into a tree of <code>BugzillaCompareNode</code>'s suitable for use in a
* compare viewer.
*
* @param bug
* The <code>BugReport</code> that needs parsing.
* @return The tree of <code>BugzillaCompareNode</code>'s.
*/
public static BugzillaCompareNode parseBugReport(RepositoryTaskData bug) {
Image defaultImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_DEF_VIEW);
BugzillaCompareNode topNode = new BugzillaCompareNode("Bug #" + bug.getTaskId(), null, defaultImage);
Image attributeImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
BugzillaCompareNode attributes = new BugzillaCompareNode("Attributes", null, attributeImage);
for (RepositoryTaskAttribute attribute : bug.getAttributes()) {
BugzillaCompareNode child = new BugzillaCompareNode(attribute.toString(), attribute.getValue(),
defaultImage);
attributes.addChild(child);
}
BugzillaCompareNode comments = new BugzillaCompareNode("Comments", null, defaultImage);
for (TaskComment taskComment : bug.getComments()) {
String bodyString = "Comment from " + taskComment.getAuthorName() + ":\n\n" + taskComment.getText();
comments.addChild(new BugzillaCompareNode(
taskComment.getAttributeValue(BugzillaAttribute.BUG_WHEN.getKey()), bodyString, defaultImage));
}
topNode.addChild(comments);
topNode.addChild(new BugzillaCompareNode("New Comment", bug.getNewComment(), defaultImage));
BugzillaCompareNode ccList = new BugzillaCompareNode("CC List", null, defaultImage);
for (String cc : bug.getCc()) {
ccList.addChild(new BugzillaCompareNode("CC", cc, defaultImage));
}
topNode.addChild(ccList);
BugzillaCompareNode titleNode = new BugzillaCompareNode("BugReport Object", null, defaultImage);
titleNode.addChild(topNode);
return titleNode;
}
// public static BugzillaCompareNode parseBugReport(BugzillaReport bug) {
// Image defaultImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_DEF_VIEW);
// BugzillaCompareNode topNode = new BugzillaCompareNode("Bug #" + bug.getId(), null, defaultImage);
// Date creationDate = bug.getCreated();
// if (creationDate == null) {
// // XXX: this could be backwards
// creationDate = Calendar.getInstance().getTime();
// }
// BugzillaCompareNode child = new BugzillaCompareNode("Creation Date", creationDate.toString(), defaultImage);
// topNode.addChild(child);
//
// String keywords = "";
// if (bug.getKeywords() != null) {
// for (Iterator<String> iter = bug.getKeywords().iterator(); iter.hasNext();) {
// keywords += iter.next() + " ";
// }
// }
// topNode.addChild(new BugzillaCompareNode("Keywords", keywords, defaultImage));
//
// Image attributeImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
// BugzillaCompareNode attributes = new BugzillaCompareNode("Attributes", null, attributeImage);
// for (Iterator<RepositoryTaskAttribute> iter = bug.getAttributes().iterator(); iter.hasNext();) {
// RepositoryTaskAttribute attribute = iter.next();
// if (attribute.getName().compareTo("delta_ts") == 0 || attribute.getName().compareTo("Last Modified") == 0
// || attribute.getName().compareTo("longdesclength") == 0)
// continue;
// // Since the bug report may not be saved offline, get the
// // attribute's new
// // value, which is what is in the submit viewer.
//
// attributes.addChild(new BugzillaCompareNode(attribute.getName(), attribute.getValue(), attributeImage));
// }
// topNode.addChild(attributes);
//
// topNode.addChild(new BugzillaCompareNode("Description", bug.getDescription(), defaultImage));
//
// BugzillaCompareNode comments = new BugzillaCompareNode("Comments", null, defaultImage);
// for (Iterator<Comment> iter = bug.getComments().iterator(); iter.hasNext();) {
// Comment comment = iter.next();
// String bodyString = "Comment from " + comment.getAuthorName() + ":\n\n" + comment.getText();
// comments.addChild(new BugzillaCompareNode(comment.getAttributeValue(BugzillaReportElement.CREATION_TS), bodyString, defaultImage));
// }
// topNode.addChild(comments);
//
// topNode.addChild(new BugzillaCompareNode("New Comment", bug.getNewComment(), defaultImage));
//
// BugzillaCompareNode ccList = new BugzillaCompareNode("CC List", null, defaultImage);
// for (Iterator<String> iter = bug.getCC().iterator(); iter.hasNext();) {
// String cc = iter.next();
// ccList.addChild(new BugzillaCompareNode("CC", cc, defaultImage));
// }
// topNode.addChild(ccList);
//
// BugzillaCompareNode titleNode = new BugzillaCompareNode("BugReport Object", null, defaultImage);
// titleNode.addChild(topNode);
//
// return titleNode;
// }
}