com.structurizr.util.WorkspaceUtils Maven / Gradle / Ivy
package com.structurizr.util;
import com.structurizr.Workspace;
import com.structurizr.io.json.JsonReader;
import com.structurizr.io.json.JsonWriter;
import java.io.*;
import java.nio.charset.StandardCharsets;
/**
* Some utility methods related to workspaces.
*/
public final class WorkspaceUtils {
/**
* Loads a workspace from a JSON definition saved as a file.
*
* @param file a File representing the JSON definition
* @return a Workspace object
* @throws Exception if something goes wrong
*/
public static Workspace loadWorkspaceFromJson(File file) throws Exception {
if (file == null) {
throw new IllegalArgumentException("The path to a JSON file must be specified.");
} else if (!file.exists()) {
throw new IllegalArgumentException("The specified JSON file does not exist.");
}
return new JsonReader().read(new FileReader(file));
}
/**
* Saves a workspace to a JSON definition as a file.
*
* @param workspace a Workspace object
* @param file a File representing the JSON definition
* @throws Exception if something goes wrong
*/
public static void saveWorkspaceToJson(Workspace workspace, File file) throws Exception {
if (workspace == null) {
throw new IllegalArgumentException("A workspace must be provided.");
} else if (file == null) {
throw new IllegalArgumentException("The path to a JSON file must be specified.");
}
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
new JsonWriter(true).write(workspace, writer);
writer.flush();
writer.close();
}
/**
* Prints a workspace as JSON to stdout - useful for debugging purposes.
*
* @param workspace the workspace to print
*/
public static void printWorkspaceAsJson(Workspace workspace) {
if (workspace == null) {
throw new IllegalArgumentException("A workspace must be provided.");
}
try {
System.out.println(toJson(workspace, true));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Serializes the specified workspace to a JSON string.
*
* @param workspace a Workspace instance
* @param indentOutput whether to indent the output (prettify)
* @return a JSON string
* @throws Exception if something goes wrong
*/
public static String toJson(Workspace workspace, boolean indentOutput) throws Exception {
if (workspace == null) {
throw new IllegalArgumentException("A workspace must be provided.");
}
JsonWriter jsonWriter = new JsonWriter(indentOutput);
StringWriter stringWriter = new StringWriter();
jsonWriter.write(workspace, stringWriter);
stringWriter.flush();
stringWriter.close();
return stringWriter.toString();
}
/**
* Converts the specified JSON string to a Workspace instance.
*
* @param json the JSON definition of the workspace
* @return a Workspace instance
* @throws Exception if the JSON can not be deserialized
*/
public static Workspace fromJson(String json) throws Exception {
if (json == null || json.trim().length() == 0) {
throw new IllegalArgumentException("A JSON string must be provided.");
}
StringReader stringReader = new StringReader(json);
return new JsonReader().read(stringReader);
}
}