Initial commit
This commit is contained in:
commit
e6b5e0cedb
402 files changed
+64931
No files matched your search
@@ -0,0 +1,74 @@
|
||||
package commanderailab.schema;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.*;
|
||||
|
||||
/**
|
||||
* JsonExporter — Serializes BatchResult to JSON files.
|
||||
*
|
||||
* Output conforms to batch-result-schema.json.
|
||||
*/
|
||||
public class JsonExporter {
|
||||
|
||||
private static final Gson GSON = new GsonBuilder()
|
||||
.setPrettyPrinting()
|
||||
.serializeNulls()
|
||||
.disableHtmlEscaping()
|
||||
.create();
|
||||
|
||||
/**
|
||||
* Serialize a BatchResult to a JSON string.
|
||||
*/
|
||||
public static String toJson(BatchResult result) {
|
||||
return GSON.toJson(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a BatchResult to a JSON file.
|
||||
*
|
||||
* @param result The batch result to export
|
||||
* @param filePath Output file path (e.g., "results/batch-20260306-001.json")
|
||||
* @throws IOException if file cannot be written
|
||||
*/
|
||||
public static void writeToFile(BatchResult result, String filePath) throws IOException {
|
||||
Path path = Paths.get(filePath);
|
||||
|
||||
// Ensure parent directories exist
|
||||
if (path.getParent() != null) {
|
||||
Files.createDirectories(path.getParent());
|
||||
}
|
||||
|
||||
String json = toJson(result);
|
||||
Files.writeString(path, json, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a BatchResult from a JSON file.
|
||||
*/
|
||||
public static BatchResult readFromFile(String filePath) throws IOException {
|
||||
String json = Files.readString(Paths.get(filePath), StandardCharsets.UTF_8);
|
||||
return GSON.fromJson(json, BatchResult.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a JSON string contains all required top-level keys.
|
||||
* (Lightweight validation — full JSON Schema validation would need a library.)
|
||||
*/
|
||||
public static boolean validateBasicStructure(String json) {
|
||||
try {
|
||||
BatchResult result = GSON.fromJson(json, BatchResult.class);
|
||||
return result.metadata != null
|
||||
&& result.decks != null && result.decks.size() == 3
|
||||
&& result.games != null
|
||||
&& result.summary != null
|
||||
&& result.metadata.schemaVersion.equals("1.0.0")
|
||||
&& result.metadata.podSize == 3;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user