use of org.sirix.io.StorageType in project sirix by sirixdb.
the class ResourceConfiguration method deserialize.
/**
* Deserializing a Resource configuration from a JSON-file from the persistent storage.
*
* @param file where the resource lies in.
* @return a complete {@link ResourceConfiguration} instance
* @throws SirixIOException if an I/O error occurs
*/
public static ResourceConfiguration deserialize(final Path file) throws SirixIOException {
try {
final Path configFile = file.resolve(ResourcePaths.CONFIG_BINARY.getFile());
final FileReader fileReader = new FileReader(configFile.toFile());
final JsonReader jsonReader = new JsonReader(fileReader);
jsonReader.beginObject();
// Versioning.
String name = jsonReader.nextName();
assert name.equals(JSONNAMES[0]);
jsonReader.beginObject();
name = jsonReader.nextName();
assert name.equals(JSONNAMES[1]);
final Versioning revisioning = Versioning.valueOf(jsonReader.nextString());
name = jsonReader.nextName();
assert name.equals(JSONNAMES[2]);
final int revisionToRestore = jsonReader.nextInt();
jsonReader.endObject();
// ByteHandlers.
final List<ByteHandler> handlerList = new ArrayList<>();
name = jsonReader.nextName();
assert name.equals(JSONNAMES[3]);
jsonReader.beginArray();
while (jsonReader.hasNext()) {
final Class<?> handlerClazz = Class.forName(jsonReader.nextString());
final Constructor<?> handlerCons = handlerClazz.getConstructors()[0];
handlerList.add((ByteHandler) handlerCons.newInstance());
}
jsonReader.endArray();
final ByteHandlePipeline pipeline = new ByteHandlePipeline(handlerList.toArray(new ByteHandler[handlerList.size()]));
// Storage type.
name = jsonReader.nextName();
assert name.equals(JSONNAMES[4]);
final StorageType storage = StorageType.valueOf(jsonReader.nextString());
// Hashing type.
name = jsonReader.nextName();
assert name.equals(JSONNAMES[5]);
final HashKind hashing = HashKind.valueOf(jsonReader.nextString());
// Text compression.
name = jsonReader.nextName();
assert name.equals(JSONNAMES[6]);
final boolean compression = jsonReader.nextBoolean();
// Path summary.
name = jsonReader.nextName();
assert name.equals(JSONNAMES[7]);
final boolean pathSummary = jsonReader.nextBoolean();
// Unique ID.
name = jsonReader.nextName();
assert name.equals(JSONNAMES[8]);
final int ID = jsonReader.nextInt();
name = jsonReader.nextName();
assert name.equals(JSONNAMES[9]);
final boolean deweyIDsStored = jsonReader.nextBoolean();
name = jsonReader.nextName();
assert name.equals(JSONNAMES[10]);
final Class<?> persistenterClazz = Class.forName(jsonReader.nextString());
final Constructor<?> persistenterConstr = persistenterClazz.getConstructors()[0];
final RecordPersistenter persistenter = (RecordPersistenter) persistenterConstr.newInstance();
jsonReader.endObject();
jsonReader.close();
fileReader.close();
// Deserialize database config.
final DatabaseConfiguration dbConfig = DatabaseConfiguration.deserialize(file.getParent().getParent());
// Builder.
final ResourceConfiguration.Builder builder = new ResourceConfiguration.Builder(file.getFileName().toString(), dbConfig);
builder.byteHandlerPipeline(pipeline).hashKind(hashing).versioningApproach(revisioning).revisionsToRestore(revisionToRestore).storageType(storage).persistenter(persistenter).useTextCompression(compression).buildPathSummary(pathSummary).useDeweyIDs(deweyIDsStored);
// Deserialized instance.
final ResourceConfiguration config = new ResourceConfiguration(builder);
return config.setID(ID);
} catch (IOException | ClassNotFoundException | IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
throw new SirixIOException(e);
}
}
Aggregations