KeyModel.java
package org.thewonderlemming.c4plantuml.graphml.model;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import org.thewonderlemming.c4plantuml.graphml.Build;
import org.thewonderlemming.c4plantuml.graphml.model.builder.KeyFor;
import org.thewonderlemming.c4plantuml.graphml.model.builder.WithAttrName;
import org.thewonderlemming.c4plantuml.graphml.model.builder.WithAttrType;
import org.thewonderlemming.c4plantuml.graphml.model.builder.WithFor;
import org.thewonderlemming.c4plantuml.graphml.model.builder.WithId;
/**
* The <key> part of the representation of a GraphML stream.
* <p>
* It is based on JAXB.
*
* @author thewonderlemming
*
*/
@XmlRootElement(name = KeyModel.TAG_NAME)
@XmlAccessorType(XmlAccessType.FIELD)
public class KeyModel {
/**
* The current model XML tag name.
*/
public static final String TAG_NAME = "key";
@XmlAttribute(name = "attr.name", required = true)
private String attrName;
@XmlAttribute(name = "attr.type", required = true)
private String attrType;
@XmlAttribute(name = "for", required = true)
private String forProperty;
@XmlAttribute(name = "id", required = true)
private String id;
/**
* A builder to the current {@link KeyModel} class.
*
* @return a new {@link KeyModel} instance.
*/
public static WithId<String, WithFor<KeyFor, WithAttrName<String, WithAttrType<String, Build<KeyModel>>>>> builder() {
return id -> forProperty -> attrName -> attrType -> () -> {
final KeyModel key = new KeyModel();
key.setId(id);
key.setForProperty(forProperty.getValue());
key.setAttrName(attrName);
key.setAttrType(attrType);
return key;
};
}
/**
* Default constructor.
*/
private KeyModel() {
// Does nothing but hiding the current constructor.
}
/**
* Sets the {@code attrName} of the current instance.
*
* @param id the {@code attrName} to add to the current instance.
*/
private void setAttrName(final String attrName) {
this.attrName = attrName;
}
/**
* Sets the {@code attrType} of the current instance.
*
* @param id the {@code attrType} to add to the current instance.
*/
private void setAttrType(final String attrType) {
this.attrType = attrType;
}
/**
* Sets the {@code forProperty} of the current instance.
*
* @param id the {@code forProperty} to add to the current instance.
*/
private void setForProperty(final String forProperty) {
this.forProperty = forProperty;
}
/**
* Sets the {@code id} of the current instance.
*
* @param id the {@code id} to add to the current instance.
*/
private void setId(final String id) {
this.id = id;
}
}