Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java86
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);
+ }
+ }
+
+}

Back to the top