Skip to content
Snippets Groups Projects
Commit 897b98b4 authored by Sebastien's avatar Sebastien
Browse files

Add fluent api unlDocumentNodeBuilder

parent 0f72ee01
No related branches found
No related tags found
1 merge request!10Resolve "Lexical Error"
Showing
with 549 additions and 0 deletions
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
\ No newline at end of file
package fr.tetras_libre.unltools.unl.builders;
import fr.tetras_libre.unltools.unl.Graph;
import java.util.function.Function;
public class GraphBuilder {
Graph graph;
private GraphBuilder() {
this.graph = new Graph();
}
public static IBuild graph() {
return new GraphBuilder.Builder();
}
public interface IBuild {
IBuild addGraphRelation(Function<GraphRelationBuilder.RequiredLabel, GraphRelationBuilder.IBuild> c);
Graph buildGraph();
}
private static class Builder implements IBuild {
private final GraphBuilder instance;
public Builder() {
instance = new GraphBuilder();
}
@Override
public IBuild addGraphRelation(Function<GraphRelationBuilder.RequiredLabel, GraphRelationBuilder.IBuild> c) {
instance.graph.add(c.apply(GraphRelationBuilder.createBuilder()).buildGraphRelation());
return this;
}
@Override
public Graph buildGraph() {
return instance.graph;
}
}
}
package fr.tetras_libre.unltools.unl.builders;
import fr.tetras_libre.unltools.unl.GraphNode;
import fr.tetras_libre.unltools.unl.GraphRelation;
import java.util.function.Function;
public class GraphRelationBuilder {
private String label;
private String graphReference;
private GraphNode node1;
private GraphNode node2;
public static RequiredLabel createBuilder() {
return new GraphRelationBuilder.Builder();
}
public interface RequiredLabel {
OptionalGraphReference label(String label);
}
public interface OptionalGraphReference {
RequiredLeftNode reference(String nodeName);
RequiredLeftNode noReference();
}
public interface RequiredLeftNode {
RequiredRightNode leftNode(Function<UniversalWordNodeBuilder.IRequiredUniversalWord, UniversalWordNodeBuilder.IBuild> f);
IBuild rightSubGraphNode(Function<SubGraphReferenceNodeBuilder.IRequiredReferenceNumber, SubGraphReferenceNodeBuilder.IBuild> f);
}
public interface RequiredRightNode {
IBuild rightNode(Function<UniversalWordNodeBuilder.IRequiredUniversalWord, UniversalWordNodeBuilder.IBuild> f);
IBuild rightSubGraphNode(Function<SubGraphReferenceNodeBuilder.IRequiredReferenceNumber, SubGraphReferenceNodeBuilder.IBuild> f);
}
public interface IBuild {
GraphRelation buildGraphRelation();
}
private static class Builder implements RequiredLabel, OptionalGraphReference, RequiredLeftNode, RequiredRightNode, IBuild {
private final GraphRelationBuilder instance;
public Builder() {
instance = new GraphRelationBuilder();
}
@Override
public RequiredLeftNode reference(String nodeName) {
instance.graphReference = nodeName;
return this;
}
@Override
public RequiredLeftNode noReference() {
instance.graphReference = "";
return this;
}
@Override
public RequiredRightNode leftNode(Function<UniversalWordNodeBuilder.IRequiredUniversalWord, UniversalWordNodeBuilder.IBuild> f) {
this.instance.node1 = f.apply(UniversalWordNodeBuilder.createBuilder()).buildUniversalWordNode();
return this;
}
@Override
public IBuild rightSubGraphNode(Function<SubGraphReferenceNodeBuilder.IRequiredReferenceNumber, SubGraphReferenceNodeBuilder.IBuild> f) {
instance.node2 = f.apply(SubGraphReferenceNodeBuilder.createBuilder()).buildSubGraphReferenceNode();
return this;
}
@Override
public GraphRelation buildGraphRelation() {
return new GraphRelation(instance.node1, instance.node2, instance.label, instance.graphReference);
}
@Override
public OptionalGraphReference label(String label) {
instance.label = label;
return this;
}
@Override
public IBuild rightNode(Function<UniversalWordNodeBuilder.IRequiredUniversalWord, UniversalWordNodeBuilder.IBuild> f) {
instance.node2 = f.apply(UniversalWordNodeBuilder.createBuilder()).buildUniversalWordNode();
return this;
}
}
}
package fr.tetras_libre.unltools.unl.builders;
import fr.tetras_libre.unltools.unl.Restriction;
import fr.tetras_libre.unltools.unl.UniversalWord;
public class RestrictionBuilder {
private String label;
private char orientation;
private UniversalWord universalWord;
private RestrictionBuilder() {
label = "";
orientation = ' ';
universalWord = null;
}
public interface IRequiredLabel {
IOrientation label(String label);
}
public static Restriction simpleRestriction(String label, RestrictionOrientation orientation, String headwordLabel) {
return RestrictionBuilder
.createBuilder()
.label(label)
.withOrientation(orientation)
.universalWord(UniversalWordBuilder.simpleUniversalWord(headwordLabel))
.buildRestriction();
}
public static IRequiredLabel createBuilder() {
return new RestrictionBuilder.Builder();
}
public static Restriction ternaryTransitiveRestriction(String label1, String label2, String label3, RestrictionOrientation orientation) {
return RestrictionBuilder
.createBuilder()
.label(label1)
.withOrientation(orientation)
.universalWord(
UniversalWordBuilder
.createBuilder()
.headWord(label2)
.addSimpleRestriction(label1, orientation, label3 )
.buildUniversalWord()
)
.buildRestriction();
}
public interface IOrientation {
IRequiredUniversalWord withOrientation(RestrictionOrientation orientation);
}
public interface IRequiredUniversalWord {
IBuild universalWord(UniversalWord universalWord);
}
public interface IBuild {
Restriction buildRestriction();
}
private static class Builder implements IRequiredLabel, IRequiredUniversalWord, IOrientation, IBuild {
private final RestrictionBuilder instance;
public Builder(){
instance = new RestrictionBuilder();
}
@Override
public IBuild universalWord(UniversalWord universalWord) {
instance.universalWord = universalWord;
return this;
}
@Override
public IRequiredUniversalWord withOrientation(RestrictionOrientation orientation) {
switch (orientation) {
case Left:
instance.orientation = '<';
break;
case None:
instance.orientation = ' ';
break;
case Right:
instance.orientation = '>';
break;
}
return this;
}
@Override
public Restriction buildRestriction() {
return new Restriction(instance.label, instance.orientation, instance.universalWord);
}
@Override
public IOrientation label(String label) {
if(null == label)
throw new IllegalArgumentException();
instance.label = label;
return this;
}
}
}
package fr.tetras_libre.unltools.unl.builders;
public enum RestrictionOrientation {
None,
Right,
Left
}
package fr.tetras_libre.unltools.unl.builders;
import fr.tetras_libre.unltools.unl.SubGraphReferenceNode;
import java.util.HashSet;
public class SubGraphReferenceNodeBuilder {
private String referenceNumber;
private HashSet<String> attributes;
public static IRequiredReferenceNumber createBuilder()
{
return new SubGraphReferenceNodeBuilder.Builder();
}
private SubGraphReferenceNodeBuilder() {
referenceNumber = null;
attributes = new HashSet<>();
}
public interface IRequiredReferenceNumber {
IBuild referenceNumber(String referenceNumber);
}
public interface IBuild {
IBuild addAttribute(String attribute);
SubGraphReferenceNode buildSubGraphReferenceNode();
}
private static class Builder implements IRequiredReferenceNumber, IBuild {
SubGraphReferenceNodeBuilder instance;
public Builder() {
instance = new SubGraphReferenceNodeBuilder();
}
@Override
public IBuild referenceNumber(String referenceNumber) {
if (null == referenceNumber || referenceNumber.isBlank())
throw new IllegalArgumentException();
this.instance.referenceNumber = referenceNumber;
return this;
}
@Override
public IBuild addAttribute(String attribute) {
if (null != attribute && !attribute.isBlank())
this.instance.attributes.add(attribute);
return this;
}
@Override
public SubGraphReferenceNode buildSubGraphReferenceNode() {
return new SubGraphReferenceNode(instance.referenceNumber, instance.attributes);
}
}
}
package fr.tetras_libre.unltools.unl.builders;
import fr.tetras_libre.unltools.unl.Restriction;
import fr.tetras_libre.unltools.unl.UniversalWord;
import java.util.TreeSet;
import java.util.function.Function;
public class UniversalWordBuilder {
private final TreeSet<Restriction> restrictions;
private String headWord;
private UniversalWordBuilder() {
restrictions = new TreeSet<>();
}
public static IRequiredHeadWord createBuilder() {
return new UniversalWordBuilder.Builder();
}
public static UniversalWord simpleUniversalWord(String headWord) {
return UniversalWordBuilder.createBuilder()
.headWord(headWord)
.buildUniversalWord();
}
public interface IBuild {
IBuild addRestriction(Function<RestrictionBuilder.IRequiredLabel, RestrictionBuilder.IBuild> f);
IBuild addSimpleRestriction(String label1, RestrictionOrientation orientation, String label2);
IBuild addTernaryTransitiveRestriction(String firstLabel, String secondLabel, String thirdLabel, RestrictionOrientation orientation);
UniversalWord buildUniversalWord();
}
public interface IRequiredHeadWord {
IBuild headWord(String headword);
}
private static class Builder implements IRequiredHeadWord, IBuild {
private final UniversalWordBuilder instance;
Builder() {
instance = new UniversalWordBuilder();
}
@Override
public IBuild addRestriction(Function<RestrictionBuilder.IRequiredLabel, RestrictionBuilder.IBuild> f) {
instance.restrictions.add(f.apply(RestrictionBuilder.createBuilder()).buildRestriction());
return this;
}
@Override
public IBuild addSimpleRestriction(String label1, RestrictionOrientation orientation, String label2) {
instance.restrictions.add(RestrictionBuilder.simpleRestriction(label1, orientation, label2));
return this;
}
@Override
public IBuild addTernaryTransitiveRestriction(String firstLabel, String secondLabel, String thirdLabel, RestrictionOrientation orientation) {
instance.restrictions.add(RestrictionBuilder.ternaryTransitiveRestriction(firstLabel, secondLabel, thirdLabel, orientation));
return this;
}
@Override
public UniversalWord buildUniversalWord() {
return new UniversalWord(instance.headWord, instance.restrictions);
}
@Override
public IBuild headWord(String headword) {
if (null == headword)
throw new IllegalArgumentException();
instance.headWord = headword;
return this;
}
}
}
package fr.tetras_libre.unltools.unl.builders;
import fr.tetras_libre.unltools.unl.UniversalWord;
import fr.tetras_libre.unltools.unl.UniversalWordNode;
import java.util.HashSet;
import java.util.function.Function;
import java.util.function.Supplier;
public class UniversalWordNodeBuilder {
private final HashSet<String> attributes;
private UniversalWord universalWord;
private String instanceNumber;
private UniversalWordNodeBuilder() {
this.attributes = new HashSet<>();
this.instanceNumber = "";
}
public static IRequiredUniversalWord createBuilder() {
return new UniversalWordNodeBuilder.Builder();
}
public interface IRequiredUniversalWord {
IBuild universalWord(Function<UniversalWordBuilder.IRequiredHeadWord, UniversalWordBuilder.IBuild> f);
IBuild simpleUniversalWord(Supplier<String> s);
}
public interface IBuild {
IBuild addAttribute(String attribute);
IBuild instanceNumber(String nodeReference);
UniversalWordNode buildUniversalWordNode();
}
private static class Builder implements IRequiredUniversalWord, IBuild {
private final UniversalWordNodeBuilder instance;
public Builder() {
this.instance = new UniversalWordNodeBuilder();
}
@Override
public IBuild addAttribute(String attribute) {
if (null != attribute
&& !attribute.isBlank())
this.instance.attributes.add(attribute);
return this;
}
@Override
public IBuild instanceNumber(String nodeReference) {
if(null == nodeReference){
throw new IllegalArgumentException();
}
this.instance.instanceNumber = nodeReference;
return this;
}
@Override
public UniversalWordNode buildUniversalWordNode() {
return new UniversalWordNode(instance.universalWord, instance.attributes, instance.instanceNumber);
}
@Override
public IBuild universalWord(Function<UniversalWordBuilder.IRequiredHeadWord, UniversalWordBuilder.IBuild> f) {
instance.universalWord = f.apply(UniversalWordBuilder.createBuilder()).buildUniversalWord();
return this;
}
@Override
public IBuild simpleUniversalWord(Supplier<String> s) {
instance.universalWord = UniversalWordBuilder.simpleUniversalWord(s.get());
return this;
}
}
}
package fr.tetras_libre.unltools.unl.builders;
import fr.tetras_libre.unltools.unl.Graph;
import fr.tetras_libre.unltools.unl.UnlDocumentNode;
import fr.tetras_libre.unltools.unl.UnlDocumentNodeType;
import java.util.function.Function;
public class UnlDocumentNodeBuilder {
private UnlDocumentNodeType unlDocumentNodeType;
private String docNodeLabel;
private Graph graph;
private UnlDocumentNodeBuilder() {
docNodeLabel = null;
graph = null;
}
public static IUnlDocumentNodeType createBuilder() {
return new UnlDocumentNodeBuilder.Builder();
}
public interface IUnlDocumentNodeType {
ILabel withNodeType(UnlDocumentNodeType nodeType);
}
public interface ILabel {
IGraph withLabel(String label);
}
public interface IGraph {
IBuild withGraph(Function<GraphBuilder.IBuild, GraphBuilder.IBuild> f);
}
public interface IBuild {
UnlDocumentNode buildUnlDocumentNode();
}
private static class Builder implements IBuild, ILabel, IGraph, IUnlDocumentNodeType {
private final UnlDocumentNodeBuilder instance;
Builder() {
instance = new UnlDocumentNodeBuilder();
}
@Override
public UnlDocumentNode buildUnlDocumentNode() {
return new UnlDocumentNode(instance.unlDocumentNodeType, instance.docNodeLabel, instance.graph);
}
@Override
public IGraph withLabel(String label) {
if (null == label || label.isBlank())
throw new IllegalArgumentException();
instance.docNodeLabel = label;
return this;
}
@Override
public IBuild withGraph(Function<GraphBuilder.IBuild, GraphBuilder.IBuild> f) {
if (null != instance.graph)
throw new IllegalStateException();
instance.graph = f.apply(GraphBuilder.graph()).buildGraph();
return this;
}
@Override
public ILabel withNodeType(UnlDocumentNodeType nodeType) {
instance.unlDocumentNodeType = nodeType;
return this;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment