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;
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 }