/******************************************************************************* * Copyright (c) 2000, 2005 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.core.internal.dtree; /** * This class represents the changes in a single node between two data trees. */ public final class NodeComparison { /** * The data of the old tree */ private Object oldData; /** * The data of the new tree */ private Object newData; /** * Integer describing changes between two data elements */ private int comparison; /** * Extra integer that can be assigned by the client */ private int userInt; /** * Special bits in the comparison flag to indicate the type of change */ public final static int K_ADDED= 1; public final static int K_REMOVED= 2; public final static int K_CHANGED= 4; NodeComparison(Object oldData, Object newData, int realComparison, int userComparison) { this.oldData= oldData; this.newData= newData; this.comparison= realComparison; this.userInt= userComparison; } /** * Reverse the nature of the comparison. */ NodeComparison asReverseComparison(IComparator comparator) { /* switch the data */ Object tempData= oldData; oldData= newData; newData= tempData; /* re-calculate user comparison */ userInt= comparator.compare(oldData, newData); if (comparison == K_ADDED) { comparison= K_REMOVED; } else { if (comparison == K_REMOVED) { comparison= K_ADDED; } } return this; } /** * Returns an integer describing the changes between the two data objects. The four possible * values are K_ADDED, K_REMOVED, K_CHANGED, or 0 representing no change. */ public int getComparison() { return comparison; } /** * Returns the data of the new node. */ public Object getNewData() { return newData; } /** * Returns the data of the old node. */ public Object getOldData() { return oldData; } /** * Returns the client specified integer */ public int getUserComparison() { return userInt; } /** * Returns true if this comparison has no change, and false otherwise. */ boolean isUnchanged() { return userInt == 0; } /** * For debugging */ public String toString() { StringBuffer buf= new StringBuffer("NodeComparison("); //$NON-NLS-1$ switch (comparison) { case K_ADDED: buf.append("Added, "); //$NON-NLS-1$ break; case K_REMOVED: buf.append("Removed, "); //$NON-NLS-1$ break; case K_CHANGED: buf.append("Changed, "); //$NON-NLS-1$ break; case 0: buf.append("No change, "); //$NON-NLS-1$ break; default: buf.append("Corrupt(" + comparison + "), "); //$NON-NLS-1$ //$NON-NLS-2$ } buf.append(userInt); buf.append(")"); //$NON-NLS-1$ return buf.toString(); } }