use of org.sirix.exception.SirixIOException in project sirix by sirixdb.
the class ResourceConfiguration method serialize.
/**
* Serialize the configuration.
*
* @param config configuration to serialize
* @throws SirixIOException if an I/O error occurs
*/
public static void serialize(final ResourceConfiguration config) throws SirixIOException {
final Path configFile = config.getConfigFile();
try (final FileWriter fileWriter = new FileWriter(configFile.toFile());
final JsonWriter jsonWriter = new JsonWriter(fileWriter)) {
jsonWriter.beginObject();
// Versioning.
jsonWriter.name(JSONNAMES[0]);
jsonWriter.beginObject();
jsonWriter.name(JSONNAMES[1]).value(config.mRevisionKind.name());
jsonWriter.name(JSONNAMES[2]).value(config.mRevisionsToRestore);
jsonWriter.endObject();
// ByteHandlers.
final ByteHandlePipeline byteHandler = config.mByteHandler;
jsonWriter.name(JSONNAMES[3]);
jsonWriter.beginArray();
for (final ByteHandler handler : byteHandler.getComponents()) {
jsonWriter.value(handler.getClass().getName());
}
jsonWriter.endArray();
// Storage type.
jsonWriter.name(JSONNAMES[4]).value(config.mStorage.name());
// Hashing type.
jsonWriter.name(JSONNAMES[5]).value(config.mHashKind.name());
// Text compression.
jsonWriter.name(JSONNAMES[6]).value(config.mCompression);
// Path summary.
jsonWriter.name(JSONNAMES[7]).value(config.mPathSummary);
// ID.
jsonWriter.name(JSONNAMES[8]).value(config.mID);
// Dewey IDs stored or not.
jsonWriter.name(JSONNAMES[9]).value(config.mDeweyIDsStored);
// Persistenter.
jsonWriter.name(JSONNAMES[10]).value(config.mPersistenter.getClass().getName());
jsonWriter.endObject();
} catch (final IOException e) {
throw new SirixIOException(e);
}
// Database config.
DatabaseConfiguration.serialize(config.mDBConfig);
}
use of org.sirix.exception.SirixIOException 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