
org.eclipse.compare.internal.patch.PatchFileDiffNode Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.compare Show documentation
Show all versions of org.eclipse.compare Show documentation
This is org.eclipse.compare jar used by Scout SDK
The newest version!
/*******************************************************************************
* Copyright (c) 2006, 2011 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.compare.internal.patch;
import org.eclipse.compare.IContentChangeListener;
import org.eclipse.compare.IContentChangeNotifier;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.internal.core.patch.FileDiffResult;
import org.eclipse.compare.internal.core.patch.FilePatch2;
import org.eclipse.compare.patch.PatchConfiguration;
import org.eclipse.compare.structuremergeviewer.DiffNode;
import org.eclipse.compare.structuremergeviewer.Differencer;
import org.eclipse.compare.structuremergeviewer.IDiffContainer;
import org.eclipse.compare.structuremergeviewer.IDiffElement;
import org.eclipse.core.resources.IResource;
public class PatchFileDiffNode extends PatchDiffNode implements IContentChangeListener {
private final FileDiffResult result;
public static PatchFileDiffNode createDiffNode(DiffNode parent, FileDiffResult result) {
return new PatchFileDiffNode(result, parent, getKind(result), getAncestorElement(result), getLeftElement(result), getRightElement(result));
}
public static int getKind(FileDiffResult result) {
if (!result.hasMatches())
return Differencer.NO_CHANGE;
int fileDiffKind = result.getDiff().getDiffType(result.getConfiguration().isReversed());
int kind = convertFileDiffTypeToDifferencerType(fileDiffKind);
return kind | Differencer.RIGHT;
}
private static int convertFileDiffTypeToDifferencerType(int fileDiffKind) {
int kind;
switch (fileDiffKind) {
case FilePatch2.ADDITION:
kind = Differencer.ADDITION;
break;
case FilePatch2.DELETION:
kind = Differencer.DELETION;
break;
case FilePatch2.CHANGE:
kind = Differencer.CHANGE;
break;
default:
kind = Differencer.CHANGE;
break;
}
return kind;
}
public static ITypedElement getRightElement(FileDiffResult result) {
return new PatchFileTypedElement(result, true);
}
private static ITypedElement getLeftElement(FileDiffResult result) {
return new PatchFileTypedElement(result, false);
}
public static ITypedElement getAncestorElement(FileDiffResult result) {
return new PatchFileTypedElement(result, false);
}
public PatchFileDiffNode(FileDiffResult result, IDiffContainer parent, int kind,
ITypedElement ancestor, ITypedElement left, ITypedElement right) {
super(result.getDiff(), parent, kind, ancestor, left, right);
this.result = result;
}
public FileDiffResult getDiffResult() {
return result;
}
protected PatchConfiguration getConfiguration() {
return result.getConfiguration();
}
/* (non-Javadoc)
* @see org.eclipse.compare.structuremergeviewer.DiffContainer#add(org.eclipse.compare.structuremergeviewer.IDiffElement)
*/
public void add(IDiffElement diff) {
super.add(diff);
// Listen for content changes in unmatched children so we can fire an input change
if (diff instanceof HunkDiffNode) {
HunkDiffNode node = (HunkDiffNode) diff;
Object left = node.getLeft();
if (left instanceof IContentChangeNotifier) {
IContentChangeNotifier notifier = (IContentChangeNotifier) left;
notifier.addContentChangeListener(this);
}
}
}
/* (non-Javadoc)
* @see org.eclipse.compare.IContentChangeListener#contentChanged(org.eclipse.compare.IContentChangeNotifier)
*/
public void contentChanged(IContentChangeNotifier source) {
fireChange();
}
public int getKind() {
int kind = super.getKind();
if (kind == Differencer.NO_CHANGE && getPatcher().hasCachedContents(getDiffResult().getDiff())) {
return Differencer.CHANGE | Differencer.RIGHT;
}
return kind;
}
public boolean fileExists() {
IResource file = getResource();
return file != null && file.isAccessible();
}
public IResource getResource() {
return ((WorkspaceFileDiffResult)getDiffResult()).getTargetFile();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy