name:
src/main/java/io/protobase/f7/models/FormulaNode.java
-rw-r--r--
1561
1package io.protobase.f7.models;
2
3import com.google.common.base.MoreObjects;
4
5import java.util.ArrayList;
6import java.util.List;
7
8/**
9 * A formula node is a named formula with 0 or more arguments that are other nodes.
10 */
11public class FormulaNode extends BaseObject implements Node {
12 private String name;
13 private List<Node> arguments;
14
15
16 public FormulaNode(String name, List<Node> arguments) {
17 this.name = name;
18 this.arguments = arguments;
19 }
20
21 public FormulaNode(String name) {
22 this.name = name;
23 this.arguments = new ArrayList<>();
24 }
25
26
27 public static Builder builder() {
28 return new Builder();
29 }
30
31 public boolean isEmpty() {
32 return arguments.isEmpty();
33 }
34
35 /**
36 * Get formula name.
37 *
38 * @return formula name.
39 */
40 public String getName() {
41 return name;
42 }
43
44 public List<Node> getArguments() {
45 return arguments;
46 }
47
48 @Override
49 public String toString() {
50 return MoreObjects.toStringHelper(this)
51 .add("name", name)
52 .add("arguments", arguments)
53 .toString();
54 }
55
56 @Override
57 public Object[] significantAttributes() {
58 return new Object[]{
59 name,
60 arguments
61 };
62 }
63
64 public static class Builder {
65 private String name;
66 private List<Node> arguments = new ArrayList<>();
67
68 public Builder name(String name) {
69 this.name = name;
70 return this;
71 }
72
73 public Builder value(Node value) {
74 arguments.add(value);
75 return this;
76 }
77
78 public FormulaNode build() {
79 return new FormulaNode(name, arguments);
80 }
81 }
82}