Skip to content
This repository has been archived by the owner on Dec 6, 2024. It is now read-only.

Commit

Permalink
Add Document#storage for easier usage of the storage system
Browse files Browse the repository at this point in the history
  • Loading branch information
einrobin committed Aug 1, 2020
1 parent da3fda1 commit f582192
Show file tree
Hide file tree
Showing 8 changed files with 118 additions and 5 deletions.
18 changes: 18 additions & 0 deletions src/main/java/com/github/derrop/documents/DefaultDocument.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.github.derrop.documents;

import com.github.derrop.documents.storage.DocumentStorage;
import com.github.derrop.documents.storage.SpecificDocumentStorage;
import com.github.derrop.documents.storage.WrappedSpecificDocumentStorage;
import com.google.gson.*;
import com.google.gson.internal.bind.TypeAdapters;
import com.google.gson.stream.JsonReader;
Expand Down Expand Up @@ -721,6 +724,21 @@ public Character getChar(String key, Character def) {
return this.getChar(key);
}

@Override
public SpecificDocumentStorage json() {
return this.storage(Documents.jsonStorage());
}

@Override
public SpecificDocumentStorage yaml() {
return this.storage(Documents.yamlStorage());
}

@Override
public SpecificDocumentStorage storage(DocumentStorage storage) {
return new WrappedSpecificDocumentStorage(this, storage);
}

@Override
public JsonObject toJsonObject() {
return this.jsonObject;
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/com/github/derrop/documents/Document.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.github.derrop.documents;

import com.github.derrop.documents.storage.DocumentStorage;
import com.github.derrop.documents.storage.SpecificDocumentStorage;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
Expand Down Expand Up @@ -136,4 +138,10 @@ public interface Document {

Character getChar(String key, Character def);

SpecificDocumentStorage json();

SpecificDocumentStorage yaml();

SpecificDocumentStorage storage(DocumentStorage storage);

}
3 changes: 3 additions & 0 deletions src/main/java/com/github/derrop/documents/Documents.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.github.derrop.documents;

import com.github.derrop.documents.storage.DocumentStorage;
import com.github.derrop.documents.storage.JsonDocumentStorage;
import com.github.derrop.documents.storage.YamlDocumentStorage;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package com.github.derrop.documents;
package com.github.derrop.documents.storage;

import com.github.derrop.documents.Document;

import java.io.*;
import java.nio.charset.StandardCharsets;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.github.derrop.documents;
package com.github.derrop.documents.storage;

import com.github.derrop.documents.DefaultDocument;
import com.github.derrop.documents.Document;
import com.github.derrop.documents.Documents;
import com.google.gson.JsonParser;

import java.io.BufferedReader;
Expand All @@ -12,9 +15,9 @@ public void write(Document document, Writer writer) {
DefaultDocument.GSON.toJson(document.toJsonObject(), writer);
}

public DefaultDocument read(Reader reader) {
public Document read(Reader reader) {
try (BufferedReader bufferedReader = new BufferedReader(reader)) {
return new DefaultDocument().append(JsonParser.parseReader(bufferedReader).getAsJsonObject());
return Documents.newDocument(JsonParser.parseReader(bufferedReader).getAsJsonObject());
} catch (Exception ex) {
ex.getStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.github.derrop.documents.storage;

import com.github.derrop.documents.Document;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

public interface SpecificDocumentStorage {

Document document();

SpecificDocumentStorage write(OutputStream outputStream);

SpecificDocumentStorage write(File file);

SpecificDocumentStorage write(Path path);

String serializeToString();

SpecificDocumentStorage write(Writer writer);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.github.derrop.documents.storage;

import com.github.derrop.documents.Document;

import java.io.File;
import java.io.OutputStream;
import java.io.Writer;
import java.nio.file.Path;

public class WrappedSpecificDocumentStorage implements SpecificDocumentStorage {

private final DocumentStorage storage;
private final Document document;

public WrappedSpecificDocumentStorage(Document document, DocumentStorage storage) {
this.document = document;
this.storage = storage;
}

@Override
public Document document() {
return this.document;
}

@Override
public SpecificDocumentStorage write(OutputStream outputStream) {
this.storage.write(this.document, outputStream);
return this;
}

@Override
public SpecificDocumentStorage write(File file) {
this.storage.write(this.document, file);
return this;
}

@Override
public SpecificDocumentStorage write(Path path) {
this.storage.write(this.document, path);
return this;
}

@Override
public String serializeToString() {
return this.storage.toString(this.document);
}

@Override
public SpecificDocumentStorage write(Writer writer) {
this.storage.write(this.document, writer);
return this;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.github.derrop.documents;
package com.github.derrop.documents.storage;

import com.github.derrop.documents.DefaultDocument;
import com.github.derrop.documents.Document;
import com.google.gson.JsonElement;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
Expand Down

0 comments on commit f582192

Please sign in to comment.