-
Notifications
You must be signed in to change notification settings - Fork 141
/
ArgumentsMetadata.java
143 lines (119 loc) · 3.83 KB
/
ArgumentsMetadata.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package io.airlift.airline.model;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import io.airlift.airline.Accessor;
import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Set;
import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
public class ArgumentsMetadata
{
private final String title;
private final String description;
private final String usage;
private final boolean required;
private final Set<Accessor> accessors;
public ArgumentsMetadata(String title, String description, String usage, boolean required, Iterable<Field> path)
{
requireNonNull(title, "title is null");
requireNonNull(path, "path is null");
checkArgument(!Iterables.isEmpty(path), "path is empty");
this.title = title;
this.description = description;
this.usage = usage;
this.required = required;
this.accessors = ImmutableSet.of(new Accessor(path));
}
public ArgumentsMetadata(Iterable<ArgumentsMetadata> arguments)
{
requireNonNull(arguments, "arguments is null");
checkArgument(!Iterables.isEmpty(arguments), "arguments is empty");
ArgumentsMetadata first = arguments.iterator().next();
this.title = first.title;
this.description = first.description;
this.usage = first.usage;
this.required = first.required;
Set<Accessor> accessors = new HashSet<>();
for (ArgumentsMetadata other : arguments) {
checkArgument(first.equals(other),
"Conflicting arguments definitions: %s, %s", first, other);
accessors.addAll(other.getAccessors());
}
this.accessors = ImmutableSet.copyOf(accessors);
}
public String getTitle()
{
return title;
}
public String getDescription()
{
return description;
}
public String getUsage()
{
return usage;
}
public boolean isRequired()
{
return required;
}
public Set<Accessor> getAccessors()
{
return accessors;
}
public boolean isMultiValued()
{
return accessors.iterator().next().isMultiValued();
}
public Class<?> getJavaType()
{
return accessors.iterator().next().getJavaType();
}
@Override
public boolean equals(Object o)
{
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ArgumentsMetadata that = (ArgumentsMetadata) o;
if (required != that.required) {
return false;
}
if (description != null ? !description.equals(that.description) : that.description != null) {
return false;
}
if (!title.equals(that.title)) {
return false;
}
if (usage != null ? !usage.equals(that.usage) : that.usage != null) {
return false;
}
return true;
}
@Override
public int hashCode()
{
int result = title.hashCode();
result = 31 * result + (description != null ? description.hashCode() : 0);
result = 31 * result + (usage != null ? usage.hashCode() : 0);
result = 31 * result + (required ? 1 : 0);
return result;
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder();
sb.append("ArgumentsMetadata");
sb.append("{title='").append(title).append('\'');
sb.append(", description='").append(description).append('\'');
sb.append(", usage='").append(usage).append('\'');
sb.append(", required=").append(required);
sb.append(", accessors=").append(accessors);
sb.append('}');
return sb.toString();
}
}