appswarm 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. data/.autotest +124 -0
  2. data/History.txt +7 -0
  3. data/Manifest.txt +304 -0
  4. data/README.txt +373 -0
  5. data/Rakefile +153 -0
  6. data/TODO +7 -0
  7. data/apps/README.txt +17 -0
  8. data/apps/admin/admin.rb +79 -0
  9. data/apps/admin/controllers/admin.rb +81 -0
  10. data/apps/admin/controllers/settings.rb +63 -0
  11. data/apps/admin/controllers/users.rb +3 -0
  12. data/apps/admin/features/access.feature +21 -0
  13. data/apps/admin/features/mountLocal.feature +12 -0
  14. data/apps/admin/features/settings.feature +68 -0
  15. data/apps/admin/features/startApps.feature +27 -0
  16. data/apps/admin/layouts/main.rhtml +10 -0
  17. data/apps/admin/lib/settings.rb +52 -0
  18. data/apps/admin/static/admin.css +23 -0
  19. data/apps/admin/views/_log.rhtml +21 -0
  20. data/apps/admin/views/index.rhtml +43 -0
  21. data/apps/admin/views/info.rhtml +7 -0
  22. data/apps/admin/views/settings.rhtml +9 -0
  23. data/apps/admin/views/settings/_http_app.rhtml +15 -0
  24. data/apps/admin/views/settings/_web_server.rhtml +32 -0
  25. data/apps/admin/views/settings/index.rhtml +3 -0
  26. data/apps/admin/views/users/index.rhtml +6 -0
  27. data/apps/application_provider/application_provider.rb +11 -0
  28. data/apps/blog/blog.rb +27 -0
  29. data/apps/blog/controllers/blog.rb +29 -0
  30. data/apps/blog/views/index.rhtml +27 -0
  31. data/apps/browser_starter/browser_starter.rb +32 -0
  32. data/apps/crypto/crypto.rb +47 -0
  33. data/apps/crypto/crypto_rsa.rb +102 -0
  34. data/apps/crypto/spec/crypto_spec.rb +10 -0
  35. data/apps/directory_service/directory_service.rb +107 -0
  36. data/apps/directory_service/net_application.rb +92 -0
  37. data/apps/directory_service/spec/directory_service_spec.rb +36 -0
  38. data/apps/directory_service/spec/net_application_spec.rb +3 -0
  39. data/apps/global_application_interface/global_application.rb +52 -0
  40. data/apps/global_application_interface/global_application_interface.rb +84 -0
  41. data/apps/global_application_interface/spec/app_api_spec.rb +5 -0
  42. data/apps/global_tuple_space/global_tuple_space.rb +27 -0
  43. data/apps/global_web_proxy/features/session_handling.feature +7 -0
  44. data/apps/global_web_proxy/global_web_proxy.rb +221 -0
  45. data/apps/global_web_proxy/proxy/HTTPProxyServer-Dateien/rdoc-style.css +208 -0
  46. data/apps/global_web_proxy/proxy/HTTPProxyServer.html +566 -0
  47. data/apps/global_web_proxy/proxy/dnstest.rb +30 -0
  48. data/apps/global_web_proxy/proxy/proxy.rb +86 -0
  49. data/apps/global_web_proxy/proxy/wiki.html +267 -0
  50. data/apps/global_web_proxy/proxy/wiki.rb +115 -0
  51. data/apps/global_web_proxy/spec/res1 +112 -0
  52. data/apps/global_web_proxy/spec/res2 +125 -0
  53. data/apps/global_web_proxy/spec/web_proxy_spec.rb +88 -0
  54. data/apps/global_web_server/global_web_server.rb +120 -0
  55. data/apps/global_web_server/global_web_servlet.rb +6 -0
  56. data/apps/hello_world/controllers/hello_world.rb +11 -0
  57. data/apps/hello_world/features/show_on_local_web_server.feature +44 -0
  58. data/apps/hello_world/features/starting_apps.feature +6 -0
  59. data/apps/hello_world/features/through_global.feature +12 -0
  60. data/apps/hello_world/hello_world.rb +3 -0
  61. data/apps/hello_world/views/get.rhtml +10 -0
  62. data/apps/hello_world/views/index.rhtml +9 -0
  63. data/apps/hello_world/views/post.rhtml +10 -0
  64. data/apps/home/controllers/home.rb +11 -0
  65. data/apps/home/home.rb +12 -0
  66. data/apps/home/layouts/main.rhtml +16 -0
  67. data/apps/home/static/Zeichnung.svg +240 -0
  68. data/apps/home/static/home.css +134 -0
  69. data/apps/home/static/menu.css +99 -0
  70. data/apps/home/views/_appInfo.rhtml +22 -0
  71. data/apps/home/views/_dummy_fill.rhtml +3 -0
  72. data/apps/home/views/_info.rhtml +6 -0
  73. data/apps/home/views/_menu.rhtml +17 -0
  74. data/apps/home/views/index.rhtml +4 -0
  75. data/apps/home/views/overview.rhtml +2 -0
  76. data/apps/local_chunk_store/chunk_store.rb +15 -0
  77. data/apps/local_chunk_store/local_chunk_store.rb +123 -0
  78. data/apps/local_chunk_store/spec/local_chunk_store_spec.rb +30 -0
  79. data/apps/local_file_store/app_configuration.rb +78 -0
  80. data/apps/local_file_store/app_file_store.rb +32 -0
  81. data/apps/local_file_store/cached_file_store.rb +94 -0
  82. data/apps/local_file_store/features/testbed_handling_of_directories.feature +20 -0
  83. data/apps/local_file_store/local_file_store.rb +47 -0
  84. data/apps/local_file_store/spec/app_configuration_spec.rb +30 -0
  85. data/apps/local_file_store/spec/local_file_store_spec.rb +54 -0
  86. data/apps/local_object_storage/lib/cell.rb +29 -0
  87. data/apps/local_object_storage/lib/cellmgr.rb +57 -0
  88. data/apps/local_object_storage/lib/index.rb +43 -0
  89. data/apps/local_object_storage/lib/marshal.rb +96 -0
  90. data/apps/local_object_storage/lib/pagefile.rb +6 -0
  91. data/apps/local_object_storage/lib/persistent_object.rb +126 -0
  92. data/apps/local_object_storage/local_object_storage.rb +148 -0
  93. data/apps/local_object_storage/spec/local_object_storage_spec.rb +123 -0
  94. data/apps/local_secure_file_store/local_secure_file_store.rb +64 -0
  95. data/apps/local_secure_file_store/spec/local_secure_file_store_spec.rb +23 -0
  96. data/apps/local_tuple_space/local_tuple_space.rb +92 -0
  97. data/apps/local_tuple_space/spec/tuple_space_spec.rb +25 -0
  98. data/apps/local_web_server/features/parsing_args.feature +18 -0
  99. data/apps/local_web_server/local_web_server.rb +166 -0
  100. data/apps/logger/logger.rb +27 -0
  101. data/apps/master/master.rb +46 -0
  102. data/apps/master/spec/master_spec.rb +31 -0
  103. data/apps/my_spec_spec.rb +15 -0
  104. data/apps/name_service/name_service.rb +75 -0
  105. data/apps/name_service/spec/name_service_spec.rb +51 -0
  106. data/apps/network_discovery/network_discovery.rb +45 -0
  107. data/apps/network_discovery_localstore/network_discovery_localstore.rb +20 -0
  108. data/apps/network_discovery_udp/network_discovery_udp.rb +51 -0
  109. data/apps/network_lookup/network_lookup.rb +61 -0
  110. data/apps/network_node/abstract_node.rb +104 -0
  111. data/apps/network_node/drb_node.rb +90 -0
  112. data/apps/network_node/network_app.rb +9 -0
  113. data/apps/network_node/network_node.rb +471 -0
  114. data/apps/network_node/remote_service.rb +45 -0
  115. data/apps/network_node/secure_node.rb +125 -0
  116. data/apps/network_node/spec/drb_spec.rb +41 -0
  117. data/apps/network_node/spec/network_node_spec_not.rb +264 -0
  118. data/apps/new_network_node/new_network_node.rb +427 -0
  119. data/apps/new_network_node/spec/new_network_node_spec.rb +186 -0
  120. data/apps/node_broadcast/node_broadcast.rb +167 -0
  121. data/apps/node_broadcast/spec/node_broadcast_spec.rb +59 -0
  122. data/apps/permaspace/permaspace.rb +47 -0
  123. data/apps/plaindb/lib/btree.rb +38 -0
  124. data/apps/plaindb/plaindb.rb +199 -0
  125. data/apps/plaindb/spec/table_write_spec.rb +36 -0
  126. data/apps/routed_network/routed_network.rb +23 -0
  127. data/apps/routed_network/spec/routed_network_spec.rb +17 -0
  128. data/apps/session_manager/session_manager.rb +18 -0
  129. data/apps/spec_output.html +222 -0
  130. data/apps/todo/controllers/todo.rb +87 -0
  131. data/apps/todo/model/comment.rb +10 -0
  132. data/apps/todo/model/project.rb +20 -0
  133. data/apps/todo/model/todo.rb +16 -0
  134. data/apps/todo/model/user.rb +5 -0
  135. data/apps/todo/todo.rb +21 -0
  136. data/apps/todo/views/_commentList.rhtml +7 -0
  137. data/apps/todo/views/_createProject.rhtml +5 -0
  138. data/apps/todo/views/_partList.rhtml +12 -0
  139. data/apps/todo/views/_projectList.rhtml +16 -0
  140. data/apps/todo/views/edit.rhtml +11 -0
  141. data/apps/todo/views/editPart.rhtml +10 -0
  142. data/apps/todo/views/index.rhtml +2 -0
  143. data/apps/todo/views/question.rhtml +4 -0
  144. data/apps/transparent_network/transparent_network.rb +7 -0
  145. data/apps/udp_network/big_transfer.rb +97 -0
  146. data/apps/udp_network/features/information.feature +7 -0
  147. data/apps/udp_network/message_queue.rb +84 -0
  148. data/apps/udp_network/network_interface_api.rb +39 -0
  149. data/apps/udp_network/qos_queue.rb +186 -0
  150. data/apps/udp_network/simple_api.rb +180 -0
  151. data/apps/udp_network/spec/big_transfer_spec.rb +0 -0
  152. data/apps/udp_network/spec/qos_queue_spec.rb +99 -0
  153. data/apps/udp_network/spec/simple_api_spec.rb +35 -0
  154. data/apps/udp_network/spec/udp_network_spec.rb +115 -0
  155. data/apps/udp_network/spec/udp_transceiver_spec.rb +90 -0
  156. data/apps/udp_network/udp_network.rb +196 -0
  157. data/apps/udp_network/udp_transceiver.rb +329 -0
  158. data/apps/wiki/controllers/wiki.rb +56 -0
  159. data/apps/wiki/features/editing.feature +21 -0
  160. data/apps/wiki/layouts/main.rhtml +18 -0
  161. data/apps/wiki/lib/media_wiki_html.rb +35 -0
  162. data/apps/wiki/lib/wikicreole.rb +2147 -0
  163. data/apps/wiki/lib/wikicreole.tt +135 -0
  164. data/apps/wiki/lib/wikitest.rb +158 -0
  165. data/apps/wiki/lib/wikitest.tt +17 -0
  166. data/apps/wiki/model/menu.rb +15 -0
  167. data/apps/wiki/model/page.rb +31 -0
  168. data/apps/wiki/spec/wiki_creole_spec.rb +20 -0
  169. data/apps/wiki/spec/wiki_spec.rb +19 -0
  170. data/apps/wiki/static/Zeichnung.svg +240 -0
  171. data/apps/wiki/static/home.css +134 -0
  172. data/apps/wiki/static/mainMenu.css +32 -0
  173. data/apps/wiki/static/menu.css +99 -0
  174. data/apps/wiki/views/_mainMenu.rhtml +3 -0
  175. data/apps/wiki/views/_menu.rhtml +13 -0
  176. data/apps/wiki/views/edit.rhtml +13 -0
  177. data/apps/wiki/views/index.rhtml +2 -0
  178. data/apps/wiki/views/save.rhtml +1 -0
  179. data/apps/wiki/wiki.rb +17 -0
  180. data/bin/appswarm +47 -0
  181. data/cucumber.yml +2 -0
  182. data/data/PermaspaceApp/AFS_WikiApp_wiki_config +6 -0
  183. data/data/draft.txt +63 -0
  184. data/docs/appswarm_motivation.graffle +0 -0
  185. data/docs/appswarm_pics.graffle/QuickLook/Preview.pdf +0 -0
  186. data/docs/appswarm_pics.graffle/QuickLook/Thumbnail.tiff +0 -0
  187. data/docs/appswarm_pics.graffle/data.plist +63494 -0
  188. data/docs/appswarm_pics.graffle/image1.tiff +0 -0
  189. data/docs/appswarm_pics.graffle/image2.tif +0 -0
  190. data/docs/appswarm_pics.graffle/image3.tif +0 -0
  191. data/docs/appswarm_pics.graffle/image4.tif +0 -0
  192. data/docs/appswarm_pics.graffle/image5.tiff +0 -0
  193. data/docs/routing.graffle +0 -0
  194. data/features/step_definitions/appstart_steps.rb +28 -0
  195. data/features/step_definitions/cluster_steps.rb +18 -0
  196. data/features/step_definitions/testbed_steps.rb +64 -0
  197. data/features/step_definitions/webapp_steps.rb +257 -0
  198. data/features/support/env.rb +7 -0
  199. data/lib/appswarm.rb +127 -0
  200. data/lib/appswarm/README.txt +67 -0
  201. data/lib/appswarm/app_config.rb +19 -0
  202. data/lib/appswarm/application.rb +267 -0
  203. data/lib/appswarm/breaking_mutex.rb +41 -0
  204. data/lib/appswarm/cluster_funcs.rb +157 -0
  205. data/lib/appswarm/cross_spectool.rb +153 -0
  206. data/lib/appswarm/crypt.rb +10 -0
  207. data/lib/appswarm/crypt/crypto.rb +90 -0
  208. data/lib/appswarm/crypt/rsa_key +15 -0
  209. data/lib/appswarm/crypt/rsa_key.pub +5 -0
  210. data/lib/appswarm/crypt/test.rb +27 -0
  211. data/lib/appswarm/dir_tool.rb +41 -0
  212. data/lib/appswarm/event_api.rb +7 -0
  213. data/lib/appswarm/features_helper.rb +44 -0
  214. data/lib/appswarm/global_service.rb +38 -0
  215. data/lib/appswarm/http.rb +1 -0
  216. data/lib/appswarm/http/http_app.rb +257 -0
  217. data/lib/appswarm/http/http_controller.rb +267 -0
  218. data/lib/appswarm/http/http_provider.rb +80 -0
  219. data/lib/appswarm/http/static/favicon.ico +0 -0
  220. data/lib/appswarm/http/static/javascript/._prototype.js +0 -0
  221. data/lib/appswarm/http/static/javascript/prototype.js +2515 -0
  222. data/lib/appswarm/http/webrick_logger.rb +12 -0
  223. data/lib/appswarm/net_service.rb +69 -0
  224. data/lib/appswarm/package.rb +88 -0
  225. data/lib/appswarm/parallel_each.rb +46 -0
  226. data/lib/appswarm/protocols/protocol_dice.rb +25 -0
  227. data/lib/appswarm/proxy_testing.rb +48 -0
  228. data/lib/appswarm/public_api.rb +35 -0
  229. data/lib/appswarm/routing/matrix_math.rb +57 -0
  230. data/lib/appswarm/routing/pca.rb +211 -0
  231. data/lib/appswarm/routing/routetest.rb +85 -0
  232. data/lib/appswarm/routing/routing.rb +326 -0
  233. data/lib/appswarm/routing/spec/nods_spec.rb +23 -0
  234. data/lib/appswarm/routing/spec/pca_spec.rb +27 -0
  235. data/lib/appswarm/routing/spec/routing_spec.rb +91 -0
  236. data/lib/appswarm/secure_con.rb +437 -0
  237. data/lib/appswarm/secure_connection.rb +79 -0
  238. data/lib/appswarm/secure_marshal.rb +137 -0
  239. data/lib/appswarm/service.rb +76 -0
  240. data/lib/appswarm/simple_marshal.rb +96 -0
  241. data/lib/appswarm/simple_marshal_parser.rb +1243 -0
  242. data/lib/appswarm/simple_marshal_parser.tt +158 -0
  243. data/lib/appswarm/spec/application_spec.rb +50 -0
  244. data/lib/appswarm/spec/cluster_spec.rb +2 -0
  245. data/lib/appswarm/spec/hexdist_spec.rb +13 -0
  246. data/lib/appswarm/spec/http_controller_spec.rb +18 -0
  247. data/lib/appswarm/spec/main_spec.rb +6 -0
  248. data/lib/appswarm/spec/parallel_each_spec.rb +30 -0
  249. data/lib/appswarm/spec/secure_connection_spec.rb +108 -0
  250. data/lib/appswarm/spec/secure_marshal_spec.rb +93 -0
  251. data/lib/appswarm/spec/simple_marshal_spec.rb +87 -0
  252. data/lib/appswarm/spec/tools_spec.rb +13 -0
  253. data/lib/appswarm/spec/whiteboard_spec.rb +20 -0
  254. data/lib/appswarm/spec_helper.rb +18 -0
  255. data/lib/appswarm/test_bed.rb +207 -0
  256. data/lib/appswarm/tools.rb +284 -0
  257. data/lib/appswarm/tools/http_tunnel_client.rb +139 -0
  258. data/lib/appswarm/tools/http_tunnel_common.rb +8 -0
  259. data/lib/appswarm/tools/http_tunnel_server.rb +78 -0
  260. data/lib/appswarm/tools/parser/example_data.simple +102 -0
  261. data/lib/appswarm/tools/parser/match_test.rb +14 -0
  262. data/lib/appswarm/tools/parser/parser_lib.rb +165 -0
  263. data/lib/appswarm/tools/parser/parser_test.rb +104 -0
  264. data/lib/appswarm/tools/parser/spec/parser_spec.rb +44 -0
  265. data/lib/appswarm/tools/pipes.rb +95 -0
  266. data/lib/appswarm/tools/spec/tracing_spec.rb +16 -0
  267. data/lib/appswarm/tools/spec/waiting_queue_spec.rb +15 -0
  268. data/lib/appswarm/tools/thread_tool.rb +61 -0
  269. data/lib/appswarm/tools/tracing.rb +84 -0
  270. data/lib/appswarm/tools/treetop_test.rb +20 -0
  271. data/lib/appswarm/tools/treetop_test_grammar.rb +114 -0
  272. data/lib/appswarm/tools/treetop_test_grammar.tt +7 -0
  273. data/lib/appswarm/tools/waiting_prio_queue.rb +47 -0
  274. data/lib/appswarm/tools/waiting_queue.rb +34 -0
  275. data/lib/appswarm/whiteboard.rb +73 -0
  276. data/nettest.rb +50 -0
  277. data/packages/README.txt +1 -0
  278. data/packages/msandbox/data/packages/store/my.txt +1 -0
  279. data/packages/msandbox/interfaces.rb +172 -0
  280. data/packages/msandbox/old/defa.rb +3 -0
  281. data/packages/msandbox/old/test.rb +14 -0
  282. data/packages/msandbox/old/test2.rb +56 -0
  283. data/packages/msandbox/package.rb +67 -0
  284. data/packages/msandbox/packages/store/config.yml +1 -0
  285. data/packages/msandbox/packages/store/main.rb +27 -0
  286. data/packages/msandbox/packages/store/myinclude.rb +7 -0
  287. data/packages/msandbox/packages/store_test/config.yml +1 -0
  288. data/packages/msandbox/packages/store_test/main.rb +9 -0
  289. data/packages/msandbox/server.rb +146 -0
  290. data/packages/msandbox/test.rb +13 -0
  291. data/packages/msandbox/test2.rb +29 -0
  292. data/templates/web/appswarm/controllers/appswarm.rb +41 -0
  293. data/templates/web/appswarm/layouts/main.rhtml +20 -0
  294. data/templates/web/appswarm/models/asmenu.rb +14 -0
  295. data/templates/web/appswarm/models/asuser.rb +30 -0
  296. data/templates/web/appswarm/static/custom.css +15 -0
  297. data/templates/web/appswarm/static/home.css +134 -0
  298. data/templates/web/appswarm/static/mainMenu.css +32 -0
  299. data/templates/web/appswarm/static/menu.css +99 -0
  300. data/templates/web/appswarm/views/_mainMenu.rhtml +5 -0
  301. data/templates/web/appswarm/views/_menu.rhtml +13 -0
  302. data/templates/web/appswarm/views/_userInfo.rhtml +7 -0
  303. data/templates/web/appswarm/views/login.rhtml +9 -0
  304. data/tools/checkPort.rb +11 -0
  305. metadata +379 -0
