Copyright (c) 2000, 2014 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
Francis Lynch (Wind River) - [305718] Allow reading snapshot into renamed project
/*******************************************************************************
* Copyright (c) 2000, 2014 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Francis Lynch (Wind River) - [305718] Allow reading snapshot into renamed project
*******************************************************************************/
package org.eclipse.core.internal.watson;
import java.io.DataInput;
import java.io.IOException;
import org.eclipse.core.internal.dtree.DeltaDataTree;
ElementTreeReader_1
is an implementation
of the ElementTreeReader
for format version 1.
Instances of this reader read only format 1
of a saved element tree (they do not deal with
compatibility issues).
See Also: - ElementTreeReader
/** <code>ElementTreeReader_1</code> is an implementation
* of the <code>ElementTreeReader</code> for format version 1.
*
* <p>Instances of this reader read only format 1
* of a saved element tree (they do not deal with
* compatibility issues).
*
* @see ElementTreeReader
*/
/* package */class ElementTreeReaderImpl_1 extends ElementTreeReader {
Constructs a new element tree reader that works for
the given element info factory.
/**
* Constructs a new element tree reader that works for
* the given element info factory.
*/
ElementTreeReaderImpl_1(IElementInfoFlattener factory) {
super(factory);
}
Reads an element tree delta from the input stream, and
reconstructs it as a delta on the given tree.
/**
* Reads an element tree delta from the input stream, and
* reconstructs it as a delta on the given tree.
*/
@Override
public ElementTree readDelta(ElementTree parentTree, DataInput input) throws IOException {
DeltaDataTree complete = parentTree.getDataTree();
DeltaDataTree delta = dataTreeReader.readTree(complete, input, ""); //$NON-NLS-1$
//if the delta is empty, just return the parent
if (delta.isEmptyDelta())
return parentTree;
ElementTree tree = new ElementTree(delta);
//copy the user data forward
IElementTreeData data = parentTree.getTreeData();
if (data != null) {
tree.setTreeData((IElementTreeData) data.clone());
}
//make the underlying data tree immutable
//can't call immutable() on the ElementTree because
//this would attempt to reroot.
delta.immutable();
return tree;
}
@Override
public ElementTree[] readDeltaChain(DataInput input, String newProjectName) throws IOException {
/* read the number of trees */
int treeCount = readNumber(input);
ElementTree[] results = new ElementTree[treeCount];
if (treeCount <= 0) {
return results;
}
/* read the sort order */
int[] order = new int[treeCount];
for (int i = 0; i < treeCount; i++) {
order[i] = readNumber(input);
}
/* read the complete tree */
results[order[0]] = super.readTree(input, newProjectName);
/* reconstitute each of the remaining trees from their written deltas */
for (int i = 1; i < treeCount; i++) {
results[order[i]] = super.readDelta(results[order[i - 1]], input);
}
return results;
}
@Override
public ElementTree readTree(DataInput input, String newProjectName) throws IOException {
/* The format version number has already been consumed
* by ElementTreeReader#readFrom.
*/
ElementTree result = new ElementTree(dataTreeReader.readTree(null, input, newProjectName));
return result;
}
}