Search in sources :

Example 1 with RecordPersistenter

use of org.sirix.node.interfaces.RecordPersistenter 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);
    }
}
Also used : ArrayList(java.util.ArrayList) HashKind(org.sirix.access.HashKind) ByteHandler(org.sirix.io.bytepipe.ByteHandler) SirixIOException(org.sirix.exception.SirixIOException) JsonReader(com.google.gson.stream.JsonReader) FileReader(java.io.FileReader) ByteHandlePipeline(org.sirix.io.bytepipe.ByteHandlePipeline) Path(java.nio.file.Path) StorageType(org.sirix.io.StorageType) SirixIOException(org.sirix.exception.SirixIOException) IOException(java.io.IOException) InvocationTargetException(java.lang.reflect.InvocationTargetException) Versioning(org.sirix.settings.Versioning) RecordPersistenter(org.sirix.node.interfaces.RecordPersistenter)

Aggregations

JsonReader (com.google.gson.stream.JsonReader)1 FileReader (java.io.FileReader)1 IOException (java.io.IOException)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Path (java.nio.file.Path)1 ArrayList (java.util.ArrayList)1 HashKind (org.sirix.access.HashKind)1 SirixIOException (org.sirix.exception.SirixIOException)1 StorageType (org.sirix.io.StorageType)1 ByteHandlePipeline (org.sirix.io.bytepipe.ByteHandlePipeline)1 ByteHandler (org.sirix.io.bytepipe.ByteHandler)1 RecordPersistenter (org.sirix.node.interfaces.RecordPersistenter)1 Versioning (org.sirix.settings.Versioning)1