Skip to content
Permalink
Browse files

Java api: change base class for GetIndexedScriptRequest and improve i…

…ts javadocs

`GetIndexedScriptRequest` now extends `ActionRequest` instead of `SingleShardOperationRequest`, as the index field that was provided with the previous base class is not needed (hardcoded).

Closes #7553
  • Loading branch information...
javanna committed Sep 3, 2014
1 parent 4af86b2 commit 33d00b94582a2d9a7fe2a0cc211b18e2990e9044
@@ -19,9 +19,12 @@

package org.elasticsearch.action.indexedscripts.get;

import org.elasticsearch.Version;
import org.elasticsearch.action.ActionRequest;
import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.IndicesRequest;
import org.elasticsearch.action.ValidateActions;
import org.elasticsearch.action.support.single.shard.SingleShardOperationRequest;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -33,15 +36,12 @@
import java.io.IOException;

/**
* A request to get a document (its source) from an index based on its type/language (optional) and id. Best created using
* {@link org.elasticsearch.client.Requests#getRequest(String)}.
* <p/>
* <p>The operation requires the {@link #index()}, {@link #scriptLang(String)} and {@link #id(String)}
* to be set.
* A request to get an indexed script (its source) based on its language (optional) and id.
* The operation requires the {@link #scriptLang(String)} and {@link #id(String)} to be set.
*
* @see GetIndexedScriptResponse
*/
public class GetIndexedScriptRequest extends SingleShardOperationRequest<GetIndexedScriptRequest> {
public class GetIndexedScriptRequest extends ActionRequest<GetIndexedScriptRequest> implements IndicesRequest {

protected String scriptLang;
protected String id;
@@ -56,32 +56,28 @@
private VersionType versionType = VersionType.INTERNAL;
private long version = Versions.MATCH_ANY;



/**
* Constructs a new get request against the script index. The {@link #scriptLang(String)} and {@link #id(String)}
* must be set.
*/
public GetIndexedScriptRequest() {
super(ScriptService.SCRIPT_INDEX);

}

/**
* Constructs a new get request against the script index with the type and id.
*
* @param index The index to get the document from
* @param scriptLang The type of the document
* @param id The id of the document
* @param scriptLang The language of the script
* @param id The id of the script
*/
public GetIndexedScriptRequest(String index, String scriptLang, String id) {
super(index);
public GetIndexedScriptRequest(String scriptLang, String id) {
this.scriptLang = scriptLang;
this.id = id;
}

@Override
public ActionRequestValidationException validate() {
ActionRequestValidationException validationException = super.validate();
ActionRequestValidationException validationException = null;
if (scriptLang == null) {
validationException = ValidateActions.addValidationError("type is missing", validationException);
}
@@ -100,16 +96,22 @@ public ActionRequestValidationException validate() {
return new String[]{ScriptService.SCRIPT_INDEX};
}


@Override
public IndicesOptions indicesOptions() {
return IndicesOptions.strictSingleIndexNoExpandForbidClosed();
}

/**
* Sets the type of the document to fetch.
* Sets the language of the script to fetch.
*/
public GetIndexedScriptRequest scriptLang(@Nullable String type) {
this.scriptLang = type;
return this;
}

/**
* Sets the id of the document to fetch.
* Sets the id of the script to fetch.
*/
public GetIndexedScriptRequest id(String id) {
this.id = id;
@@ -125,17 +127,8 @@ public GetIndexedScriptRequest routing(String routing) {
return this;
}


/**
* Explicitly specify the fields that will be returned. By default, the <tt>_source</tt>
* field will be returned.
*/
public String[] fields() {
return null;
}

/**
* Sets the preference to execute the search. Defaults to randomize across shards. Can be set to
* Sets the preference to execute the get. Defaults to randomize across shards. Can be set to
* <tt>_local</tt> to prefer local shards, <tt>_primary</tt> to execute only on primary shards, or
* a custom value, which guarantees that the same order will be used across different requests.
*/
@@ -211,6 +204,10 @@ public VersionType versionType() {
@Override
public void readFrom(StreamInput in) throws IOException {
super.readFrom(in);
if (in.getVersion().before(Version.V_1_4_0)) {
//the index was previously serialized although not needed
in.readString();
}
scriptLang = in.readString();
id = in.readString();
preference = in.readOptionalString();
@@ -231,13 +228,17 @@ public void readFrom(StreamInput in) throws IOException {
@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
if (out.getVersion().before(Version.V_1_4_0)) {

This comment has been minimized.

Copy link
@s1monw

s1monw Sep 3, 2014

Contributor

should we have a simple BWC test for this?

This comment has been minimized.

Copy link
@javanna

javanna Sep 3, 2014

Author Member

Good point, should have added it in the first place, will do

This comment has been minimized.

Copy link
@javanna

javanna Sep 3, 2014

Author Member

Hey @s1monw I looked into it and wrote a unit test for the serialization methods. Hard to write a be comp test as the api has only been added in 1.3 and we don't seem to have the infrastucture yet to skip tests based on the version of the external nodes. We could add this though...

This comment has been minimized.

Copy link
@s1monw

s1monw Sep 3, 2014

Contributor

all good :) thanks

//the index was previously serialized although not needed
out.writeString(ScriptService.SCRIPT_INDEX);
}
out.writeString(scriptLang);
out.writeString(id);
out.writeOptionalString(preference);
out.writeBoolean(refresh);
if (realtime == null) {
out.writeByte((byte) -1);
} else if (realtime == false) {
} else if (!realtime) {
out.writeByte((byte) 0);
} else {
out.writeByte((byte) 1);
@@ -251,7 +252,6 @@ public void writeTo(StreamOutput out) throws IOException {

@Override
public String toString() {
return "[" + index + "][" + scriptLang + "][" + id + "]: routing [" + routing + "]";

return "[" + ScriptService.SCRIPT_INDEX + "][" + scriptLang + "][" + id + "]: routing [" + routing + "]";
}
}
@@ -19,23 +19,18 @@
package org.elasticsearch.rest.action.script;

import org.elasticsearch.ElasticsearchIllegalStateException;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.indexedscripts.get.GetIndexedScriptRequest;
import org.elasticsearch.action.indexedscripts.get.GetIndexedScriptResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentHelper;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.*;
import org.elasticsearch.rest.action.support.RestResponseListener;
import org.elasticsearch.script.ScriptService;

import java.io.IOException;
import java.util.Map;

import static org.elasticsearch.rest.RestRequest.Method.GET;
import static org.elasticsearch.rest.RestStatus.NOT_FOUND;
@@ -47,16 +42,15 @@
public class RestGetIndexedScriptAction extends BaseRestHandler {

@Inject
public RestGetIndexedScriptAction(Settings settings, Client client,
ScriptService scriptService, RestController controller) {
public RestGetIndexedScriptAction(Settings settings, Client client, RestController controller) {
super(settings, client);
controller.registerHandler(GET, "/_scripts/{lang}/{id}", this);
}

@Override
public void handleRequest(final RestRequest request, final RestChannel channel, Client client) {

final GetIndexedScriptRequest getRequest = new GetIndexedScriptRequest(ScriptService.SCRIPT_INDEX, request.param("lang"), request.param("id"));
final GetIndexedScriptRequest getRequest = new GetIndexedScriptRequest(request.param("lang"), request.param("id"));
RestResponseListener<GetIndexedScriptResponse> responseListener = new RestResponseListener<GetIndexedScriptResponse>(channel) {
@Override
public RestResponse buildResponse(GetIndexedScriptResponse response) throws Exception {
@@ -19,21 +19,18 @@
package org.elasticsearch.rest.action.template;

import org.elasticsearch.ElasticsearchIllegalStateException;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.indexedscripts.get.GetIndexedScriptRequest;
import org.elasticsearch.action.indexedscripts.get.GetIndexedScriptResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.*;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.*;
import org.elasticsearch.rest.action.support.RestResponseListener;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.search.aggregations.support.ValuesSource;

import java.io.IOException;
import java.util.Map;

import static org.elasticsearch.rest.RestRequest.Method.GET;
import static org.elasticsearch.rest.RestStatus.NOT_FOUND;
@@ -45,15 +42,14 @@
public class RestGetSearchTemplateAction extends BaseRestHandler {

@Inject
public RestGetSearchTemplateAction(Settings settings, Client client,
RestController controller, ScriptService scriptService) {
public RestGetSearchTemplateAction(Settings settings, Client client, RestController controller) {
super(settings, client);
controller.registerHandler(GET, "/_search/template/{id}", this);
}

@Override
public void handleRequest(final RestRequest request, final RestChannel channel, Client client) {
final GetIndexedScriptRequest getRequest = new GetIndexedScriptRequest(ScriptService.SCRIPT_INDEX, "mustache", request.param("id"));
final GetIndexedScriptRequest getRequest = new GetIndexedScriptRequest("mustache", request.param("id"));
RestResponseListener<GetIndexedScriptResponse> responseListener = new RestResponseListener<GetIndexedScriptResponse>(channel) {
@Override
public RestResponse buildResponse(GetIndexedScriptResponse response) throws Exception {

0 comments on commit 33d00b9

Please sign in to comment.
You can’t perform that action at this time.