Skip to content

Commit

Permalink
Add lazy wrappers around diagram generators to make server init more …
Browse files Browse the repository at this point in the history
…robust
  • Loading branch information
pepijnve committed Feb 10, 2024
1 parent bd5b58f commit 721132d
Show file tree
Hide file tree
Showing 22 changed files with 132 additions and 47 deletions.
8 changes: 1 addition & 7 deletions ditaa/src/main/java/org/asciidoctor/diagram/ditaa/Ditaa.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,12 @@
import java.util.ArrayList;
import java.util.Arrays;

public class Ditaa implements DiagramGenerator
public class Ditaa implements DiagramGeneratorFunction
{
public static final MimeType DEFAULT_OUTPUT_FORMAT = MimeType.PNG;
public static final MimeType DEFAULT_CONTENT_TYPE = MimeType.TEXT_PLAIN_UTF8;
public static final String DEFAULT_CHARSET = "UTF-8";

@Override
public String getName()
{
return "ditaa";
}

@Override
public ResponseData generate(Request request) throws IOException {
MimeType format = request.headers.getValue(HTTPHeader.ACCEPT);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.asciidoctor.diagram.ditaa;

import org.asciidoctor.diagram.DiagramGeneratorFunction;
import org.asciidoctor.diagram.LazyDiagramGenerator;

public class DitaaDiagramGenerator extends LazyDiagramGenerator {
public DitaaDiagramGenerator() {
super("ditaa");
}

@Override
protected DiagramGeneratorFunction createGenerator() throws Exception {
return new Ditaa();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.asciidoctor.diagram.ditaa.DitaaDiagramGenerator
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import java.util.ArrayList;
import java.util.List;

public class PlantUML implements DiagramGenerator
public class PlantUML implements DiagramGeneratorFunction
{
public static final String X_GRAPHVIZ = "X-Graphviz";
public static final String X_PLANT_UML_CONFIG = "X-PlantUML-Config";
Expand Down Expand Up @@ -80,12 +80,6 @@ public class PlantUML implements DiagramGenerator
}
}

@Override
public String getName()
{
return "plantuml";
}

@Override
public ResponseData generate(Request request) throws IOException {
File graphviz;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.asciidoctor.diagram.plantuml;

import org.asciidoctor.diagram.DiagramGeneratorFunction;
import org.asciidoctor.diagram.LazyDiagramGenerator;

public class PlantUMLDiagramGenerator extends LazyDiagramGenerator {
public PlantUMLDiagramGenerator() {
super("plantuml");
}

@Override
protected DiagramGeneratorFunction createGenerator() throws Exception {
return new PlantUML();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,10 @@
import java.util.List;
import java.util.stream.Collectors;

public class PlantUMLPreprocessor implements DiagramGenerator
public class PlantUMLPreprocessor implements DiagramGeneratorFunction
{
private static final MimeType DEFAULT_OUTPUT_FORMAT = MimeType.TEXT_PLAIN_UTF8;

@Override
public String getName()
{
return "plantumlpreprocessor";
}

@Override
public ResponseData generate(Request request) throws IOException {
MimeType format = request.headers.getValue(HTTPHeader.ACCEPT);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.asciidoctor.diagram.plantuml;

import org.asciidoctor.diagram.DiagramGeneratorFunction;
import org.asciidoctor.diagram.LazyDiagramGenerator;

public class PlantUMLPreprocessorDiagramGenerator extends LazyDiagramGenerator {
public PlantUMLPreprocessorDiagramGenerator() {
super("plantumlpreprocessor");
}

@Override
protected DiagramGeneratorFunction createGenerator() throws Exception {
return new PlantUMLPreprocessorDiagramGenerator();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
org.asciidoctor.diagram.plantuml.PlantUMLDiagramGenerator
org.asciidoctor.diagram.plantuml.PlantUMLPreprocessorDiagramGenerator
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package org.asciidoctor.diagram;

import java.io.IOException;

public interface DiagramGenerator {
public interface DiagramGenerator extends DiagramGeneratorFunction {
String getName();

ResponseData generate(Request request) throws IOException;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.asciidoctor.diagram;

import java.io.IOException;

public interface DiagramGeneratorFunction {
ResponseData generate(Request request) throws IOException;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.asciidoctor.diagram;

import java.io.IOException;

public abstract class LazyDiagramGenerator implements DiagramGenerator {
private final String name;
private DiagramGeneratorFunction diagramGeneratorFunction;
private IOException loadError;

public LazyDiagramGenerator(String name) {
this.name = name;
}

public String getName() {
return name;
}

protected abstract DiagramGeneratorFunction createGenerator() throws Exception;

public ResponseData generate(Request request) throws IOException {
if (loadError != null) {
throw loadError;
}

if (diagramGeneratorFunction == null) {
try {
diagramGeneratorFunction = createGenerator();
} catch (Exception e) {
loadError = new IOException(getName() + " is could not be initialised", e);
throw loadError;
}
}

return diagramGeneratorFunction.generate(request);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class SocketCommandServerTest {
public void testHTTPMessage() throws IOException {
ServerSocket serverSocket = new ServerSocket(0);
TestGenerator generator = new TestGenerator();
Map<String, DiagramGenerator> generators = new HashMap<>();
Map<String, DiagramGeneratorFunction> generators = new HashMap<>();
generators.put(generator.getName(), generator);
final SocketCommandServer server = new SocketCommandServer(serverSocket, generators);

Expand Down Expand Up @@ -62,7 +62,7 @@ public void run() {
public void testHTTPError() throws IOException {
ServerSocket serverSocket = new ServerSocket(0);
TestGenerator generator = new TestGenerator();
Map<String, DiagramGenerator> generators = new HashMap<>();
Map<String, DiagramGeneratorFunction> generators = new HashMap<>();
generators.put(generator.getName(), generator);
final SocketCommandServer server = new SocketCommandServer(serverSocket, generators);

Expand Down Expand Up @@ -103,7 +103,7 @@ public void run() {
assertEquals(MimeType.JSON_UTF8, response.headers.getValue(HTTPHeader.CONTENT_TYPE));
}

private static class TestGenerator implements DiagramGenerator
private static class TestGenerator implements DiagramGeneratorFunction
{
@Override
public String getName()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import java.util.List;
import java.util.stream.Stream;

public class Structurizr implements DiagramGenerator {
public class Structurizr implements DiagramGeneratorFunction {
@FunctionalInterface
interface ParseDsl {
void parse(StructurizrDslParser parser, String dsl, File file) throws StructurizrDslParserException;
Expand Down Expand Up @@ -93,12 +93,6 @@ static ParseDsl createParseDsl() {

private static final MimeType DEFAULT_OUTPUT_FORMAT = PLANTUML;

@Override
public String getName() {
return "structurizr";
}

@Override
public ResponseData generate(Request request) throws IOException {
MimeType format = request.headers.getValue(HTTPHeader.ACCEPT);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.asciidoctor.diagram.structurizr;

import org.asciidoctor.diagram.DiagramGeneratorFunction;
import org.asciidoctor.diagram.LazyDiagramGenerator;

public class StructurizrDiagramGenerator extends LazyDiagramGenerator {
public StructurizrDiagramGenerator() {
super("structurizr");
}

@Override
protected DiagramGeneratorFunction createGenerator() throws Exception {
return new Structurizr();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.asciidoctor.diagram.structurizr.StructurizrDiagramGenerator
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,9 @@
import static org.atpfivt.jsyntrax.Main.generateSVG;
import static org.atpfivt.jsyntrax.Main.getStyleConfig;

public class Syntrax implements DiagramGenerator {
public class Syntrax implements DiagramGeneratorFunction {
public static final MimeType DEFAULT_OUTPUT_FORMAT = MimeType.SVG;

@Override
public String getName() {
return "syntrax";
}

@Override
public ResponseData generate(Request request) throws IOException {
MimeType format = request.headers.getValue(HTTPHeader.ACCEPT);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.asciidoctor.diagram.syntrax;

import org.asciidoctor.diagram.DiagramGeneratorFunction;
import org.asciidoctor.diagram.LazyDiagramGenerator;

public class SyntraxDiagramGenerator extends LazyDiagramGenerator {
public SyntraxDiagramGenerator() {
super("syntrax");
}

@Override
protected DiagramGeneratorFunction createGenerator() throws Exception {
return new Syntrax();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.asciidoctor.diagram.syntrax.SyntraxDiagramGenerator

0 comments on commit 721132d

Please sign in to comment.