// Path: src/main/java/org/bigtesting/fixd/request/HttpRequest.java
// public interface HttpRequest {
// 
//     String getPath();
//     
//     String getUndecodedPath();
//     
//     Set<String> getRequestParameterNames();
//     
//     String getRequestParameter(String name);
//     
//     String getPathParameter(String name);
//     
//     List<String> getHeaderNames();
//     
//     String getHeaderValue(String name);
//     
//     String getBody();
//     
//     InputStream getBodyAsStream() throws IOException;
//     
//     <T> T getBody(Class<T> type);
//     
//     long getContentLength();
//     
//     String getContentType();
//     
//     String getMethod();
//     
//     long getTime();
//     
//     String getQuery();
//     
//     int getMajor();
//     
//     int getMinor();
//     
//     String getTarget();
//     
//     /**
//      * @return a session, if it exists, or null if it does not
//      */
//     Session getSession();
//     
//     Route getRoute();
// }
// 
// Path: src/main/java/org/bigtesting/fixd/util/RequestUtils.java
// public class RequestUtils {
// 
//     public static byte[] readBody(InputStream in) {
//         
//         ByteArrayOutputStream out = new ByteArrayOutputStream();
//         try {
//             
//             byte[] buffer = new byte[1024];
//             int len = 0;
//             while ((len = in.read(buffer)) != -1) {
//                 out.write(buffer, 0, len);
//             }
//             
//         } catch (IOException e) {
//             throw new RuntimeException("error getting body", e);
//         } finally {
//             if (in != null) try {in.close();} catch (IOException e2) {}
//         }
//         
//         return out.toByteArray();
//     }
//     
//     public static String getUndecodedPath(Request request) {
//         
//         String path = request.getTarget();
//         int queryIndex = path.indexOf('?');
//         if (queryIndex != -1) {
//             path = path.substring(0, queryIndex);
//         }
//         return path;
//     }
// }


import java.io.IOException;
import org.bigtesting.fixd.request.HttpRequest;
import org.bigtesting.fixd.util.RequestUtils;
/*
 * Copyright (C) 2015 BigTesting.org
 *
 * Licensed 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.bigtesting.fixd.interpolation;



/**
 * 
 * @author Luis Antunes
 */
class RequestBodyValueProvider implements RequestValueProvider<String> {

    public String getValue(HttpRequest request) {
        
        try {
// Path: src/main/java/org/bigtesting/fixd/request/HttpRequest.java
// public interface HttpRequest {
// 
//     String getPath();
//     
//     String getUndecodedPath();
//     
//     Set<String> getRequestParameterNames();
//     
//     String getRequestParameter(String name);
//     
//     String getPathParameter(String name);
//     
//     List<String> getHeaderNames();
//     
//     String getHeaderValue(String name);
//     
//     String getBody();
//     
//     InputStream getBodyAsStream() throws IOException;
//     
//     <T> T getBody(Class<T> type);
//     
//     long getContentLength();
//     
//     String getContentType();
//     
//     String getMethod();
//     
//     long getTime();
//     
//     String getQuery();
//     
//     int getMajor();
//     
//     int getMinor();
//     
//     String getTarget();
//     
//     /**
//      * @return a session, if it exists, or null if it does not
//      */
//     Session getSession();
//     
//     Route getRoute();
// }
// 
// Path: src/main/java/org/bigtesting/fixd/util/RequestUtils.java
// public class RequestUtils {
// 
//     public static byte[] readBody(InputStream in) {
//         
//         ByteArrayOutputStream out = new ByteArrayOutputStream();
//         try {
//             
//             byte[] buffer = new byte[1024];
//             int len = 0;
//             while ((len = in.read(buffer)) != -1) {
//                 out.write(buffer, 0, len);
//             }
//             
//         } catch (IOException e) {
//             throw new RuntimeException("error getting body", e);
//         } finally {
//             if (in != null) try {in.close();} catch (IOException e2) {}
//         }
//         
//         return out.toByteArray();
//     }
//     
//     public static String getUndecodedPath(Request request) {
//         
//         String path = request.getTarget();
//         int queryIndex = path.indexOf('?');
//         if (queryIndex != -1) {
//             path = path.substring(0, queryIndex);
//         }
//         return path;
//     }
// }


// Path: src/main/java/org/bigtesting/fixd/interpolation/RequestBodyValueProvider.java
import java.io.IOException;
import org.bigtesting.fixd.request.HttpRequest;
import org.bigtesting.fixd.util.RequestUtils;

/*
 * Copyright (C) 2015 BigTesting.org
 *
 * Licensed 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.bigtesting.fixd.interpolation;



/**
 * 
 * @author Luis Antunes
 */
class RequestBodyValueProvider implements RequestValueProvider<String> {

    public String getValue(HttpRequest request) {
        
        try {
            return new String(RequestUtils.readBody(request.getBodyAsStream()));