@@ -0,0 +1 @@
1
+ require 'http/http_app.rb'
@@ -0,0 +1,257 @@
1
+ require 'application.rb'
2
+ require 'http/http_provider.rb'
3
+ require 'http/http_controller.rb'
4
+ require 'lib/settings.rb'
5
+
6
+ class HTTPAppSettings<AdminAppSettings
7
+
8
+ end
9
+
10
+ class HTTPApp<Application
11
+
12
+
13
+ ControllerInfo=Struct.new(:name,:klass,:filePath,:urlPart)
14
+
15
+ Instance=Struct.new(:instanceType,:instanceId,:instanceName,:appName)
16
+
17
+ requires :sessionManager
18
+
19
+ @@mutex=Mutex.new
20
+ def self.index(name)
21
+ @index=name
22
+ end
23
+
24
+ attr_reader :port,:instanceName, :instances
25
+
26
+ def initialize(cluster,options)
27
+ super(cluster,options)
28
+ @port=options[:httpPort]
29
+ @instances=options[:instances]
30
+ @instances||=[]
31
+ @controllers=[]
32
+ getControllerPaths.each{|cntrlPath|loadController(cntrlPath)}
33
+ provides(:httpApp)
34
+ end
35
+
36
+ def quit
37
+ saveRunningInstances
38
+ super
39
+ end
40
+
41
+ def startup
42
+ runStoredInstances
43
+ super
44
+ end
45
+
46
+
47
+ def settings
48
+ HTTPAppSettings.new(self)
49
+ end
50
+
51
+ def createInstance(name)
52
+ i=getInstanceByName(name)
53
+ return i if i
54
+ inst=Instance.new(self.class.to_s,cluster.createInstanceId,name,getAppName)
55
+ @instances<<inst
56
+ inst
57
+ end
58
+
59
+ def deleteInstance(instance)
60
+ case instance
61
+ when String
62
+ instance=getInstanceByName(instance)
63
+ when Instance
64
+ else
65
+ instance=nil
66
+ end
67
+ @instances.delete(instance) if instance
68
+ end
69
+
70
+ def defaultInstance
71
+ createInstance("default")
72
+ end
73
+
74
+ def getInstanceByName(name)
75
+ @instances.select{|i|i.instanceName==name}[0]
76
+ end
77
+
78
+ def handle(req,res,args,sessionId,instance,currentUrl)
79
+ begin
80
+ controller,func,*dummy=req.path_info.sub(/^\//,'').split("/")
81
+ log "path_info #{req.path_info}"
82
+ log "HANDLE #{controller} :: #{func}"
83
+ controller=getController(:urlPart=>controller) if controller
84
+ if controller.nil?
85
+ controller||=mainController
86
+ func,*dummy=req.path_info.sub(/^\//,'').split("/")
87
+ end
88
+ raise "NoController defined" if controller.nil?
89
+ func||="index"
90
+
91
+ path_rest=dummy
92
+
93
+ l=controller.klass.new(self,instance)
94
+ l.run(instance,res,func,args,path_rest,currentUrl)
95
+ rescue Object=>e
96
+ # maybe a file ?
97
+ path=req.path_info
98
+ log "PATH:",path
99
+
100
+ #path=File.join(getAppDir,"static",path)
101
+ log "PATH:",path
102
+ unless render_static(res,path)
103
+ path=path.gsub(/[^\/]*\//,'')
104
+ unless render_static(res,path)
105
+ raise e
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ def findFile(fileName)
112
+ f=File.join(getAppDir,fileName)
113
+ return f if File.exists?(f)
114
+ #f=File.join(getAppDir,"..",fileName)
115
+ #return f if File.exists?(f)
116
+ return nil
117
+ end
118
+
119
+ def render_static(res,filename)
120
+ paths=[File.join(getAppDir,"static/"),File.expand_path('../static',__FILE__)]
121
+ paths.each{|path|
122
+ cp=File.join(path,filename)
123
+ #cp=findFile(File.join("static",filename))
124
+ if cp and File.file?(cp)
125
+ f=File.open(cp,"r")
126
+ c=f.read
127
+ f.close
128
+ res.body=c
129
+ res["Content-Type"]=case filename.gsub(/.*\./,"")
130
+ when "css"
131
+ "text/css"
132
+ when "svg"
133
+ "image/svg+xml"
134
+ when "ico"
135
+ "image/icon"
136
+ else
137
+ "text/plain"
138
+ end
139
+ return true
140
+ end
141
+ }
142
+ false
143
+ end
144
+
145
+
146
+ def run
147
+ # do nothing for mow
148
+ end
149
+
150
+ def instancesFor(provider,appName)
151
+ instances=retrieveConfig[:instances].content
152
+ if instances
153
+
154
+ else
155
+ if @instances
156
+ instances=@instances.map{|i|[i,i]}
157
+ else
158
+ instances=[["defaultInstance",""]]
159
+ end
160
+ end
161
+ instances.map{|instance|
162
+ instanceName,url=instance
163
+ [instanceName,"/"+appName+"/"+url]
164
+ }
165
+ end
166
+
167
+ def url
168
+ base=""
169
+ base= @p.url if @p
170
+ mc=mainController
171
+ log "ControllerName #{mc} #{mc.urlPart}"
172
+ log "BASE #{base}"
173
+ return base+"/"+mc.urlPart if mc
174
+ "/"
175
+ end
176
+
177
+ def serviceAddress(instance,path="")
178
+ raise "Instance not found!" unless @instances.member?(instance)
179
+ [getAppName,instance,path]
180
+ end
181
+
182
+ # FIXME
183
+ def machine
184
+ "localhost"
185
+ end
186
+
187
+ def stop
188
+ @p.stop if @p.is_a?(HTTPProvider)
189
+ end
190
+
191
+ def halt
192
+ @p.stop if @p.is_a?(HTTPProvider)
193
+ end
194
+
195
+ def getControllerPaths
196
+ path=File.join(getAppDir,"controllers","*.rb")
197
+ log "Controllers #{Dir[path]}"
198
+ Dir[path]
199
+ end
200
+
201
+
202
+ def controllerName(controller)
203
+ controller.gsub(/.*\//,"").gsub(".rb","").camelCase
204
+ end
205
+
206
+ def mainController
207
+ cntrl=@controllers.select{|c|c.name.downcase==getAppName.downcase}[0]
208
+ cntrl||@controllers[0] #FIXME: take controller with same name
209
+ end
210
+
211
+ def getController(hash)
212
+ info=@controllers.select{|c|
213
+ ok=true
214
+ hash.each{|k,v|
215
+ ok&=(c.send(k)==v)
216
+ }
217
+ ok
218
+ }[0]
219
+ return nil unless info
220
+ info=loadController(info.filePath) if $DEBUGGING
221
+ info
222
+ end
223
+
224
+ def loadController(controllerPath)
225
+ log "Loading Controller #{controllerPath}"
226
+ controllerName=controllerName(controllerPath)
227
+ log controllerName
228
+ controllerPrg=File.load(controllerPath)
229
+ return unless controllerPrg
230
+ log "OK loaded"
231
+ self.class.send(:class_eval,controllerPrg) #create class
232
+
233
+ klass=self.class.class_eval(controllerName)
234
+
235
+ info=ControllerInfo.new(controllerName,klass,controllerPath,controllerName.underscored)
236
+
237
+ @controllers<<info unless @controllers.select{|c|c.klass==klass}.length>0
238
+ info
239
+ end
240
+
241
+
242
+ private
243
+ def saveRunningInstances
244
+ config=retrieveConfig
245
+ config["instances"]=@instances
246
+ end
247
+
248
+ def runStoredInstances
249
+ config=retrieveConfig
250
+ inst=config["instances"].content
251
+ if inst.is_a?(Array)
252
+ inst.each{|i|
253
+ @instances<<i
254
+ }
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,267 @@
1
+ require 'erb'
2
+
3
+
4
+ def use_template(category,name)
5
+ begin
6
+ case category
7
+ when :web
8
+ path=File.join(asBaseDir,"templates","web",name.to_s)
9
+ $:<<path
10
+
11
+ cntrlPath=File.join(path,"controllers")
12
+ controllerFiles=Dir[File.join(cntrlPath,"*")]
13
+ controllerFiles.each{|f|load f}
14
+ end
15
+ rescue Object=>e
16
+ log "Error:",e,e.backtrace
17
+ end
18
+ end
19
+
20
+ class HTTPController
21
+
22
+ class DummyResult
23
+ attr_accessor :body,:status
24
+ def initialize
25
+ @body=nil
26
+ @values={}
27
+ end
28
+ def []=(name,value)
29
+ @values[name]=value
30
+ end
31
+ end
32
+
33
+ attr_accessor :contentType
34
+ attr_accessor :params,:sessionId
35
+
36
+ class UnknownAction<Exception
37
+ def initialize(e)
38
+ @e=e
39
+
40
+ end
41
+ def to_s
42
+ if @e.is_a?(Exception)
43
+ "Unknown Exception #{@e.inspect}\n"+@e.backtrace.join("\n")
44
+ else
45
+ "Unknown Exception #{@e.inspect}"
46
+ end
47
+ end
48
+ end
49
+
50
+ def self.layout(layoutName)
51
+ @@layoutName||={}
52
+ @@layoutName[self]=layoutName
53
+ #log "SETTING LAYOUT: #{self}"
54
+ end
55
+ def layoutName
56
+ @@layoutName||={}
57
+ @@layoutName[self.class]
58
+ end
59
+
60
+ WebRequest=Struct.new(:path,:args)
61
+
62
+ def initialize(app,instanceName)
63
+ @app=app
64
+ @b=binding
65
+ @view=true
66
+ @instanceName=instanceName
67
+ @params={}
68
+
69
+ @basePaths=[@app.getAppDir,File.expand_path('..',__FILE__)]
70
+ end
71
+
72
+ def log(*args)
73
+ @app.log(*args)
74
+ end
75
+
76
+ def session
77
+ @app.getApp(:sessionManager).get(@app,sessionId)
78
+ end
79
+
80
+ def findFile(fileName)
81
+ @basePaths.each{|p|
82
+ f=File.join(p,fileName)
83
+ return f if File.exists?(f)
84
+ }
85
+ return nil
86
+ end
87
+
88
+ def viewInstead(rhtml)
89
+ @mrhtml=rhtml
90
+ end
91
+
92
+
93
+ def run(instance,res,action,args,path_rest,currentUrl)
94
+ log "controller-run"
95
+ log "ACTION ",action
96
+ @res=res
97
+ @instance=instance
98
+ @currentUrl=currentUrl
99
+ @params=args
100
+
101
+ path=path_rest
102
+
103
+ action||="index"
104
+ log "ACTION #{action} #{args}"
105
+ if respond_to?(action)
106
+ webRequest=WebRequest.new(path,args)
107
+ m=method(action)
108
+ if m
109
+ if m.arity>0
110
+ send(action,webRequest)
111
+ else
112
+ send(action)
113
+ end
114
+ end
115
+ else
116
+ log "#{self} DOES not respond to #{action}"
117
+ res.status=404
118
+ end
119
+ log "VIEW:#{@view}"
120
+ if @view
121
+ begin
122
+ #action=@mrhtml if @mrhtml
123
+ mrhtml=@mrhtml||action
124
+ #mrhtml=action
125
+ cntrlName=controllerName
126
+ path=File.join("views",cntrlName,"#{mrhtml}.rhtml")
127
+ if cntrlName==@app.getAppName.underscored
128
+ path=File.join("views","#{mrhtml}.rhtml")
129
+ end
130
+ filename=findFile(path)
131
+ log "FILE #{filename} #{path}"
132
+ @mrhtml=nil
133
+ if filename
134
+ c=File.read(filename)
135
+ res.body=ERB.new(c).result binding
136
+ res["Content-Type"]="text/html"
137
+ #log "RES:",res
138
+
139
+ log "LAYOUT #{self.class} #{layoutName}"
140
+
141
+ if layoutName and not action=~/_.*/
142
+ layout=layoutName.to_s
143
+ #filename="apps/#{app.shortName.downcase}/layouts/#{layout}.rhtml"
144
+ filename=findFile(File.join("layouts","#{layout}.rhtml"))
145
+ if File.file?(filename)
146
+ c=File.read(filename)
147
+ content=res.body
148
+ res.body=ERB.new(c).result binding
149
+ res["Content-Type"]="text/html"
150
+ end
151
+ end
152
+ log "OK"
153
+
154
+ # FIXME: fix content-size !!!
155
+
156
+ else
157
+ raise UnknownAction.new(action)
158
+ end
159
+
160
+
161
+ rescue Exception=>e
162
+ raise e if e.is_a?(UnknownAction)
163
+ raise UnknownAction.new(e)
164
+ end
165
+ end
166
+ end
167
+ def method_missing(name,*s)
168
+ if s.length==0 and instance_variable_defined?("@"+name.to_s)
169
+ instance_variable_get("@"+name.to_s)
170
+ else
171
+ super
172
+ end
173
+ end
174
+ def render_html(html)
175
+ @res.body=html
176
+ @res["Content-Type"]="text/html"
177
+ @view=false
178
+ end
179
+ def redirect_to(purl)
180
+ purl=url(purl) if purl.is_a?(Hash)
181
+ @res.header["Location"]=purl
182
+ @res["Content-Type"]="text/html"
183
+ @res.body="<HTML><A HREF=\"#{purl.to_s}\">#{purl.to_s}</A>.</HTML>\n"
184
+ @res.status=302
185
+ @view=false
186
+ end
187
+ def url(a)
188
+
189
+ ps=[]
190
+ a.each{|n,v|
191
+ if n!=:action
192
+ ps << "#{n}=#{v}"
193
+ end
194
+ }
195
+ args=ps.join("&")
196
+ args="?#{args}" if args.length>0
197
+
198
+ u=@currentUrl.gsub(/\/$/,'')
199
+
200
+ if urlPart!=@app.mainController.urlPart
201
+ u+="/#{urlPart}"
202
+ end
203
+ u+"/#{a[:action]}"+args
204
+ end
205
+
206
+ def urlPart
207
+ self.class.to_s.gsub(/.*:/,'').underscored
208
+ end
209
+
210
+ def self.controllerName
211
+ self.to_s.downcase.gsub(/.*:/,"")
212
+ end
213
+
214
+ def controllerName
215
+ name.gsub(/.*:/,"")
216
+ end
217
+ def name
218
+ self.class.to_s.downcase
219
+ end
220
+
221
+ def render_partial(name,args={}) # FIXME args={} ???
222
+ res=DummyResult.new
223
+ #log name
224
+ run(@instance,res,"_"+name.to_s,args,[],@currentUrl)
225
+
226
+ return res.body
227
+ end
228
+
229
+ def count(name,to=nil)
230
+ @counters||={}
231
+ @counters[name]||=0
232
+ @counters[name]+=1
233
+ if @counters[name]>=to
234
+ @counters[name]=0
235
+ end
236
+ @counters[name]
237
+ end
238
+
239
+ def css(file)
240
+ file+=".css" unless file=~/\.css$/
241
+ "<link rel=\"stylesheet\" href=\"#{url(:action=>file)}\" type=\"text/css\" media=\"screen\" />"
242
+ end
243
+
244
+ def javascript(file)
245
+ file+=".js" unless file=~/\.js$/
246
+
247
+ local=findFile(File.join("static",file))
248
+ if local
249
+ file=local
250
+ else
251
+ file=File.join("/javascript",file)
252
+ end
253
+ "<script language='javascript' src='#{file}'></script>"
254
+ end
255
+ private :javascript
256
+
257
+ end
258
+ #
259
+
260
+ class TemplateController<HTTPController
261
+ def initialize(*args)
262
+ super
263
+ templateCntrlFile=caller[0].split(":")[0]
264
+ templateDir=File.expand_path('../..',templateCntrlFile)
265
+ @basePaths<<templateDir
266
+ end
267
+ end