org.elasticsearch.search.fetch.source.FetchSourceContext Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch 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.elasticsearch.search.fetch.source;
import org.elasticsearch.Version;
import org.elasticsearch.common.Booleans;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.io.stream.Streamable;
import org.elasticsearch.rest.RestRequest;
import java.io.IOException;
import java.util.Arrays;
/**
*/
public class FetchSourceContext implements Streamable {
public static final FetchSourceContext FETCH_SOURCE = new FetchSourceContext(true);
public static final FetchSourceContext DO_NOT_FETCH_SOURCE = new FetchSourceContext(false);
private boolean fetchSource;
private boolean transformSource;
private String[] includes;
private String[] excludes;
FetchSourceContext() {
}
public FetchSourceContext(boolean fetchSource) {
this(fetchSource, Strings.EMPTY_ARRAY, Strings.EMPTY_ARRAY, false);
}
public FetchSourceContext(String include) {
this(include, null);
}
public FetchSourceContext(String include, String exclude) {
this(true,
include == null ? Strings.EMPTY_ARRAY : new String[]{include},
exclude == null ? Strings.EMPTY_ARRAY : new String[]{exclude},
false);
}
public FetchSourceContext(String[] includes) {
this(true, includes, Strings.EMPTY_ARRAY, false);
}
public FetchSourceContext(String[] includes, String[] excludes) {
this(true, includes, excludes, false);
}
public FetchSourceContext(boolean fetchSource, String[] includes, String[] excludes, boolean transform) {
this.fetchSource = fetchSource;
this.includes = includes == null ? Strings.EMPTY_ARRAY : includes;
this.excludes = excludes == null ? Strings.EMPTY_ARRAY : excludes;
this.transformSource = transform;
}
public boolean fetchSource() {
return this.fetchSource;
}
public FetchSourceContext fetchSource(boolean fetchSource) {
this.fetchSource = fetchSource;
return this;
}
/**
* Should the document be transformed after the source is loaded?
*/
public boolean transformSource() {
return this.transformSource;
}
/**
* Should the document be transformed after the source is loaded?
* @return this for chaining
*/
public FetchSourceContext transformSource(boolean transformSource) {
this.transformSource = transformSource;
return this;
}
public String[] includes() {
return this.includes;
}
public FetchSourceContext includes(String[] includes) {
this.includes = includes;
return this;
}
public String[] excludes() {
return this.excludes;
}
public FetchSourceContext excludes(String[] excludes) {
this.excludes = excludes;
return this;
}
public static FetchSourceContext optionalReadFromStream(StreamInput in) throws IOException {
if (!in.readBoolean()) {
return null;
}
FetchSourceContext context = new FetchSourceContext();
context.readFrom(in);
return context;
}
public static void optionalWriteToStream(FetchSourceContext context, StreamOutput out) throws IOException {
if (context == null) {
out.writeBoolean(false);
return;
}
out.writeBoolean(true);
context.writeTo(out);
}
public static FetchSourceContext parseFromRestRequest(RestRequest request) {
Boolean fetchSource = null;
String[] source_excludes = null;
String[] source_includes = null;
String source = request.param("_source");
if (source != null) {
if (Booleans.isExplicitTrue(source)) {
fetchSource = true;
} else if (Booleans.isExplicitFalse(source)) {
fetchSource = false;
} else {
source_includes = Strings.splitStringByCommaToArray(source);
}
}
String sIncludes = request.param("_source_includes");
sIncludes = request.param("_source_include", sIncludes);
if (sIncludes != null) {
source_includes = Strings.splitStringByCommaToArray(sIncludes);
}
String sExcludes = request.param("_source_excludes");
sExcludes = request.param("_source_exclude", sExcludes);
if (sExcludes != null) {
source_excludes = Strings.splitStringByCommaToArray(sExcludes);
}
boolean transform = request.paramAsBoolean("_source_transform", false);
if (fetchSource != null || source_includes != null || source_excludes != null || transform) {
return new FetchSourceContext(fetchSource == null ? true : fetchSource, source_includes, source_excludes, transform);
}
return null;
}
@Override
public void readFrom(StreamInput in) throws IOException {
fetchSource = in.readBoolean();
includes = in.readStringArray();
excludes = in.readStringArray();
transformSource = in.readBoolean();
}
@Override
public void writeTo(StreamOutput out) throws IOException {
out.writeBoolean(fetchSource);
out.writeStringArray(includes);
out.writeStringArray(excludes);
out.writeBoolean(transformSource);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FetchSourceContext that = (FetchSourceContext) o;
if (fetchSource != that.fetchSource) return false;
if (!Arrays.equals(excludes, that.excludes)) return false;
if (!Arrays.equals(includes, that.includes)) return false;
return true;
}
@Override
public int hashCode() {
int result = (fetchSource ? 1 : 0);
result = 31 * result + (includes != null ? Arrays.hashCode(includes) : 0);
result = 31 * result + (excludes != null ? Arrays.hashCode(excludes) : 0);
return result;
}
}