/******************************************************************************* * 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); } } }