Here is the complete version of the Diagram
class.
Basic Java DSL
package cz.orany.yuml.model;
import java.util.*;
import java.util.function.Consumer;
public class Diagram {
public static Diagram create(Consumer<Diagram> diagramConsumer) {
Diagram diagram = new Diagram();
diagramConsumer.accept(diagram);
return diagram;
}
private Collection<Note> notes = new LinkedHashSet<>();
private Map<String, Type> types = new LinkedHashMap<>();
private Collection<Relationship> relationships = new LinkedHashSet<>();
public Note note(String text) {
return note(text, null);
}
public Note note(String text, String color) {
Note note = new Note(text, color);
notes.add(note);
return note;
}
public Type type(String name) {
return types.computeIfAbsent(name, n -> new Type(this, n));
}
public Relationship association(String source, String destination, Consumer<Relationship> configuration) {
return relationship(source, RelationshipType.ASSOCIATION, destination, configuration);
}
public Relationship aggregation(String source, String destination, Consumer<Relationship> configuration) {
return relationship(source, RelationshipType.AGGREGATION, destination, configuration);
}
public Relationship inheritance(String source, String destination, Consumer<Relationship> configuration) {
return relationship(source, RelationshipType.INHERITANCE, destination, configuration);
}
public Relationship composition(String source, String destination, Consumer<Relationship> configuration) {
return relationship(source, RelationshipType.COMPOSITION, destination, configuration);
}
// tag::relationship[]
public Relationship relationship(
String source,
RelationshipType type,
String destination,
Consumer<Relationship> configuration
) {
Relationship relationship = new Relationship(type(source), type, type(destination));
configuration.accept(relationship);
relationships.add(relationship);
return relationship;
}
// end::relationship[]
public Collection<Note> getNotes() {
return Collections.unmodifiableCollection(notes);
}
public Collection<Type> getTypes() {
return Collections.unmodifiableCollection(types.values());
}
public Collection<Relationship> getRelationships() {
return Collections.unmodifiableCollection(relationships);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Diagram diagram = (Diagram) o;
return Objects.equals(notes, diagram.notes) &&
Objects.equals(types, diagram.types) &&
Objects.equals(relationships, diagram.relationships);
}
@Override
public int hashCode() {
return Objects.hash(notes, types, relationships);
}
@Override
public String toString() {
return "Diagram{" +
"notes=" + notes +
", types=" + types +
", relationships=" + relationships +
'}';
}
}
For the fluent DSL you just need to copy & paste the examples from the main document into Type
class and a new InheritanceBuilder.java
file.