golf 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. data/.gitignore +10 -0
  2. data/Gemfile +6 -0
  3. data/Gemfile.lock +21 -0
  4. data/Rakefile +12 -0
  5. data/bin/golf +8 -0
  6. data/golf-java/README.markdown +41 -0
  7. data/golf-java/THANKS.markdown +14 -0
  8. data/golf-java/build/classes.zip +0 -0
  9. data/golf-java/build/com/thinkminimo/golf/GolfResource$MimeMapping$MimeMappingSingleton.class +0 -0
  10. data/golf-java/build/com/thinkminimo/golf/GolfResource$MimeMapping.class +0 -0
  11. data/golf-java/build/com/thinkminimo/golf/GolfResource.class +0 -0
  12. data/golf-java/build/com/thinkminimo/golf/GolfServlet$1.class +0 -0
  13. data/golf-java/build/com/thinkminimo/golf/GolfServlet$GolfContext.class +0 -0
  14. data/golf-java/build/com/thinkminimo/golf/GolfServlet$GolfParams.class +0 -0
  15. data/golf-java/build/com/thinkminimo/golf/GolfServlet$GolfSession.class +0 -0
  16. data/golf-java/build/com/thinkminimo/golf/GolfServlet$PermanentRedirectException.class +0 -0
  17. data/golf-java/build/com/thinkminimo/golf/GolfServlet$RedirectException.class +0 -0
  18. data/golf-java/build/com/thinkminimo/golf/GolfServlet$StoredJSVM.class +0 -0
  19. data/golf-java/build/com/thinkminimo/golf/GolfServlet.class +0 -0
  20. data/golf-java/build/com/thinkminimo/golf/JsonpTunnel.class +0 -0
  21. data/golf-java/build/com/thinkminimo/golf/Main$1.class +0 -0
  22. data/golf-java/build/com/thinkminimo/golf/Main$RingList.class +0 -0
  23. data/golf-java/build/com/thinkminimo/golf/Main.class +0 -0
  24. data/golf-java/build/com/thinkminimo/golf/ProxyServlet.class +0 -0
  25. data/golf-java/build/com/yahoo/platform/yui/compressor/CssCompressor.class +0 -0
  26. data/golf-java/build/com/yahoo/platform/yui/compressor/JarClassLoader.class +0 -0
  27. data/golf-java/build/com/yahoo/platform/yui/compressor/JavaScriptCompressor.class +0 -0
  28. data/golf-java/build/com/yahoo/platform/yui/compressor/JavaScriptIdentifier.class +0 -0
  29. data/golf-java/build/com/yahoo/platform/yui/compressor/JavaScriptToken.class +0 -0
  30. data/golf-java/build/com/yahoo/platform/yui/compressor/ScriptOrFnScope.class +0 -0
  31. data/golf-java/build/depends.zip +0 -0
  32. data/golf-java/build/golf +2 -0
  33. data/golf-java/build/org/json/JSONArray.class +0 -0
  34. data/golf-java/build/org/json/JSONException.class +0 -0
  35. data/golf-java/build/org/json/JSONObject$1.class +0 -0
  36. data/golf-java/build/org/json/JSONObject$Null.class +0 -0
  37. data/golf-java/build/org/json/JSONObject.class +0 -0
  38. data/golf-java/build/org/json/JSONString.class +0 -0
  39. data/golf-java/build/org/json/JSONStringer.class +0 -0
  40. data/golf-java/build/org/json/JSONTokener.class +0 -0
  41. data/golf-java/build/org/json/JSONWriter.class +0 -0
  42. data/golf-java/build/resources.zip +0 -0
  43. data/golf-java/build.xml +174 -0
  44. data/golf-java/dist/golf.zip +0 -0
  45. data/golf-java/lib/ant-launcher.jar +0 -0
  46. data/golf-java/lib/ant.jar +0 -0
  47. data/golf-java/lib/commons-codec-1.4.jar +0 -0
  48. data/golf-java/lib/commons-collections-3.2.1.jar +0 -0
  49. data/golf-java/lib/commons-fileupload-1.2.1.jar +0 -0
  50. data/golf-java/lib/commons-httpclient-3.1.jar +0 -0
  51. data/golf-java/lib/commons-io-1.4.jar +0 -0
  52. data/golf-java/lib/commons-lang-2.4.jar +0 -0
  53. data/golf-java/lib/commons-logging-1.1.1.jar +0 -0
  54. data/golf-java/lib/cssparser-0.9.5.jar +0 -0
  55. data/golf-java/lib/getopt-0.1-dev.jar +0 -0
  56. data/golf-java/lib/htmlunit-2.6.jar +0 -0
  57. data/golf-java/lib/htmlunit-core-js-2.6.jar +0 -0
  58. data/golf-java/lib/java-xmlbuilder-1.jar +0 -0
  59. data/golf-java/lib/jets3t-0.7.0.jar +0 -0
  60. data/golf-java/lib/jetty-6.1.15.jar +0 -0
  61. data/golf-java/lib/jetty-util-6.1.15.jar +0 -0
  62. data/golf-java/lib/log4j-1.2.15.jar +0 -0
  63. data/golf-java/lib/nekohtml-1.9.13.jar +0 -0
  64. data/golf-java/lib/sac-1.3.jar +0 -0
  65. data/golf-java/lib/serializer-2.7.1.jar +0 -0
  66. data/golf-java/lib/servlet-api-2.5-20081211.jar +0 -0
  67. data/golf-java/lib/xalan-2.7.1.jar +0 -0
  68. data/golf-java/lib/xercesImpl-2.9.1.jar +0 -0
  69. data/golf-java/lib/xml-apis-1.3.04.jar +0 -0
  70. data/golf-java/resources/app_error.html +60 -0
  71. data/golf-java/resources/error.html +29 -0
  72. data/golf-java/resources/forcebot.txt +0 -0
  73. data/golf-java/resources/forceclient.txt +0 -0
  74. data/golf-java/resources/forceproxy.txt +0 -0
  75. data/golf-java/resources/head.html +0 -0
  76. data/golf-java/resources/jquery.address.js +439 -0
  77. data/golf-java/resources/jquery.golf.js +945 -0
  78. data/golf-java/resources/jquery.js +4376 -0
  79. data/golf-java/resources/jsdetect.html +23 -0
  80. data/golf-java/resources/loading.gif +0 -0
  81. data/golf-java/resources/new.html +45 -0
  82. data/golf-java/resources/new.static.html +45 -0
  83. data/golf-java/resources/noscript.forceclient.html +11 -0
  84. data/golf-java/resources/noscript.html +18 -0
  85. data/golf-java/resources/noscript.static.html +15 -0
  86. data/golf-java/resources/project.xml +21 -0
  87. data/golf-java/resources/proxy_project.xml +11 -0
  88. data/golf-java/resources/proxy_web.xml +40 -0
  89. data/golf-java/resources/static_project.xml +37 -0
  90. data/golf-java/resources/version +1 -0
  91. data/golf-java/resources/web.xml +36 -0
  92. data/golf-java/resources/welcome2golf.html +50 -0
  93. data/golf-java/src/com/thinkminimo/golf/GolfResource.java +582 -0
  94. data/golf-java/src/com/thinkminimo/golf/GolfServlet.java +1055 -0
  95. data/golf-java/src/com/thinkminimo/golf/JsonpTunnel.java +86 -0
  96. data/golf-java/src/com/thinkminimo/golf/Main.java +1299 -0
  97. data/golf-java/src/com/thinkminimo/golf/ProxyServlet.java +577 -0
  98. data/golf-java/src/com/yahoo/platform/yui/compressor/CssCompressor.java +188 -0
  99. data/golf-java/src/com/yahoo/platform/yui/compressor/JarClassLoader.java +158 -0
  100. data/golf-java/src/com/yahoo/platform/yui/compressor/JavaScriptCompressor.java +1281 -0
  101. data/golf-java/src/com/yahoo/platform/yui/compressor/JavaScriptIdentifier.java +55 -0
  102. data/golf-java/src/com/yahoo/platform/yui/compressor/JavaScriptToken.java +28 -0
  103. data/golf-java/src/com/yahoo/platform/yui/compressor/ScriptOrFnScope.java +160 -0
  104. data/golf-java/src/org/json/JSONArray.java +934 -0
  105. data/golf-java/src/org/json/JSONException.java +27 -0
  106. data/golf-java/src/org/json/JSONObject.java +1550 -0
  107. data/golf-java/src/org/json/JSONString.java +18 -0
  108. data/golf-java/src/org/json/JSONStringer.java +78 -0
  109. data/golf-java/src/org/json/JSONTokener.java +422 -0
  110. data/golf-java/src/org/json/JSONWriter.java +323 -0
  111. data/golf-java/test/client/golftest/README.markdown +3 -0
  112. data/golf-java/test/client/golftest/components/com/thinkminimo/golf/test/Harness.css +114 -0
  113. data/golf-java/test/client/golftest/components/com/thinkminimo/golf/test/Harness.html +17 -0
  114. data/golf-java/test/client/golftest/components/com/thinkminimo/golf/test/Harness.js +81 -0
  115. data/golf-java/test/client/golftest/components/com/thinkminimo/golf/test/Harness.res/asc.gif +0 -0
  116. data/golf-java/test/client/golftest/components/com/thinkminimo/golf/test/Harness.res/bg.gif +0 -0
  117. data/golf-java/test/client/golftest/components/com/thinkminimo/golf/test/Harness.res/desc.gif +0 -0
  118. data/golf-java/test/client/golftest/components/com/thinkminimo/golf/test/Harness.res/test/test.html +1 -0
  119. data/golf-java/test/client/golftest/controller.js +131 -0
  120. data/golf-java/test/client/golftest/forceclient.txt +0 -0
  121. data/golf-java/test/client/golftest/forceproxy.txt +0 -0
  122. data/golf-java/test/client/golftest/head.html +1 -0
  123. data/golf-java/test/client/golftest/scripts/jquery.tablesort.js +75 -0
  124. data/golf-java/test/client/golftest/styles/style.css +18 -0
  125. data/golf-java/test/client/golftest/test/test.html +1 -0
  126. data/golf.gemspec +24 -0
  127. data/lib/golf/cli.rb +32 -0
  128. data/lib/golf/compiler.rb +12 -0
  129. data/lib/golf/rack.rb +17 -0
  130. data/lib/golf/version.rb +3 -0
  131. data/lib/golf.rb +6 -0
  132. data/template/Gemfile +5 -0
  133. data/template/config.ru +7 -0
  134. data/template/golfapp/components/Test/Test.html +22 -0
  135. data/template/golfapp/components/Test/Test.res/myfile.txt +1 -0
  136. data/template/golfapp/controller.js +10 -0
  137. data/template/golfapp/plugins/mylib.js +12 -0
  138. data/test/test_compiler.rb +10 -0
  139. data/test/test_helper.rb +6 -0
  140. data/test/test_rack.rb +17 -0
  141. metadata +208 -0
