GraphMLModel.java
package org.thewonderlemming.c4plantuml.graphml.model;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.thewonderlemming.c4plantuml.graphml.Build;
/**
* The root node of a Java representation of a GraphML stream.
* <p>
* It is based on JAXB.
*
* @author thewonderlemming
*
*/
@XmlRootElement(name = "graphml")
@XmlAccessorType(XmlAccessType.FIELD)
public class GraphMLModel {
/**
* The GraphML namespace.
*/
public static final String NAMESPACE = "http://graphml.graphdrawing.org/xmlns";
/**
* The GraphML schema location.
*/
public static final String SCHEMA_LOCATION = "http://graphml.graphdrawing.org/xmlns"
+ " http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd";
@XmlElement(name = KeyModel.TAG_NAME, required = true)
private List<KeyModel> seq1Keys;
@XmlElement(name = GraphModel.TAG_NAME, required = true)
private MappedListDecorator<GraphModel, String> seq2Graphs;
/**
* A builder to the current {@link GraphMLModel} class.
*
* @return a new {@link GraphMLModel} instance.
*/
public static WithKeys<WithGraphs<Build<GraphMLModel>>> builder() {
return keys -> graphs -> () -> {
final GraphMLModel graphMl = new GraphMLModel();
graphMl.setKeys(keys);
graphMl.setGraphs(graphs);
return graphMl;
};
}
/**
* Default constructor.
*/
private GraphMLModel() {
// Does nothing but hiding the current constructor.
}
/**
* Adds a {@link GraphModel} to the current model.
*
* @param graph the {@link GraphModel} to add to the current instance.
*/
public void addGraph(final GraphModel graph) {
this.seq2Graphs.addOrReplaceData(graph);
}
/**
* Sets a list of {@link GraphModel} in the current instance.
*
* @param graphs a list of graphs to add to the current instance.
*/
private void setGraphs(final List<GraphModel> graphs) {
this.seq2Graphs = new MappedListDecorator<>(
GraphModel.class,
graphs,
GraphModel::getId);
}
/**
* Sets a list of {@link KeyModel} in the current instance.
*
* @param keys a list of keys to add to the current instance.
*/
private void setKeys(final List<KeyModel> keys) {
this.seq1Keys = keys;
}
}