/******************************************************************************* * 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; import org.eclipse.core.runtime.IPath; /** * A <code>NoDataDeltaNode</code>is a node in a delta tree whose subtree contains differences since * the delta's parent. Refer to the <code>DeltaDataTree</code> API and class comment for details. * * @see DeltaDataTree */ public class NoDataDeltaNode extends AbstractDataTreeNode { /** * Creates a new empty delta. */ public NoDataDeltaNode(String name) { this(name, NO_CHILDREN); } /** * Creates a new data tree node * * @param name name of new node * @param children children of the new node */ public NoDataDeltaNode(String name, AbstractDataTreeNode[] children) { super(name, children); } /** * Creates a new data tree node * * @param localName name of new node * @param childNode single child for new node */ NoDataDeltaNode(String localName, AbstractDataTreeNode childNode) { super(localName, new AbstractDataTreeNode[] { childNode }); } /** * @see AbstractDataTreeNode#asBackwardDelta(DeltaDataTree, DeltaDataTree, IPath) */ AbstractDataTreeNode asBackwardDelta(DeltaDataTree myTree, DeltaDataTree parentTree, IPath key) { int numChildren= children.length; if (numChildren == 0) return new NoDataDeltaNode(name, NO_CHILDREN); AbstractDataTreeNode[] newChildren= new AbstractDataTreeNode[numChildren]; for (int i= numChildren; --i >= 0;) { newChildren[i]= children[i].asBackwardDelta(myTree, parentTree, key.append(children[i].getName())); } return new NoDataDeltaNode(name, newChildren); } /** * @see AbstractDataTreeNode#compareWithParent(IPath, DeltaDataTree, IComparator) */ AbstractDataTreeNode compareWithParent(IPath key, DeltaDataTree parent, IComparator comparator) { AbstractDataTreeNode[] comparedChildren= compareWithParent(children, key, parent, comparator); Object oldData= parent.getData(key); return new DataTreeNode(key.lastSegment(), new NodeComparison(oldData, oldData, NodeComparison.K_CHANGED, 0), comparedChildren); } /** * Creates and returns a new copy of the receiver. Makes a deep copy of children, but a shallow * copy of name and data. */ AbstractDataTreeNode copy() { AbstractDataTreeNode[] childrenCopy; if (children.length == 0) { childrenCopy= NO_CHILDREN; } else { childrenCopy= new AbstractDataTreeNode[children.length]; System.arraycopy(children, 0, childrenCopy, 0, children.length); } return new NoDataDeltaNode(name, childrenCopy); } /** * Returns true if the receiver represents delta information, false if it represents the * complete information. */ boolean isDelta() { return true; } /** * Returns true if the receiver is an empty delta node, false otherwise. */ boolean isEmptyDelta() { return this.size() == 0; } /** * Simplifies the given node, and returns its replacement. */ AbstractDataTreeNode simplifyWithParent(IPath key, DeltaDataTree parent, IComparator comparer) { AbstractDataTreeNode[] simplifiedChildren= simplifyWithParent(children, key, parent, comparer); return new NoDataDeltaNode(name, simplifiedChildren); } /** * Returns a unicode representation of the node. This method is used for debugging purposes only * (no NLS support needed) */ public String toString() { return "a NoDataDeltaNode(" + this.getName() + ") with " + getChildren().length + " children."; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } /** * Return a constant describing the type of node. */ int type() { return T_NO_DATA_DELTA_NODE; } }