// Path: src/main/java/org/bigtesting/fixd/session/Session.java
// public class Session {
// 
//     private final String sessionId;
//     
//     private final Map<String, Object> values = new HashMap<String, Object>();
//     
//     private boolean valid = true;
//     
//     public Session() {
//         
//         this.sessionId = UUID.randomUUID().toString();
//     }
//     
//     public String getSessionId() {
//         
//         return sessionId;
//     }
//     
//     public Object get(String key) {
//         
//         return values.get(key);
//     }
//     
//     public void set(String key, Object value) {
//         
//         values.put(key, value);
//     }
//     
//     public Set<String> getAttributeNames() {
//         
//         return values.keySet();
//     }
//     
//     public boolean isValid() {
//         
//         return valid;
//     }
//     
//     public void invalidate() {
//         
//         this.valid = false;
//     }
// }


import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Set;
import org.bigtesting.fixd.session.Session;
import org.bigtesting.routd.Route;
/*
 * 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.request;



/**
 * 
 * @author Luis Antunes
 */
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
     */
// Path: src/main/java/org/bigtesting/fixd/session/Session.java
// public class Session {
// 
//     private final String sessionId;
//     
//     private final Map<String, Object> values = new HashMap<String, Object>();
//     
//     private boolean valid = true;
//     
//     public Session() {
//         
//         this.sessionId = UUID.randomUUID().toString();
//     }
//     
//     public String getSessionId() {
//         
//         return sessionId;
//     }
//     
//     public Object get(String key) {
//         
//         return values.get(key);
//     }
//     
//     public void set(String key, Object value) {
//         
//         values.put(key, value);
//     }
//     
//     public Set<String> getAttributeNames() {
//         
//         return values.keySet();
//     }
//     
//     public boolean isValid() {
//         
//         return valid;
//     }
//     
//     public void invalidate() {
//         
//         this.valid = false;
//     }
// }


// Path: src/main/java/org/bigtesting/fixd/request/HttpRequest.java
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Set;
import org.bigtesting.fixd.session.Session;
import org.bigtesting.routd.Route;

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



/**
 * 
 * @author Luis Antunes
 */
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();