@@ -0,0 +1,582 @@
1
+ package com.thinkminimo.golf;
2
+
3
+ import java.io.*;
4
+ import java.net.*;
5
+ import java.util.*;
6
+ import javax.servlet.*;
7
+
8
+ public class GolfResource {
9
+
10
+ public static final int SOURCE_NONE = 0;
11
+ public static final int SOURCE_FILE = 1;
12
+ public static final int SOURCE_JAR = 2;
13
+
14
+ public static class MimeMapping extends HashMap<String, String> {
15
+ protected MimeMapping() {
16
+ put(".3dm", "x-world/x-3dmf");
17
+ put(".3dmf", "x-world/x-3dmf");
18
+ put(".a", "application/octet-stream");
19
+ put(".aab", "application/x-authorware-bin");
20
+ put(".aam", "application/x-authorware-map");
21
+ put(".aas", "application/x-authorware-seg");
22
+ put(".abc", "text/vnd.abc");
23
+ put(".acgi", "text/html");
24
+ put(".afl", "video/animaflex");
25
+ put(".ai", "application/postscript");
26
+ put(".aif", "audio/aiff");
27
+ put(".aif", "audio/x-aiff");
28
+ put(".aifc", "audio/aiff");
29
+ put(".aifc", "audio/x-aiff");
30
+ put(".aiff", "audio/aiff");
31
+ put(".aiff", "audio/x-aiff");
32
+ put(".aim", "application/x-aim");
33
+ put(".aip", "text/x-audiosoft-intra");
34
+ put(".ani", "application/x-navi-animation");
35
+ put(".aos", "application/x-nokia-9000-communicator-add-on-software");
36
+ put(".aps", "application/mime");
37
+ put(".arc", "application/octet-stream");
38
+ put(".arj", "application/arj");
39
+ put(".arj", "application/octet-stream");
40
+ put(".art", "image/x-jg");
41
+ put(".asf", "video/x-ms-asf");
42
+ put(".asm", "text/x-asm");
43
+ put(".asp", "text/asp");
44
+ put(".asx", "application/x-mplayer2");
45
+ put(".asx", "video/x-ms-asf");
46
+ put(".asx", "video/x-ms-asf-plugin");
47
+ put(".au", "audio/basic");
48
+ put(".au", "audio/x-au");
49
+ put(".avi", "application/x-troff-msvideo");
50
+ put(".avi", "video/avi");
51
+ put(".avi", "video/msvideo");
52
+ put(".avi", "video/x-msvideo");
53
+ put(".avs", "video/avs-video");
54
+ put(".bcpio", "application/x-bcpio");
55
+ put(".bin", "application/mac-binary");
56
+ put(".bin", "application/macbinary");
57
+ put(".bin", "application/octet-stream");
58
+ put(".bin", "application/x-binary");
59
+ put(".bin", "application/x-macbinary");
60
+ put(".bm", "image/bmp");
61
+ put(".bmp", "image/bmp");
62
+ put(".bmp", "image/x-windows-bmp");
63
+ put(".boo", "application/book");
64
+ put(".book", "application/book");
65
+ put(".boz", "application/x-bzip2");
66
+ put(".bsh", "application/x-bsh");
67
+ put(".bz", "application/x-bzip");
68
+ put(".bz2", "application/x-bzip2");
69
+ put(".c", "text/plain");
70
+ put(".c", "text/x-c");
71
+ put(".c++", "text/plain");
72
+ put(".cat", "application/vnd.ms-pki.seccat");
73
+ put(".cc", "text/plain");
74
+ put(".cc", "text/x-c");
75
+ put(".ccad", "application/clariscad");
76
+ put(".cco", "application/x-cocoa");
77
+ put(".cdf", "application/cdf");
78
+ put(".cdf", "application/x-cdf");
79
+ put(".cdf", "application/x-netcdf");
80
+ put(".cer", "application/pkix-cert");
81
+ put(".cer", "application/x-x509-ca-cert");
82
+ put(".cha", "application/x-chat");
83
+ put(".chat", "application/x-chat");
84
+ put(".class", "application/java");
85
+ put(".class", "application/java-byte-code");
86
+ put(".class", "application/x-java-class");
87
+ put(".com", "application/octet-stream");
88
+ put(".com", "text/plain");
89
+ put(".conf", "text/plain");
90
+ put(".cpio", "application/x-cpio");
91
+ put(".cpp", "text/x-c");
92
+ put(".cpt", "application/mac-compactpro");
93
+ put(".cpt", "application/x-compactpro");
94
+ put(".cpt", "application/x-cpt");
95
+ put(".crl", "application/pkcs-crl");
96
+ put(".crl", "application/pkix-crl");
97
+ put(".crt", "application/pkix-cert");
98
+ put(".crt", "application/x-x509-ca-cert");
99
+ put(".crt", "application/x-x509-user-cert");
100
+ put(".csh", "text/x-script.csh");
101
+ put(".css", "text/css");
102
+ put(".cxx", "text/plain");
103
+ put(".dcr", "application/x-director");
104
+ put(".deepv", "application/x-deepv");
105
+ put(".def", "text/plain");
106
+ put(".der", "application/x-x509-ca-cert");
107
+ put(".dif", "video/x-dv");
108
+ put(".dir", "application/x-director");
109
+ put(".dl", "video/dl");
110
+ put(".dl", "video/x-dl");
111
+ put(".doc", "application/msword");
112
+ put(".dot", "application/msword");
113
+ put(".dp", "application/commonground");
114
+ put(".drw", "application/drafting");
115
+ put(".dump", "application/octet-stream");
116
+ put(".dv", "video/x-dv");
117
+ put(".dvi", "application/x-dvi");
118
+ put(".dwf", "drawing/x-dwf (old)");
119
+ put(".dwf", "model/vnd.dwf");
120
+ put(".dwg", "application/acad");
121
+ put(".dwg", "image/vnd.dwg");
122
+ put(".dwg", "image/x-dwg");
123
+ put(".dxf", "application/dxf");
124
+ put(".dxf", "image/vnd.dwg");
125
+ put(".dxf", "image/x-dwg");
126
+ put(".dxr", "application/x-director");
127
+ put(".el", "text/x-script.elisp");
128
+ put(".elc", "application/x-bytecode.elisp (compiled elisp)");
129
+ put(".elc", "application/x-elc");
130
+ put(".env", "application/x-envoy");
131
+ put(".eps", "application/postscript");
132
+ put(".es", "application/x-esrehber");
133
+ put(".etx", "text/x-setext");
134
+ put(".evy", "application/envoy");
135
+ put(".evy", "application/x-envoy");
136
+ put(".exe", "application/octet-stream");
137
+ put(".f", "text/plain");
138
+ put(".f", "text/x-fortran");
139
+ put(".f77", "text/x-fortran");
140
+ put(".f90", "text/plain");
141
+ put(".f90", "text/x-fortran");
142
+ put(".fdf", "application/vnd.fdf");
143
+ put(".fif", "application/fractals");
144
+ put(".fif", "image/fif");
145
+ put(".fli", "video/fli");
146
+ put(".fli", "video/x-fli");
147
+ put(".flo", "image/florian");
148
+ put(".flx", "text/vnd.fmi.flexstor");
149
+ put(".fmf", "video/x-atomic3d-feature");
150
+ put(".for", "text/plain");
151
+ put(".for", "text/x-fortran");
152
+ put(".fpx", "image/vnd.fpx");
153
+ put(".fpx", "image/vnd.net-fpx");
154
+ put(".frl", "application/freeloader");
155
+ put(".funk", "audio/make");
156
+ put(".g", "text/plain");
157
+ put(".g3", "image/g3fax");
158
+ put(".gif", "image/gif");
159
+ put(".gl", "video/gl");
160
+ put(".gl", "video/x-gl");
161
+ put(".gsd", "audio/x-gsm");
162
+ put(".gsm", "audio/x-gsm");
163
+ put(".gsp", "application/x-gsp");
164
+ put(".gss", "application/x-gss");
165
+ put(".gtar", "application/x-gtar");
166
+ put(".gz", "application/x-compressed");
167
+ put(".gz", "application/x-gzip");
168
+ put(".gzip", "application/x-gzip");
169
+ put(".gzip", "multipart/x-gzip");
170
+ put(".h", "text/plain");
171
+ put(".h", "text/x-h");
172
+ put(".hdf", "application/x-hdf");
173
+ put(".help", "application/x-helpfile");
174
+ put(".hgl", "application/vnd.hp-hpgl");
175
+ put(".hh", "text/plain");
176
+ put(".hh", "text/x-h");
177
+ put(".hlb", "text/x-script");
178
+ put(".hlp", "application/hlp");
179
+ put(".hlp", "application/x-helpfile");
180
+ put(".hlp", "application/x-winhelp");
181
+ put(".hpg", "application/vnd.hp-hpgl");
182
+ put(".hpgl", "application/vnd.hp-hpgl");
183
+ put(".hqx", "application/binhex");
184
+ put(".hqx", "application/binhex4");
185
+ put(".hqx", "application/mac-binhex");
186
+ put(".hqx", "application/mac-binhex40");
187
+ put(".hqx", "application/x-binhex40");
188
+ put(".hqx", "application/x-mac-binhex40");
189
+ put(".hta", "application/hta");
190
+ put(".htc", "text/x-component");
191
+ put(".htm", "text/html");
192
+ put(".html", "text/html");
193
+ put(".htmls", "text/html");
194
+ put(".htt", "text/webviewhtml");
195
+ put(".htx", "text/html");
196
+ put(".ice", "x-conference/x-cooltalk");
197
+ put(".ico", "image/x-icon");
198
+ put(".idc", "text/plain");
199
+ put(".ief", "image/ief");
200
+ put(".iefs", "image/ief");
201
+ put(".iges", "application/iges");
202
+ put(".iges", "model/iges");
203
+ put(".igs", "application/iges");
204
+ put(".igs", "model/iges");
205
+ put(".ima", "application/x-ima");
206
+ put(".imap", "application/x-httpd-imap");
207
+ put(".inf", "application/inf");
208
+ put(".ins", "application/x-internett-signup");
209
+ put(".ip", "application/x-ip2");
210
+ put(".isu", "video/x-isvideo");
211
+ put(".it", "audio/it");
212
+ put(".iv", "application/x-inventor");
213
+ put(".ivr", "i-world/i-vrml");
214
+ put(".ivy", "application/x-livescreen");
215
+ put(".jam", "audio/x-jam");
216
+ put(".jav", "text/plain");
217
+ put(".jav", "text/x-java-source");
218
+ put(".java", "text/plain");
219
+ put(".java", "text/x-java-source");
220
+ put(".jcm", "application/x-java-commerce");
221
+ put(".jfif", "image/jpeg");
222
+ put(".jfif", "image/pjpeg");
223
+ put(".jfif-tbnl", "image/jpeg");
224
+ put(".jpe", "image/jpeg");
225
+ put(".jpe", "image/pjpeg");
226
+ put(".jpeg", "image/jpeg");
227
+ put(".jpeg", "image/pjpeg");
228
+ put(".jpg", "image/jpeg");
229
+ put(".jpg", "image/pjpeg");
230
+ put(".jps", "image/x-jps");
231
+ put(".js", "text/javascript");
232
+ put(".jut", "image/jutvision");
233
+ put(".kar", "audio/midi");
234
+ put(".kar", "music/x-karaoke");
235
+ put(".ksh", "application/x-ksh");
236
+ put(".ksh", "text/x-script.ksh");
237
+ put(".la", "audio/nspaudio");
238
+ put(".la", "audio/x-nspaudio");
239
+ put(".lam", "audio/x-liveaudio");
240
+ put(".latex", "application/x-latex");
241
+ put(".lha", "application/lha");
242
+ put(".lha", "application/octet-stream");
243
+ put(".lha", "application/x-lha");
244
+ put(".lhx", "application/octet-stream");
245
+ put(".list", "text/plain");
246
+ put(".lma", "audio/nspaudio");
247
+ put(".lma", "audio/x-nspaudio");
248
+ put(".log", "text/plain");
249
+ put(".lsp", "application/x-lisp");
250
+ put(".lsp", "text/x-script.lisp");
251
+ put(".lst", "text/plain");
252
+ put(".lsx", "text/x-la-asf");
253
+ put(".ltx", "application/x-latex");
254
+ put(".lzh", "application/octet-stream");
255
+ put(".lzh", "application/x-lzh");
256
+ put(".lzx", "application/lzx");
257
+ put(".lzx", "application/octet-stream");
258
+ put(".lzx", "application/x-lzx");
259
+ put(".m", "text/plain");
260
+ put(".m", "text/x-m");
261
+ put(".m1v", "video/mpeg");
262
+ put(".m2a", "audio/mpeg");
263
+ put(".m2v", "video/mpeg");
264
+ put(".m3u", "audio/x-mpequrl");
265
+ put(".man", "application/x-troff-man");
266
+ put(".map", "application/x-navimap");
267
+ put(".mar", "text/plain");
268
+ put(".mbd", "application/mbedlet");
269
+ put(".mc$", "application/x-magic-cap-package-1.0");
270
+ put(".mcd", "application/mcad");
271
+ put(".mcd", "application/x-mathcad");
272
+ put(".mcf", "image/vasa");
273
+ put(".mcf", "text/mcf");
274
+ put(".mcp", "application/netmc");
275
+ put(".me", "application/x-troff-me");
276
+ put(".mht", "message/rfc822");
277
+ put(".mhtml", "message/rfc822");
278
+ put(".mid", "application/x-midi");
279
+ put(".mid", "audio/midi");
280
+ put(".mid", "audio/x-mid");
281
+ put(".mid", "audio/x-midi");
282
+ put(".mid", "music/crescendo");
283
+ put(".mid", "x-music/x-midi");
284
+ put(".midi", "application/x-midi");
285
+ put(".midi", "audio/midi");
286
+ put(".midi", "audio/x-mid");
287
+ put(".midi", "audio/x-midi");
288
+ put(".midi", "music/crescendo");
289
+ put(".midi", "x-music/x-midi");
290
+ put(".mif", "application/x-frame");
291
+ put(".mif", "application/x-mif");
292
+ put(".mime", "message/rfc822");
293
+ put(".mime", "www/mime");
294
+ put(".mjf", "audio/x-vnd.audioexplosion.mjuicemediafile");
295
+ put(".mjpg", "video/x-motion-jpeg");
296
+ put(".mm", "application/base64");
297
+ put(".mm", "application/x-meme");
298
+ put(".mme", "application/base64");
299
+ put(".mod", "audio/mod");
300
+ put(".mod", "audio/x-mod");
301
+ put(".moov", "video/quicktime");
302
+ put(".mov", "video/quicktime");
303
+ put(".movie", "video/x-sgi-movie");
304
+ put(".mp2", "audio/mpeg");
305
+ put(".mp2", "audio/x-mpeg");
306
+ put(".mp2", "video/mpeg");
307
+ put(".mp2", "video/x-mpeg");
308
+ put(".mp2", "video/x-mpeq2a");
309
+ put(".mp3", "audio/mpeg3");
310
+ put(".mp3", "audio/x-mpeg-3");
311
+ put(".mp3", "video/mpeg");
312
+ put(".mp3", "video/x-mpeg");
313
+ put(".mpa", "audio/mpeg");
314
+ put(".mpa", "video/mpeg");
315
+ put(".mpc", "application/x-project");
316
+ put(".mpe", "video/mpeg");
317
+ put(".mpeg", "video/mpeg");
318
+ put(".mpg", "audio/mpeg");
319
+ put(".mpg", "video/mpeg");
320
+ put(".mpga", "audio/mpeg");
321
+ put(".mpp", "application/vnd.ms-project");
322
+ put(".mpt", "application/x-project");
323
+ put(".mpv", "application/x-project");
324
+ put(".mpx", "application/x-project");
325
+ put(".mrc", "application/marc");
326
+ put(".ms", "application/x-troff-ms");
327
+ put(".mv", "video/x-sgi-movie");
328
+ put(".my", "audio/make");
329
+ put(".mzz", "application/x-vnd.audioexplosion.mzz");
330
+ put(".nap", "image/naplps");
331
+ put(".naplps", "image/naplps");
332
+ put(".nc", "application/x-netcdf");
333
+ put(".ncm", "application/vnd.nokia.configuration-message");
334
+ put(".nif", "image/x-niff");
335
+ put(".niff", "image/x-niff");
336
+ put(".nix", "application/x-mix-transfer");
337
+ put(".nsc", "application/x-conference");
338
+ put(".nvd", "application/x-navidoc");
339
+ put(".o", "application/octet-stream");
340
+ put(".oda", "application/oda");
341
+ put(".omc", "application/x-omc");
342
+ put(".omcd", "application/x-omcdatamaker");
343
+ put(".omcr", "application/x-omcregerator");
344
+ put(".p", "text/x-pascal");
345
+ put(".p10", "application/pkcs10");
346
+ put(".p10", "application/x-pkcs10");
347
+ put(".p12", "application/pkcs-12");
348
+ put(".p12", "application/x-pkcs12");
349
+ put(".p7a", "application/x-pkcs7-signature");
350
+ put(".p7c", "application/pkcs7-mime");
351
+ put(".p7c", "application/x-pkcs7-mime");
352
+ put(".p7m", "application/pkcs7-mime");
353
+ put(".p7m", "application/x-pkcs7-mime");
354
+ put(".p7r", "application/x-pkcs7-certreqresp");
355
+ put(".p7s", "application/pkcs7-signature");
356
+ put(".part", "application/pro_eng");
357
+ put(".pas", "text/pascal");
358
+ put(".pbm", "image/x-portable-bitmap");
359
+ put(".pcl", "application/vnd.hp-pcl");
360
+ put(".pcl", "application/x-pcl");
361
+ put(".pct", "image/x-pict");
362
+ put(".pcx", "image/x-pcx");
363
+ put(".pdb", "chemical/x-pdb");
364
+ put(".pdf", "application/pdf");
365
+ put(".pfunk", "audio/make");
366
+ put(".pfunk", "audio/make.my.funk");
367
+ put(".pgm", "image/x-portable-graymap");
368
+ put(".pgm", "image/x-portable-greymap");
369
+ put(".pic", "image/pict");
370
+ put(".pict", "image/pict");
371
+ put(".pkg", "application/x-newton-compatible-pkg");
372
+ put(".pko", "application/vnd.ms-pki.pko");
373
+ put(".pl", "text/plain");
374
+ put(".pl", "text/x-script.perl");
375
+ put(".plx", "application/x-pixclscript");
376
+ put(".pm", "image/x-xpixmap");
377
+ put(".pm", "text/x-script.perl-module");
378
+ put(".pm4", "application/x-pagemaker");
379
+ put(".pm5", "application/x-pagemaker");
380
+ put(".png", "image/png");
381
+ put(".pnm", "application/x-portable-anymap");
382
+ put(".pnm", "image/x-portable-anymap");
383
+ put(".pot", "application/mspowerpoint");
384
+ put(".pot", "application/vnd.ms-powerpoint");
385
+ put(".pov", "model/x-pov");
386
+ put(".ppa", "application/vnd.ms-powerpoint");
387
+ put(".ppm", "image/x-portable-pixmap");
388
+ put(".pps", "application/mspowerpoint");
389
+ put(".pps", "application/vnd.ms-powerpoint");
390
+ put(".ppt", "application/mspowerpoint");
391
+ put(".ppt", "application/powerpoint");
392
+ put(".ppt", "application/vnd.ms-powerpoint");
393
+ put(".ppt", "application/x-mspowerpoint");
394
+ put(".ppz", "application/mspowerpoint");
395
+ put(".pre", "application/x-freelance");
396
+ put(".prt", "application/pro_eng");
397
+ put(".ps", "application/postscript");
398
+ put(".psd", "application/octet-stream");
399
+ put(".pvu", "paleovu/x-pv");
400
+ put(".pwz", "application/vnd.ms-powerpoint");
401
+ put(".py", "text/x-script.phyton");
402
+ put(".pyc", "applicaiton/x-bytecode.python");
403
+ put(".qcp", "audio/vnd.qcelp");
404
+ put(".qd3", "x-world/x-3dmf");
405
+ put(".qd3d", "x-world/x-3dmf");
406
+ put(".qif", "image/x-quicktime");
407
+ put(".qt", "video/quicktime");
408
+ put(".qtc", "video/x-qtc");
409
+ put(".qti", "image/x-quicktime");
410
+ put(".qtif", "image/x-quicktime");
411
+ put(".ra", "audio/x-pn-realaudio");
412
+ put(".ra", "audio/x-pn-realaudio-plugin");
413
+ put(".ra", "audio/x-realaudio");
414
+ put(".ram", "audio/x-pn-realaudio");
415
+ put(".ras", "application/x-cmu-raster");
416
+ put(".ras", "image/cmu-raster");
417
+ put(".ras", "image/x-cmu-raster");
418
+ put(".rast", "image/cmu-raster");
419
+ put(".rexx", "text/x-script.rexx");
420
+ put(".rf", "image/vnd.rn-realflash");
421
+ put(".rgb", "image/x-rgb");
422
+ put(".rm", "application/vnd.rn-realmedia");
423
+ put(".rm", "audio/x-pn-realaudio");
424
+ put(".rmi", "audio/mid");
425
+ put(".rmm", "audio/x-pn-realaudio");
426
+ put(".rmp", "audio/x-pn-realaudio");
427
+ put(".rmp", "audio/x-pn-realaudio-plugin");
428
+ put(".rng", "application/ringing-tones");
429
+ put(".rng", "application/vnd.nokia.ringing-tone");
430
+ put(".rnx", "application/vnd.rn-realplayer");
431
+ put(".roff", "application/x-troff");
432
+ put(".rp", "image/vnd.rn-realpix");
433
+ put(".rpm", "audio/x-pn-realaudio-plugin");
434
+ put(".rt", "text/richtext");
435
+ put(".rt", "text/vnd.rn-realtext");
436
+ put(".rtf", "application/rtf");
437
+ put(".rtf", "application/x-rtf");
438
+ put(".rtf", "text/richtext");
439
+ put(".rtx", "application/rtf");
440
+ put(".rtx", "text/richtext");
441
+ put(".rv", "video/vnd.rn-realvideo");
442
+ put(".s", "text/x-asm");
443
+ put(".s3m", "audio/s3m");
444
+ put(".saveme", "application/octet-stream");
445
+ }
446
+
447
+ private static class MimeMappingSingleton {
448
+ private static final MimeMapping INSTANCE = new MimeMapping();
449
+ }
450
+
451
+ public static String lookup(String path) {
452
+ String ret = null;
453
+ String ext = path.replaceFirst("^.*(\\.[^./]+)$", "$1");
454
+
455
+ if (ext.length() > 0)
456
+ ret = MimeMappingSingleton.INSTANCE.get(ext);
457
+
458
+ return (ret == null ? "text/plain" : ret);
459
+ }
460
+ }
461
+
462
+ public static int BYTE_BUF_SIZE = 4096;
463
+
464
+ private ServletContext mContext;
465
+ private String mPath;
466
+ private ByteArrayOutputStream mBuffer;
467
+ private int mSource;
468
+ private String mMimeType;
469
+ private File mCwd;
470
+
471
+ public GolfResource(ServletContext context, String path)
472
+ throws FileNotFoundException, IOException {
473
+ this(context, null, path);
474
+ }
475
+
476
+ public GolfResource(File cwd, String path)
477
+ throws FileNotFoundException, IOException {
478
+ this(null, cwd, path);
479
+ }
480
+
481
+ protected GolfResource(ServletContext context, File cwd, String path)
482
+ throws FileNotFoundException, IOException {
483
+ mContext = context;
484
+ mPath = path;
485
+ mMimeType = MimeMapping.lookup(path);
486
+ mCwd = cwd;
487
+ getStream();
488
+ }
489
+
490
+ public int getSource() { return mSource; }
491
+ public void setSource(int src) { mSource = src; }
492
+ public String getMimeType() { return mMimeType; }
493
+
494
+ /**
495
+ * Loads contents of resource into the ByteArrayOutputStream, sets the
496
+ * source member.
497
+ */
498
+ private void getStream() throws FileNotFoundException, IOException {
499
+ byte[] buf = new byte[BYTE_BUF_SIZE];
500
+
501
+ InputStream in = null;
502
+ mSource = SOURCE_NONE;
503
+
504
+ if (mContext != null)
505
+ mPath = mPath.replaceFirst("/", "");
506
+
507
+ // from the filesystem
508
+ try {
509
+ File theFile;
510
+ if (mContext != null)
511
+ theFile = new File(mContext.getRealPath(mPath));
512
+ else if (mPath.startsWith("/"))
513
+ theFile = new File(mPath);
514
+ else
515
+ theFile = new File(mCwd, mPath);
516
+
517
+ if (theFile.exists())
518
+ in = new FileInputStream(theFile);
519
+ } catch (Exception x) { }
520
+
521
+ // from the jarfile resource
522
+ if (in == null)
523
+ in = (mContext == null ? this : mContext).getClass().getClassLoader()
524
+ .getResourceAsStream(mPath);
525
+ else
526
+ mSource = SOURCE_FILE;
527
+
528
+ if (in == null)
529
+ throw new FileNotFoundException("File not found (" + mPath + ")");
530
+ else if (mSource == SOURCE_NONE)
531
+ mSource = SOURCE_JAR;
532
+
533
+ mBuffer = new ByteArrayOutputStream(BYTE_BUF_SIZE);
534
+
535
+ int nread;
536
+ while ((nread = in.read(buf)) != -1) mBuffer.write(buf, 0, nread);
537
+ }
538
+
539
+ /**
540
+ * @see java.io.ByteArrayOutputStream#toString()
541
+ */
542
+ public String toString() {
543
+ return mBuffer.toString();
544
+ }
545
+
546
+ /**
547
+ * @see java.io.ByteArrayOutputStream#toString(String)
548
+ */
549
+ public String toString(String enc) throws UnsupportedEncodingException {
550
+ return mBuffer.toString(enc);
551
+ }
552
+
553
+ /**
554
+ * @see java.io.ByteArrayOutputStream#toByteArray()
555
+ */
556
+ public byte[] toByteArray() {
557
+ return mBuffer.toByteArray();
558
+ }
559
+
560
+ /**
561
+ * Converts contents of the file to an arraylist, split on "\n".
562
+ *
563
+ * @return the arraylist
564
+ */
565
+ public ArrayList<String> toArrayList() {
566
+ return toArrayList("\n");
567
+ }
568
+
569
+ /**
570
+ * Converts contents of the file to an arraylist, split on some string.
571
+ *
572
+ * @param c the string on which to split contents
573
+ * @return the arraylist
574
+ */
575
+ public ArrayList<String> toArrayList(String c) {
576
+ String contents = toString();
577
+ ArrayList<String> ret = new ArrayList<String>();
578
+ for (String s : contents.split(c))
579
+ ret.add(s);
580
+ return ret;
581
+ }
582
+ }