// Path: src/main/java/org/elasticsearch/action/preparespec/PrepareSpecAction.java
// public class PrepareSpecAction extends Action<PrepareSpecRequest, PrepareSpecResponse, PrepareSpecRequestBuilder> {
// 
//     public static final PrepareSpecAction INSTANCE = new PrepareSpecAction();
//     public static final String NAME = "indices:data/create/spec";
// 
//     private PrepareSpecAction() {
//         super(NAME);
//     }
// 
//     @Override
//     public PrepareSpecResponse newResponse() {
//         return new PrepareSpecResponse();
//     }
// 
//     @Override
//     public PrepareSpecRequestBuilder newRequestBuilder(ElasticsearchClient client) {
//         return new PrepareSpecRequestBuilder(client);
//     }
// }
// 
// Path: src/main/java/org/elasticsearch/action/preparespec/PrepareSpecRequest.java
// public class PrepareSpecRequest extends ActionRequest<PrepareSpecRequest> {
// 
//     private String source;
//     private String id;
// 
//     public PrepareSpecRequest() {
// 
//     }
//     public PrepareSpecRequest(String source) {
//         this.source = source;
// 
//     }
// 
//     @Override
//     public ActionRequestValidationException validate() {
//         ActionRequestValidationException validationException = null;
//         if (source == null) {
//             validationException = ValidateActions.addValidationError("prepare_spec needs a source", validationException);
//         }
//         return validationException;
//     }
// 
//     @Override
//     public void readFrom(StreamInput in) throws IOException {
//         super.readFrom(in);
//         source = in.readString();
//         id = in.readOptionalString();
// 
//     }
// 
//     @Override
//     public void writeTo(StreamOutput out) throws IOException {
//         super.writeTo(out);
//         out.writeString(source);
//         out.writeOptionalString(id);
//     }
// 
// 
//     public PrepareSpecRequest source(String source) {
//         this.source = source;
//         return this;
//     }
// 
//     public String source() {
//         return source;
//     }
// 
//     public void id(String id) {
//         this.id = id;
//     }
// 
//     public String id() {
//         return id;
//     }
// }
// 
// Path: src/main/java/org/elasticsearch/action/preparespec/PrepareSpecResponse.java
// public class PrepareSpecResponse extends ActionResponse implements ToXContent {
// 
//     private BytesReference spec;
//     private Map<String, Object> specAsMap;
//     private int length;
// 
//     public PrepareSpecResponse() {
// 
//     }
// 
//     public PrepareSpecResponse(BytesReference spec, int length) {
//         this.spec = spec;
//         this.length = length;
//     }
//     public BytesReference getSpec() {
//         return spec;
//     }
// 
//     public Map<String, Object> getSpecAsMap() {
//         if (specAsMap == null) {
//             specAsMap = Collections.unmodifiableMap(XContentHelper.convertToMap(spec, true).v2());
//         }
//         return specAsMap;
//     }
// 
//     public int getLength() {
//         return length;
//     }
// 
// 
//     @Override
//     public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
//         builder.rawField(Fields.SPEC, spec);
//         builder.field(Fields.LENGTH, length);
//         return builder;
//     }
// 
//     static final class Fields {
//         static final String SPEC = "spec";
//         static final String LENGTH = "length";
//     }
// 
//     @Override
//     public void readFrom(StreamInput in) throws IOException {
//         super.readFrom(in);
//         spec = in.readBytesReference();
//         length = in.readInt();
//     }
// 
//     @Override
//     public void writeTo(StreamOutput out) throws IOException {
//         super.writeTo(out);
//         out.writeBytesReference(spec);
//         out.writeInt(length);
//     }
// }


import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.preparespec.PrepareSpecAction;
import org.elasticsearch.action.preparespec.PrepareSpecRequest;
import org.elasticsearch.action.preparespec.PrepareSpecResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.node.NodeClient;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestChannel;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestResponse;
import org.elasticsearch.rest.action.RestBuilderListener;
import java.io.IOException;
import java.nio.charset.Charset;
import static org.elasticsearch.rest.RestRequest.Method.POST;
import static org.elasticsearch.rest.RestStatus.OK;
/*
 * 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.rest.action.preparespec;




/**
 *
 */
public class RestPrepareSpecAction extends BaseRestHandler {

    @Inject
    public RestPrepareSpecAction(Settings settings, RestController controller) {
        super(settings);
        controller.registerHandler(POST, "/_prepare_spec", this);
    }

