// Path: src/main/java/org/bigtesting/fixd/capture/CapturedRequest.java
// public interface CapturedRequest {
// 
//     String getPath();
//     
//     String getRequestLine();
//     
//     String getMethod();
//     
//     List<String> getHeaders();
//     
//     byte[] getBody();
//     
//     String getBody(String encoding);
//     
//     /**
//      * Returns true if this request was broadcast to any subscribers.
//      */
//     boolean isBroadcast();
// }
// 
// 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 java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.bigtesting.fixd.capture.CapturedRequest;
import org.bigtesting.fixd.util.RequestUtils;
import org.simpleframework.http.Request;
/*
 * 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.capture.impl;



/**
 * 
 * @author Luis Antunes
 */
public class SimpleCapturedRequest implements CapturedRequest {

    private final Request request;
    
    private boolean broadcast = false;
    
    public SimpleCapturedRequest(Request request) {
        this.request = request;
    }
    
    public String getPath() {
        
        return request.getPath().getPath();
    }

    public String getRequestLine() {
        
        return headerLines()[0];
    }

    public String getMethod() {
        
        return request.getMethod();
    }

    public List<String> getHeaders() {
        
        List<String> headers = new ArrayList<String>();
        String[] lines = headerLines();
        for (int i = 1; i < lines.length; i++) {
            headers.add(lines[i]);
        }
        
        return headers;
    }

    public byte[] getBody() {
        
        try {
// Path: src/main/java/org/bigtesting/fixd/capture/CapturedRequest.java
// public interface CapturedRequest {
// 
//     String getPath();
//     
//     String getRequestLine();
//     
//     String getMethod();
//     
//     List<String> getHeaders();
//     
//     byte[] getBody();
//     
//     String getBody(String encoding);
//     
//     /**
//      * Returns true if this request was broadcast to any subscribers.
//      */
//     boolean isBroadcast();
// }
// 
// 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/capture/impl/SimpleCapturedRequest.java
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.bigtesting.fixd.capture.CapturedRequest;
import org.bigtesting.fixd.util.RequestUtils;
import org.simpleframework.http.Request;

/*
 * 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.capture.impl;



/**
 * 
 * @author Luis Antunes
 */
public class SimpleCapturedRequest implements CapturedRequest {

    private final Request request;
    
    private boolean broadcast = false;
    
    public SimpleCapturedRequest(Request request) {
        this.request = request;
    }
    
    public String getPath() {
        
        return request.getPath().getPath();
    }

    public String getRequestLine() {
        
        return headerLines()[0];
    }

    public String getMethod() {
        
        return request.getMethod();
    }

    public List<String> getHeaders() {
        
        List<String> headers = new ArrayList<String>();
        String[] lines = headerLines();
        for (int i = 1; i < lines.length; i++) {
            headers.add(lines[i]);
        }
        
        return headers;
    }

    public byte[] getBody() {
        
        try {
            return RequestUtils.readBody(request.getInputStream());