/*******************************************************************************
 * Copyright (c) 2005, 2006 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.ltk.internal.ui.refactoring.history;

import org.eclipse.ltk.core.refactoring.RefactoringDescriptorProxy;

/**
 * Refactoring entry of a refactoring history.
 * 
 * @since 3.2
 */
public final class RefactoringHistoryEntry extends RefactoringHistoryNode {

	/** The refactoring descriptor proxy */
	private final RefactoringDescriptorProxy fDescriptorProxy;

	/** The parent node, or <code>null</code> */
	private final RefactoringHistoryNode fParent;

	/**
	 * Creates a new refactoring history entry.
	 * 
	 * @param parent
	 *            the parent node, or <code>null</code>
	 * @param proxy
	 *            the refactoring descriptor proxy
	 */
	public RefactoringHistoryEntry(final RefactoringHistoryNode parent, final RefactoringDescriptorProxy proxy) {
		fParent= parent;
		fDescriptorProxy= proxy;
	}

	/**
	 * {@inheritDoc}
	 */
	public boolean equals(final Object object) {
		if (object instanceof RefactoringHistoryEntry) {
			final RefactoringHistoryEntry entry= (RefactoringHistoryEntry) object;
			return getDescriptor().equals(entry.getDescriptor());
		}
		return false;
	}

	/**
	 * Returns the refactoring descriptor.
	 * 
	 * @return the refactoring descriptor
	 */
	public RefactoringDescriptorProxy getDescriptor() {
		return fDescriptorProxy;
	}

	/**
	 * {@inheritDoc}
	 */
	public int getKind() {
		return RefactoringHistoryNode.ENTRY;
	}

	/**
	 * {@inheritDoc}
	 */
	public RefactoringHistoryNode getParent() {
		return fParent;
	}

	/**
	 * {@inheritDoc}
	 */
	public int hashCode() {
		return getDescriptor().hashCode();
	}
}
