Copyright (c) 2000, 2015 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
James Blackburn (Broadcom Corp.) - ongoing development
Lars Vogel - Bug 473427
/*******************************************************************************
* Copyright (c) 2000, 2015 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
* James Blackburn (Broadcom Corp.) - ongoing development
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 473427
*******************************************************************************/
package org.eclipse.core.internal.resources;
import java.io.DataInputStream;
import java.io.IOException;
import org.eclipse.core.internal.utils.ObjectMap;
import org.eclipse.core.runtime.*;
public class SyncInfoSnapReader_3 extends SyncInfoSnapReader {
public SyncInfoSnapReader_3(Workspace workspace, Synchronizer synchronizer) {
super(workspace, synchronizer);
}
private ObjectMap<QualifiedName, Object> internalReadSyncInfo(DataInputStream input) throws IOException {
int size = input.readInt();
ObjectMap<QualifiedName, Object> map = new ObjectMap<>(size);
for (int i = 0; i < size; i++) {
// read the qualified name
String qualifier = input.readUTF();
String local = input.readUTF();
QualifiedName name = new QualifiedName(qualifier, local);
// read the bytes
int length = input.readInt();
byte[] bytes = new byte[length];
input.readFully(bytes);
// put them in the table
map.put(name, bytes);
}
return map;
}
SNAP_FILE -> [VERSION_ID RESOURCE]*
VERSION_ID -> int
RESOURCE -> RESOURCE_PATH SIZE SYNCINFO*
RESOURCE_PATH -> String
SIZE -> int
SYNCINFO -> QNAME BYTES
QNAME -> String String
BYTES -> byte[]
/**
* <pre> {@code
* SNAP_FILE -> [VERSION_ID RESOURCE]*
* VERSION_ID -> int
* RESOURCE -> RESOURCE_PATH SIZE SYNCINFO*
* RESOURCE_PATH -> String
* SIZE -> int
* SYNCINFO -> QNAME BYTES
* QNAME -> String String
* BYTES -> byte[]
* }</pre>
*/
@Override
public void readSyncInfo(DataInputStream input) throws IOException {
IPath path = new Path(input.readUTF());
ObjectMap<QualifiedName, Object> map = internalReadSyncInfo(input);
// set the table on the resource info
ResourceInfo info = workspace.getResourceInfo(path, true, false);
if (info == null)
return;
info.setSyncInfo(map);
info.clear(ICoreConstants.M_SYNCINFO_SNAP_DIRTY);
}
}