blob: e7e22cb4fce1d0a1973a7011dc39471ee69c057e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.client.solrj.request.json;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DomainMap extends HashMap<String, Object> {
/**
* Indicates that the domain should be narrowed by the specified filter
*
* May be called multiple times. Each added filter is retained and used to narrow the domain.
*/
public DomainMap withFilter(String filter) {
if (filter == null) {
throw new IllegalArgumentException("Parameter 'filter' must be non-null");
}
if (! containsKey("filter")) {
put("filter", new ArrayList<String>());
}
@SuppressWarnings({"unchecked"})
final List<String> filterList = (List<String>) get("filter");
filterList.add(filter);
return this;
}
/**
* Indicates that the domain should be the following query
*
* May be called multiple times. Each specified query is retained and included in the domain.
*/
public DomainMap withQuery(String query) {
if (query == null) {
throw new IllegalArgumentException("Parameter 'query' must be non-null");
}
if (! containsKey("query")) {
put("query", new ArrayList<String>());
}
@SuppressWarnings({"unchecked"})
final List<String> queryList = (List<String>) get("query");
queryList.add(query);
return this;
}
/**
* Provide a tag or tags that correspond to filters or queries to exclude from the domain
*
* May be called multiple times. Each exclude-string is retained and used for removing queries/filters from the
* domain specification.
*
* @param excludeTagsValue a comma-delimited String containing filter/query tags to exclude
*/
public DomainMap withTagsToExclude(String excludeTagsValue) {
if (excludeTagsValue == null) {
throw new IllegalArgumentException("Parameter 'excludeTagValue' must be non-null");
}
if (! containsKey("excludeTags")) {
put("excludeTags", new ArrayList<String>());
}
@SuppressWarnings({"unchecked"})
final List<String> excludeTagsList = (List<String>) get("excludeTags");
excludeTagsList.add(excludeTagsValue);
return this;
}
/**
* Indicates that the resulting domain will contain all parent documents of the children in the existing domain
*
* @param allParentsQuery a query used to identify all parent documents in the collection
*/
public DomainMap setBlockParentQuery(String allParentsQuery) {
if (allParentsQuery == null) {
throw new IllegalArgumentException("Parameter 'allParentsQuery' must be non-null");
}
put("blockParent", allParentsQuery);
return this;
}
/**
* Indicates that the resulting domain will contain all child documents of the parents in the current domain
*
* @param allChildrenQuery a query used to identify all child documents in the collection
*/
public DomainMap setBlockChildQuery(String allChildrenQuery) {
if (allChildrenQuery == null) {
throw new IllegalArgumentException("Parameter 'allChildrenQuery' must be non-null");
}
put("blockChildren", allChildrenQuery);
return this;
}
/**
* Transforms the domain by running a join query with the provided {@code from} and {@code to} parameters
*
* Join modifies the current domain by selecting the documents whose values in field {@code to} match values for the
* field {@code from} in the current domain.
*
* @param from a field-name whose values are matched against {@code to} by the join
* @param to a field name whose values should match values specified by the {@code from} field
*/
public DomainMap setJoinTransformation(String from, String to) {
if (from == null) {
throw new IllegalArgumentException("Parameter 'from' must be non-null");
}
if (to == null) {
throw new IllegalArgumentException("Parameter 'to' must be non-null");
}
final Map<String, Object> joinParameters = new HashMap<>();
joinParameters.put("from", from);
joinParameters.put("to", to);
put("join", joinParameters);
return this;
}
}