mirror of
https://github.com/octoleo/plantuml.git
synced 2024-06-02 00:20:49 +00:00
86 lines
2.5 KiB
Java
86 lines
2.5 KiB
Java
package net.sourceforge.plantuml.xmi;
|
|
|
|
import static java.nio.charset.StandardCharsets.UTF_8;
|
|
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
import javax.xml.transform.OutputKeys;
|
|
import javax.xml.transform.Result;
|
|
import javax.xml.transform.Source;
|
|
import javax.xml.transform.Transformer;
|
|
import javax.xml.transform.TransformerException;
|
|
import javax.xml.transform.dom.DOMSource;
|
|
import javax.xml.transform.stream.StreamResult;
|
|
|
|
import org.w3c.dom.Document;
|
|
|
|
import net.sourceforge.plantuml.FileFormat;
|
|
import net.sourceforge.plantuml.api.ImageDataSimple;
|
|
import net.sourceforge.plantuml.core.ImageData;
|
|
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
|
|
import net.sourceforge.plantuml.sequencediagram.graphic.FileMaker;
|
|
import net.sourceforge.plantuml.xml.XmlFactories;
|
|
|
|
public final class SequenceDiagramXmiMaker implements FileMaker {
|
|
|
|
private final SequenceDiagram diagram;
|
|
private final FileFormat fileFormat;
|
|
|
|
public SequenceDiagramXmiMaker(SequenceDiagram sequenceDiagram, FileFormat fileFormat) {
|
|
this.diagram = sequenceDiagram;
|
|
this.fileFormat = fileFormat;
|
|
}
|
|
|
|
@Override
|
|
public ImageData createOne(OutputStream os, int index, boolean isWithMetadata) throws IOException {
|
|
DocumentBuilder builder;
|
|
ImageData imageData = new ImageDataSimple(0, 0);
|
|
try {
|
|
builder = XmlFactories.newDocumentBuilder();
|
|
} catch (ParserConfigurationException e) {
|
|
e.printStackTrace();
|
|
return imageData;
|
|
}
|
|
Document document = builder.newDocument();
|
|
document.setXmlVersion("1.0");
|
|
document.setXmlStandalone(true);
|
|
|
|
XmiSequenceDiagram xmi;
|
|
if (fileFormat == FileFormat.XMI_ARGO)
|
|
xmi = new XmiSequenceDiagramArgo(diagram, document);
|
|
else
|
|
xmi = new XmiSequenceDiagramStandard(diagram, document);
|
|
|
|
xmi.build();
|
|
|
|
try {
|
|
writeDocument(document, os);
|
|
} catch (TransformerException | ParserConfigurationException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return imageData;
|
|
}
|
|
|
|
|
|
@Override
|
|
public int getNbPages() {
|
|
return 1;
|
|
}
|
|
|
|
private void writeDocument(Document document, OutputStream os)
|
|
throws TransformerException, ParserConfigurationException {
|
|
final Source source = new DOMSource(document);
|
|
|
|
final Result resultat = new StreamResult(os);
|
|
|
|
final Transformer transformer = XmlFactories.newTransformer();
|
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
|
transformer.setOutputProperty(OutputKeys.ENCODING, UTF_8.name());
|
|
transformer.transform(source, resultat);
|
|
}
|
|
|
|
}
|