    @Override
    protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
        String id = request.param("id");
// Path: src/main/java/org/elasticsearch/action/preparespec/PrepareSpecAction.java
// public class PrepareSpecAction extends Action<PrepareSpecRequest, PrepareSpecResponse, PrepareSpecRequestBuilder> {
// 
//     public static final PrepareSpecAction INSTANCE = new PrepareSpecAction();
//     public static final String NAME = "indices:data/create/spec";
// 
//     private PrepareSpecAction() {
//         super(NAME);
//     }
// 
//     @Override
//     public PrepareSpecResponse newResponse() {
//         return new PrepareSpecResponse();
//     }
// 
//     @Override
//     public PrepareSpecRequestBuilder newRequestBuilder(ElasticsearchClient client) {
//         return new PrepareSpecRequestBuilder(client);
//     }
// }
// 
// Path: src/main/java/org/elasticsearch/action/preparespec/PrepareSpecRequest.java
// public class PrepareSpecRequest extends ActionRequest<PrepareSpecRequest> {
// 
//     private String source;
//     private String id;
// 
//     public PrepareSpecRequest() {
// 
//     }
//     public PrepareSpecRequest(String source) {
//         this.source = source;
// 
//     }
// 
//     @Override
//     public ActionRequestValidationException validate() {
//         ActionRequestValidationException validationException = null;
//         if (source == null) {
//             validationException = ValidateActions.addValidationError("prepare_spec needs a source", validationException);
//         }
//         return validationException;
//     }
// 
//     @Override
//     public void readFrom(StreamInput in) throws IOException {
//         super.readFrom(in);
//         source = in.readString();
//         id = in.readOptionalString();
// 
//     }
// 
//     @Override
//     public void writeTo(StreamOutput out) throws IOException {
//         super.writeTo(out);
//         out.writeString(source);
//         out.writeOptionalString(id);
//     }
// 
// 
//     public PrepareSpecRequest source(String source) {
//         this.source = source;
//         return this;
//     }
// 
//     public String source() {
//         return source;
//     }
// 
//     public void id(String id) {
//         this.id = id;
//     }
// 
//     public String id() {
//         return id;
//     }
// }
// 
// Path: src/main/java/org/elasticsearch/action/preparespec/PrepareSpecResponse.java
// public class PrepareSpecResponse extends ActionResponse implements ToXContent {
// 
//     private BytesReference spec;
//     private Map<String, Object> specAsMap;
//     private int length;
// 
//     public PrepareSpecResponse() {
// 
//     }
// 
//     public PrepareSpecResponse(BytesReference spec, int length) {
//         this.spec = spec;
//         this.length = length;
//     }
//     public BytesReference getSpec() {
//         return spec;
//     }
// 
//     public Map<String, Object> getSpecAsMap() {
//         if (specAsMap == null) {
//             specAsMap = Collections.unmodifiableMap(XContentHelper.convertToMap(spec, true).v2());
//         }
//         return specAsMap;
//     }
// 
//     public int getLength() {
//         return length;
//     }
// 
// 
//     @Override
//     public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
//         builder.rawField(Fields.SPEC, spec);
//         builder.field(Fields.LENGTH, length);
//         return builder;
//     }
// 
//     static final class Fields {
//         static final String SPEC = "spec";
//         static final String LENGTH = "length";
//     }
// 
//     @Override
//     public void readFrom(StreamInput in) throws IOException {
//         super.readFrom(in);
//         spec = in.readBytesReference();
//         length = in.readInt();
//     }
// 
//     @Override
//     public void writeTo(StreamOutput out) throws IOException {
//         super.writeTo(out);
//         out.writeBytesReference(spec);
//         out.writeInt(length);
//     }
// }


// Path: src/main/java/org/elasticsearch/rest/action/preparespec/RestPrepareSpecAction.java
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.preparespec.PrepareSpecAction;
import org.elasticsearch.action.preparespec.PrepareSpecRequest;
import org.elasticsearch.action.preparespec.PrepareSpecResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.node.NodeClient;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestChannel;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestResponse;
import org.elasticsearch.rest.action.RestBuilderListener;
import java.io.IOException;
import java.nio.charset.Charset;
import static org.elasticsearch.rest.RestRequest.Method.POST;
import static org.elasticsearch.rest.RestStatus.OK;

/*
 * 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.rest.action.preparespec;




/**
 *
 */
public class RestPrepareSpecAction extends BaseRestHandler {

    @Inject
    public RestPrepareSpecAction(Settings settings, RestController controller) {
        super(settings);
        controller.registerHandler(POST, "/_prepare_spec", this);
    }

    @Override
    protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
        String id = request.param("id");
        final PrepareSpecRequest prepareSpecRequest = new PrepareSpecRequest();