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
|
package com.mapbox.mapboxsdk.style.layers;
import java.util.ArrayList;
import java.util.Arrays;
/**
* Utility to build filter expressions more easily:
*
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#types-filter">Style spec</a>
*/
public class Filter {
public abstract static class Statement {
protected final String operator;
public Statement(String operator) {
this.operator = operator;
}
public abstract Object[] toArray();
}
public static class SimpleStatement extends Statement {
private final String key;
private final Object[] values;
public SimpleStatement(String operator, String key, Object... values) {
super(operator);
this.key = key;
this.values = values;
}
@Override
public Object[] toArray() {
ArrayList<Object> array = new ArrayList<>(2 + values.length);
array.add(operator);
array.add(key);
array.addAll(Arrays.asList(values));
return array.toArray();
}
}
public static class CompoundStatement extends Statement {
private final Statement[] statements;
public CompoundStatement(String operator, Statement... statements) {
super(operator);
this.statements = statements;
}
@Override
public Object[] toArray() {
ArrayList<Object> array = new ArrayList<>(1 + statements.length);
array.add(operator);
for (Statement statement : statements) {
array.add(statement.toArray());
}
return array.toArray();
}
}
public static Statement all(Statement... statements) {
return new CompoundStatement("all", statements);
}
public static Statement any(Statement... statements) {
return new CompoundStatement("any", statements);
}
public static Statement none(Statement... statements) {
return new CompoundStatement("none", statements);
}
public static Statement has(String key) {
return new SimpleStatement("has", key);
}
public static Statement notHas(String key) {
return new SimpleStatement("!has", key);
}
public static Statement eq(String key, Object value) {
return new SimpleStatement("==", key, value);
}
public static Statement neq(String key, Object value) {
return new SimpleStatement("!=", key, value);
}
public static Statement gt(String key, Object value) {
return new SimpleStatement(">", key, value);
}
public static Statement gte(String key, Object value) {
return new SimpleStatement(">=", key, value);
}
public static Statement lt(String key, Object value) {
return new SimpleStatement("<", key, value);
}
public static Statement lte(String key, Object value) {
return new SimpleStatement("<=", key, value);
}
public static Statement in(String key, Object... values) {
return new SimpleStatement("in", key, values);
}
public static Statement notIn(String key, Object... values) {
return new SimpleStatement("!in", key, values);
}
}
|