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