src/main/java/org/embulk/input/QueryConfig.java in embulk-input-http-0.0.5 vs src/main/java/org/embulk/input/QueryConfig.java in embulk-input-http-0.0.6
- old
+ new
@@ -1,52 +1,71 @@
package org.embulk.input;
-import com.google.common.base.Objects;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
import java.util.ArrayList;
import java.util.List;
public class QueryConfig {
private final String name;
- private final String value;
+ private final Optional<String> value;
+ private final Optional<List<String>> values;
private final boolean expand;
@JsonCreator
public QueryConfig(
@JsonProperty("name") String name,
- @JsonProperty("value") String value,
+ @JsonProperty("value") Optional<String> value,
+ @JsonProperty("values") Optional<List<String>> values,
@JsonProperty("expand") boolean expand) {
this.name = name;
this.value = value;
+ this.values = values;
this.expand = expand;
}
- public List<QueryConfig> expand() {
- List<QueryConfig> dest;
- if (!expand) {
- dest = new ArrayList<>(1);
- dest.add(this);
- } else {
- List<String> expanded = BraceExpansion.expand(value);
- dest = new ArrayList<>(expanded.size());
- for(String s : expanded) {
- dest.add(new QueryConfig(name, s, false));
+ public List<Query> expand() {
+ List<Query> dest;
+ if (value.isPresent()) {
+ if (expand) {
+ List<String> expanded = BraceExpansion.expand(value.get());
+ dest = new ArrayList<>(expanded.size());
+ for (String s : expanded) {
+ dest.add(new Query(name, s));
+ }
+ } else {
+ dest = new ArrayList<>(1);
+ dest.add(new Query(name, value.get()));
}
+ } else if (values.isPresent()) {
+ if (expand) {
+ dest = new ArrayList<>(values.get().size());
+ for (String s : values.get()) {
+ dest.add(new Query(name, s));
+ }
+ } else {
+ dest = new ArrayList<>(1);
+ final String[] valueArr = values.get().toArray(new String[values.get().size()]);
+ dest.add(new Query(name, valueArr));
+ }
+ } else {
+ throw new IllegalArgumentException("value or values must be specified to 'params'");
}
return dest;
}
@JsonProperty("name")
public String getName() {
return name;
}
@JsonProperty("value")
- public String getValue() {
+ public Optional<String> getValue() {
return value;
}
@JsonProperty("expand")
public boolean isExpand() {
@@ -76,10 +95,30 @@
public String toString() {
return String.format("ParameterConfig[%s, %s, %s]",
getName(), getValue(), isExpand());
}
+ public static class Query {
+ private final String name;
+ private final String[] values;
+
+ public Query(
+ @JsonProperty("name") String name,
+ @JsonProperty("values") String... values) {
+ this.name = name;
+ this.values = values;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String[] getValues() {
+ return values;
+ }
+ }
+
private static class BraceExpansion {
public static List<String> expand(String s) {
return expandRecursive("", s, "", new ArrayList<String>());
}
@@ -110,10 +149,12 @@
if (i1 == -1) {
if (suffix.length() > 0) {
expandRecursive(prefix + s, suffix, "", dest);
} else {
- dest.add(String.format("%s%s%s", prefix, s, suffix));
+ final String out = String.format("%s%s%s", prefix, s, suffix).
+ replaceAll("[\\\\]{2}", "\\").replaceAll("[\\\\]([,}{])", "$1");
+ dest.add(out);
}
} else {
for (String m : sb.substring(i1 + 1, i2).split("\u0000", -1)) {
expandRecursive(prefix + s.substring(0, i1), m, s.substring(i2 + 1) + suffix, dest);
}