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); }