-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathRepeatingParamValues.java
More file actions
70 lines (56 loc) · 1.83 KB
/
RepeatingParamValues.java
File metadata and controls
70 lines (56 loc) · 1.83 KB
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
package com.lmax.simpledsl.internal;
import com.lmax.simpledsl.api.DslArg;
import com.lmax.simpledsl.api.RepeatingGroup;
import java.util.List;
import java.util.Map;
import static java.util.Arrays.stream;
class RepeatingParamValues implements RepeatingGroup
{
private final DslArg[] dslArgs;
private final Map<String, List<String>> valuesByName;
RepeatingParamValues(final DslArg[] dslArgs, final Map<String, List<String>> valuesByName)
{
this.dslArgs = dslArgs;
this.valuesByName = valuesByName;
}
@Override
public boolean hasValue(final String name)
{
final List<String> values = getValues(name);
return !(values == null || values.isEmpty());
}
@Override
public boolean hasParam(final String name)
{
return stream(dslArgs).anyMatch(arg -> arg.getName().equalsIgnoreCase(name));
}
@Override
public String value(final String name)
{
final String[] strings = values(name);
if (strings.length > 1)
{
throw new IllegalArgumentException("values() should be used when multiple values are allowed");
}
return strings.length > 0 ? strings[0] : null;
}
@Override
public String[] values(final String name)
{
final List<String> values = getValues(name);
return values != null ? values.toArray(new String[0]) : new String[0];
}
@Override
public DslArg[] getParams()
{
return dslArgs;
}
private List<String> getValues(final String name)
{
if (name == null || stream(dslArgs).noneMatch(arg -> arg.getName().equalsIgnoreCase(name)))
{
throw new IllegalArgumentException(String.format("Parameter %s does not exist in this repeating group", name));
}
return valuesByName.get(name.toLowerCase());
}
}