diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/compare/TaskDataDiffNode.java')
-rw-r--r-- | org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/compare/TaskDataDiffNode.java | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/compare/TaskDataDiffNode.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/compare/TaskDataDiffNode.java new file mode 100644 index 000000000..5d0100896 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/compare/TaskDataDiffNode.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 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.tasks.ui.compare; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import org.eclipse.compare.IStreamContentAccessor; +import org.eclipse.compare.ITypedElement; +import org.eclipse.compare.structuremergeviewer.DiffNode; +import org.eclipse.compare.structuremergeviewer.Differencer; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.mylyn.internal.tasks.core.data.TaskAttributeDiff; +import org.eclipse.mylyn.internal.tasks.core.data.TaskDataDiff; +import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; +import org.eclipse.mylyn.tasks.core.ITaskComment; +import org.eclipse.mylyn.tasks.core.data.ITaskAttributeDiff; +import org.eclipse.mylyn.tasks.core.data.TaskData; +import org.eclipse.swt.graphics.Image; + +/** + * A model element for comparing two {@link TaskData} objects. + * + * @author Steffen Pingel + */ +public class TaskDataDiffNode extends DiffNode { + + static class ByteArrayInput implements ITypedElement, IStreamContentAccessor { + + String content; + + private final String name; + + public ByteArrayInput(String content, String name) { + this.content = content; + this.name = name; + } + + public String getName() { + return name; + } + + public Image getImage() { + return null; + } + + public String getType() { + return ITypedElement.TEXT_TYPE; + } + + public InputStream getContents() throws CoreException { + return new ByteArrayInputStream(content.getBytes()); + } + + } + + public TaskDataDiffNode(int change, TaskData oldData, TaskData newData) { + super(change); + TaskDataDiff diff = new TaskDataDiff(TasksUiPlugin.getRepositoryModel(), newData, oldData); + for (ITaskAttributeDiff attribute : diff.getChangedAttributes()) { + TaskAttributeDiff attr = (TaskAttributeDiff) attribute; + String label = attr.getLabel(); + if (label.endsWith(":")) { //$NON-NLS-1$ + label = label.substring(0, label.length() - 1); + } + DiffNode node = new DiffNode(Differencer.CHANGE, this, new ByteArrayInput(attr.getOldValues().toString(), + null), new ByteArrayInput(attr.getNewValues().toString(), label)); + add(node); + } + for (ITaskComment attribute : diff.getNewComments()) { + DiffNode node = new DiffNode(Differencer.CHANGE, this, new ByteArrayInput("", null), new ByteArrayInput( //$NON-NLS-1$ + attribute.getText(), Messages.TaskDataDiffNode_New_Comment_Label)); + add(node); + } + } + +} |