1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-06-02 00:20:49 +00:00
plantuml/src/net/sourceforge/plantuml/xmi/SequenceDiagramXmiMaker.java
2022-01-05 09:47:50 +01:00

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);
}
}