C4Keys.java
package org.thewonderlemming.c4plantuml.graphml.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
import org.thewonderlemming.c4plantuml.graphml.model.builder.KeyFor;
/**
* Holds C4 GraphML keys and their properties.
*
* @author thewonderlemming
*
*/
public enum C4Keys {
/**
* The graph's C4 aspect.
*/
ASPECT("attr00", KeyFor.GRAPH, "aspect", C4Keys.STRING_TYPE),
/**
* The C4 level the graph's edge belongs to.
*/
C4_LEVEL("attr01", KeyFor.EDGE, "c4_level", C4Keys.STRING_TYPE),
/**
* The graph's node description.
*/
DESCRIPTION("attr02", KeyFor.NODE, "description", C4Keys.STRING_TYPE),
/**
* The graph's node type (i.e. Person, System, and so on).
*/
ENTITY_TYPE("attr03", KeyFor.NODE, "entity_type", C4Keys.STRING_TYPE),
/**
* The label on a graph's edge.
*/
LABEL("attr05", KeyFor.EDGE, "label", C4Keys.STRING_TYPE),
/**
* The graph's node name.
*/
NAME("attr06", KeyFor.NODE, "name", C4Keys.STRING_TYPE),
/**
* The protocol on a graph's edge (HTTPS, OAuth2, and such)..
*/
PROTOCOL("attr07", KeyFor.EDGE, "protocol", C4Keys.STRING_TYPE),
/**
* The technological stack of a graph's node.
*/
TECHNOLOGICAL_STACK("attr08", KeyFor.NODE, "technological_stack", C4Keys.STRING_TYPE),
/**
* The graph's title.
*/
TITLE("attr09", KeyFor.GRAPH, "title", C4Keys.STRING_TYPE);
private static final List<KeyModel> KEYS = new ArrayList<>();
private static final String STRING_TYPE = "string";
private final String attrName;
private final String attrType;
private final String id;
private final KeyFor keyFor;
static {
Stream
.of(C4Keys.values())
.forEach(value -> KEYS.add(value.getC4Key()));
}
/**
* Returns a {@link List} of {@link KeyModel} built from every value from {@link C4Keys}.
*
* @return a list of {@link KeyModel} built from every instance of the current class.
*/
public static List<KeyModel> getC4Keys() {
return Collections.unmodifiableList(KEYS);
}
private C4Keys(final String id, final KeyFor keyFor, final String attrName, final String attrType) {
this.id = id;
this.keyFor = keyFor;
this.attrName = attrName;
this.attrType = attrType;
}
/**
* Builds a {@link KeyModel} from the current {@link C4Keys} and returns it..
*
* @return a {@link KeyModel} instance built from the current {@link C4Keys} value.
*/
public KeyModel getC4Key() {
return KeyModel
.builder()
.withId(this.id)
.withFor(this.keyFor)
.withAttrName(this.attrName)
.withAttrType(this.attrType)
.build();
}
/**
* Return the GraphML key ID for the current {@link C4Keys} value.
*
* @return the current GraphML key ID.
*/
public String getId() {
return this.id;
}
}