package denominator.denominatord; import java.net.URI; import java.util.List; import denominator.common.Util; import denominator.model.ResourceRecordSet; import static denominator.common.Preconditions.checkArgument; class Query { static Query from(String path) { String decoded = URI.create(path).getQuery(); if (decoded == null) { return new Query(null, null, null); } String name = null; String type = null; String qualifier = null; for (String nameValueString : Util.split('&', decoded)) { List<String> nameValue = Util.split('=', nameValueString); String queryName = nameValue.get(0); String queryValue = nameValue.size() > 1 ? nameValue.get(1) : null; if (queryName.equals("name")) { name = queryValue; } else if (queryName.equals("type")) { type = queryValue; } else if (queryName.equals("qualifier")) { qualifier = queryValue; } } return new Query(name, type, qualifier); } static Query from(ResourceRecordSet<?> recordSet) { return new Query(recordSet.name(), recordSet.type(), recordSet.qualifier()); } final String name; final String type; final String qualifier; private Query(String name, String type, String qualifier) { this.name = name; this.type = type; this.qualifier = qualifier; if (qualifier != null) { checkArgument(type != null && name != null, "name and type query required with qualifier"); } else if (type != null) { checkArgument(name != null, "name query required with type"); } } @Override public String toString() { return new StringBuilder() .append("name=").append(name) .append(", type=").append(type) .append(", qualifier=").append(qualifier).toString(); } }