View Javadoc

1   package com.bradmcevoy.http;
2   
3   import java.util.Date;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import org.slf4j.Logger;
8   import org.slf4j.LoggerFactory;
9   
10  public abstract class AbstractRequest implements Request {
11  
12      private Logger log = LoggerFactory.getLogger( AbstractRequest.class );
13      public static final int INFINITY = 3; // To limit tree browsing a bit
14  
15      public abstract String getRequestHeader( Request.Header header );
16      private final Map<String, Object> attributes = new HashMap<String, Object>();
17  
18      public Date getIfModifiedHeader() {
19          String s = getRequestHeader( Request.Header.IF_MODIFIED );
20          if( s == null || s.length() == 0 ) return null;
21  
22          try {
23              return DateUtils.parseDate( s );
24          } catch( DateUtils.DateParseException ex ) {
25              log.error( "Unable to parse date: " + s, ex );
26              return null;
27          }
28      }
29  
30      public String getExpectHeader() {
31          return getRequestHeader( Request.Header.EXPECT );
32      }
33  
34      public String getAcceptHeader() {
35          return getRequestHeader( Request.Header.ACCEPT );
36      }
37  
38      public String getRefererHeader() {
39          return getRequestHeader( Request.Header.REFERER );
40      }
41  
42      public String getContentTypeHeader() {
43          return getRequestHeader( Request.Header.CONTENT_TYPE );
44      }
45  
46      public String getAcceptEncodingHeader() {
47          return getRequestHeader( Request.Header.ACCEPT_ENCODING );
48      }
49  
50      public String getUserAgentHeader() {
51          return getRequestHeader( Header.USER_AGENT );
52      }
53  
54  
55  
56      public int getDepthHeader() {
57          String depthStr = getRequestHeader( Request.Header.DEPTH );
58          if( depthStr == null ) {
59              return INFINITY;
60          } else {
61              if( depthStr.equals( "0" ) ) {
62                  return 0;
63              } else if( depthStr.equals( "1" ) ) {
64                  return 1;
65              } else if( depthStr.equals( "infinity" ) ) {
66                  return INFINITY;
67              } else {
68                  log.warn( "Unknown depth value: " + depthStr );
69                  return INFINITY;
70              }
71          }
72      }
73  
74      public String getHostHeader() {
75          return getRequestHeader( Header.HOST );
76      }
77  
78      public String getDestinationHeader() {
79          return getRequestHeader( Header.DESTINATION );
80      }
81  
82      public Long getContentLengthHeader() {
83          String s = getRequestHeader( Header.CONTENT_LENGTH );
84          if( s == null || s.length() == 0 ) return null;
85          try {
86              long l = Long.parseLong( s );
87              return l;
88          } catch( NumberFormatException ex ) {
89              log.warn( "Couldnt parse content length header: " + s );
90              return null;
91          }
92      }
93  
94      public String getTimeoutHeader() {
95          return getRequestHeader( Header.TIMEOUT );
96      }
97  
98      public String getIfHeader() {
99          return getRequestHeader( Header.IF );
100     }
101 
102     public String getLockTokenHeader() {
103         return getRequestHeader( Header.LOCK_TOKEN );
104     }
105 
106     public String getRangeHeader() {
107         return getRequestHeader( Header.RANGE );
108     }
109 
110     public String getContentRangeHeader() {
111         return getRequestHeader( Header.CONTENT_RANGE );
112     }
113 
114 
115     public Boolean getOverwriteHeader() {
116         String s = getRequestHeader( Header.OVERWRITE );
117         if( s == null || s.length() == 0 ) return null;
118         return "T".equals( s );
119     }
120 
121     public String getAbsolutePath() {
122         return stripToPath( getAbsoluteUrl() );
123     }
124 
125     public static String stripToPath( String url ) {
126         int i = url.indexOf( "/", 8 );
127         if( i > 0 ) {
128             url = url.substring( i );
129         }
130         i = url.indexOf("?");
131         if( i > 0 ) {
132             url = url.substring(0,i);
133         }
134         return url;
135     }
136 
137     public Map<String, Object> getAttributes() {
138         return attributes;
139     }
140 
141     public Map<String, String> getParams() {
142         return (Map<String, String>) attributes.get( "_params" );
143     }
144 
145     public Map<String, FileItem> getFiles() {
146         return (Map<String, FileItem>) attributes.get( "_files" );
147     }
148 }