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 3904aad
Show file tree
Hide file tree
Showing 18 changed files with 135 additions and 45 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();
}
}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
org.asciidoctor.diagram.ditaa.Ditaa
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();
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
org.asciidoctor.diagram.plantuml.PlantUML
org.asciidoctor.diagram.plantuml.PlantUMLPreprocessor
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,41 @@
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 (Throwable e) {
String message = getName() + " could not be initialised due to " + e.getClass().getSimpleName();
if (e.getMessage() != null) {
message += ": " + e.getMessage();
}
loadError = new IOException(message);
loadError.setStackTrace(e.getStackTrace());
throw loadError;
}
}

return diagramGeneratorFunction.generate(request);
}
}
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();
}
}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
org.asciidoctor.diagram.structurizr.Structurizr
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();
}
}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
org.asciidoctor.diagram.syntrax.Syntrax
org.asciidoctor.diagram.syntrax.SyntraxDiagramGenerator
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public static void setUP() {

@Test
public void testTestGetName() {
org.junit.Assert.assertEquals("syntrax", new Syntrax().getName());
org.junit.Assert.assertEquals("syntrax", new SyntraxDiagramGenerator().getName());
}

@Test
Expand Down

0 comments on commit 3904aad

Please sign in to comment.