rjack-solr 3.6.2.0-java → 4.0.0.0-java

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 (315) hide show
  1. data/History.rdoc +5 -0
  2. data/Manifest.txt +268 -33
  3. data/NOTICE.txt +1 -1
  4. data/README.rdoc +6 -6
  5. data/assembly.xml +2 -2
  6. data/bin/rjack-solr-fg +1 -1
  7. data/init/rjack-solr +2 -2
  8. data/lib/rjack-solr.rb +7 -2
  9. data/lib/rjack-solr/base.rb +2 -2
  10. data/lib/rjack-solr/commons-cli-1.2.jar +0 -0
  11. data/lib/rjack-solr/config.rb +1 -1
  12. data/lib/rjack-solr/server.rb +1 -1
  13. data/lib/rjack-solr/solr-core-4.0.0.jar +0 -0
  14. data/lib/rjack-solr/solr-solrj-4.0.0.jar +0 -0
  15. data/pom.xml +19 -6
  16. data/test/test_solr.rb +7 -5
  17. data/webapp/META-INF/LICENSE.txt +0 -940
  18. data/webapp/META-INF/MANIFEST.MF +5 -5
  19. data/webapp/META-INF/NOTICE.txt +160 -93
  20. data/webapp/WEB-INF/web.xml +57 -43
  21. data/webapp/admin.html +140 -0
  22. data/webapp/css/chosen.css +392 -0
  23. data/webapp/css/styles/analysis.css +293 -0
  24. data/webapp/css/styles/cloud.css +331 -0
  25. data/webapp/css/styles/common.css +593 -0
  26. data/webapp/css/styles/cores.css +203 -0
  27. data/webapp/css/styles/dashboard.css +127 -0
  28. data/webapp/css/styles/dataimport.css +222 -0
  29. data/webapp/css/styles/index.css +195 -0
  30. data/webapp/css/styles/java-properties.css +33 -0
  31. data/webapp/css/styles/logging.css +323 -0
  32. data/webapp/css/styles/menu.css +272 -0
  33. data/webapp/css/styles/plugins.css +175 -0
  34. data/webapp/css/styles/query.css +137 -0
  35. data/webapp/css/styles/replication.css +494 -0
  36. data/webapp/css/styles/schema-browser.css +476 -0
  37. data/webapp/css/styles/threads.css +153 -0
  38. data/webapp/img/ZeroClipboard.swf +0 -0
  39. data/webapp/img/chosen-sprite.png +0 -0
  40. data/webapp/img/div.gif +0 -0
  41. data/webapp/{admin → img}/favicon.ico +0 -0
  42. data/webapp/img/filetypes/7z.png +0 -0
  43. data/webapp/img/filetypes/README +27 -0
  44. data/webapp/img/filetypes/ai.png +0 -0
  45. data/webapp/img/filetypes/aiff.png +0 -0
  46. data/webapp/img/filetypes/asc.png +0 -0
  47. data/webapp/img/filetypes/audio.png +0 -0
  48. data/webapp/img/filetypes/bin.png +0 -0
  49. data/webapp/img/filetypes/bz2.png +0 -0
  50. data/webapp/img/filetypes/c.png +0 -0
  51. data/webapp/img/filetypes/cfc.png +0 -0
  52. data/webapp/img/filetypes/cfm.png +0 -0
  53. data/webapp/img/filetypes/chm.png +0 -0
  54. data/webapp/img/filetypes/class.png +0 -0
  55. data/webapp/img/filetypes/conf.png +0 -0
  56. data/webapp/img/filetypes/cpp.png +0 -0
  57. data/webapp/img/filetypes/cs.png +0 -0
  58. data/webapp/img/filetypes/css.png +0 -0
  59. data/webapp/img/filetypes/csv.png +0 -0
  60. data/webapp/img/filetypes/deb.png +0 -0
  61. data/webapp/img/filetypes/divx.png +0 -0
  62. data/webapp/img/filetypes/doc.png +0 -0
  63. data/webapp/img/filetypes/dot.png +0 -0
  64. data/webapp/img/filetypes/eml.png +0 -0
  65. data/webapp/img/filetypes/enc.png +0 -0
  66. data/webapp/img/filetypes/file.png +0 -0
  67. data/webapp/img/filetypes/gif.png +0 -0
  68. data/webapp/img/filetypes/gz.png +0 -0
  69. data/webapp/img/filetypes/hlp.png +0 -0
  70. data/webapp/img/filetypes/htm.png +0 -0
  71. data/webapp/img/filetypes/html.png +0 -0
  72. data/webapp/img/filetypes/image.png +0 -0
  73. data/webapp/img/filetypes/iso.png +0 -0
  74. data/webapp/img/filetypes/jar.png +0 -0
  75. data/webapp/img/filetypes/java.png +0 -0
  76. data/webapp/img/filetypes/jpeg.png +0 -0
  77. data/webapp/img/filetypes/jpg.png +0 -0
  78. data/webapp/img/filetypes/js.png +0 -0
  79. data/webapp/img/filetypes/lua.png +0 -0
  80. data/webapp/img/filetypes/m.png +0 -0
  81. data/webapp/img/filetypes/mm.png +0 -0
  82. data/webapp/img/filetypes/mov.png +0 -0
  83. data/webapp/img/filetypes/mp3.png +0 -0
  84. data/webapp/img/filetypes/mpg.png +0 -0
  85. data/webapp/img/filetypes/odc.png +0 -0
  86. data/webapp/img/filetypes/odf.png +0 -0
  87. data/webapp/img/filetypes/odg.png +0 -0
  88. data/webapp/img/filetypes/odi.png +0 -0
  89. data/webapp/img/filetypes/odp.png +0 -0
  90. data/webapp/img/filetypes/ods.png +0 -0
  91. data/webapp/img/filetypes/odt.png +0 -0
  92. data/webapp/img/filetypes/ogg.png +0 -0
  93. data/webapp/img/filetypes/pdf.png +0 -0
  94. data/webapp/img/filetypes/pgp.png +0 -0
  95. data/webapp/img/filetypes/php.png +0 -0
  96. data/webapp/img/filetypes/pl.png +0 -0
  97. data/webapp/img/filetypes/png.png +0 -0
  98. data/webapp/img/filetypes/ppt.png +0 -0
  99. data/webapp/img/filetypes/ps.png +0 -0
  100. data/webapp/img/filetypes/py.png +0 -0
  101. data/webapp/img/filetypes/ram.png +0 -0
  102. data/webapp/img/filetypes/rar.png +0 -0
  103. data/webapp/img/filetypes/rb.png +0 -0
  104. data/webapp/img/filetypes/rm.png +0 -0
  105. data/webapp/img/filetypes/rpm.png +0 -0
  106. data/webapp/img/filetypes/rtf.png +0 -0
  107. data/webapp/img/filetypes/sig.png +0 -0
  108. data/webapp/img/filetypes/sql.png +0 -0
  109. data/webapp/img/filetypes/swf.png +0 -0
  110. data/webapp/img/filetypes/sxc.png +0 -0
  111. data/webapp/img/filetypes/sxd.png +0 -0
  112. data/webapp/img/filetypes/sxi.png +0 -0
  113. data/webapp/img/filetypes/sxw.png +0 -0
  114. data/webapp/img/filetypes/tar.png +0 -0
  115. data/webapp/img/filetypes/tex.png +0 -0
  116. data/webapp/img/filetypes/tgz.png +0 -0
  117. data/webapp/img/filetypes/txt.png +0 -0
  118. data/webapp/img/filetypes/vcf.png +0 -0
  119. data/webapp/img/filetypes/video.png +0 -0
  120. data/webapp/img/filetypes/vsd.png +0 -0
  121. data/webapp/img/filetypes/wav.png +0 -0
  122. data/webapp/img/filetypes/wma.png +0 -0
  123. data/webapp/img/filetypes/wmv.png +0 -0
  124. data/webapp/img/filetypes/xls.png +0 -0
  125. data/webapp/img/filetypes/xml.png +0 -0
  126. data/webapp/img/filetypes/xpi.png +0 -0
  127. data/webapp/img/filetypes/xvid.png +0 -0
  128. data/webapp/img/filetypes/zip.png +0 -0
  129. data/webapp/img/ico/arrow-000-small.png +0 -0
  130. data/webapp/img/ico/arrow-circle.png +0 -0
  131. data/webapp/img/ico/arrow-switch.png +0 -0
  132. data/webapp/img/ico/asterisk.png +0 -0
  133. data/webapp/img/ico/battery.png +0 -0
  134. data/webapp/img/ico/block-small.png +0 -0
  135. data/webapp/img/ico/block.png +0 -0
  136. data/webapp/img/ico/book-open-text.png +0 -0
  137. data/webapp/img/ico/box.png +0 -0
  138. data/webapp/img/ico/bug.png +0 -0
  139. data/webapp/img/ico/chart.png +0 -0
  140. data/webapp/img/ico/chevron-small-expand.png +0 -0
  141. data/webapp/img/ico/chevron-small.png +0 -0
  142. data/webapp/img/ico/clipboard-list.png +0 -0
  143. data/webapp/img/ico/clipboard-paste-document-text.png +0 -0
  144. data/webapp/img/ico/clipboard-paste.png +0 -0
  145. data/webapp/img/ico/clock-select-remain.png +0 -0
  146. data/webapp/img/ico/clock-select.png +0 -0
  147. data/webapp/img/ico/construction.png +0 -0
  148. data/webapp/img/ico/cross-0.png +0 -0
  149. data/webapp/img/ico/cross-1.png +0 -0
  150. data/webapp/img/ico/cross.png +0 -0
  151. data/webapp/img/ico/dashboard.png +0 -0
  152. data/webapp/img/ico/database.png +0 -0
  153. data/webapp/img/ico/databases.png +0 -0
  154. data/webapp/img/ico/disk-black.png +0 -0
  155. data/webapp/img/ico/document-convert.png +0 -0
  156. data/webapp/img/ico/document-import.png +0 -0
  157. data/webapp/img/ico/document-list.png +0 -0
  158. data/webapp/img/ico/document-text.png +0 -0
  159. data/webapp/img/ico/download-cloud.png +0 -0
  160. data/webapp/img/ico/exclamation-button.png +0 -0
  161. data/webapp/img/ico/eye.png +0 -0
  162. data/webapp/img/ico/folder-export.png +0 -0
  163. data/webapp/img/ico/folder-tree.png +0 -0
  164. data/webapp/img/ico/folder.png +0 -0
  165. data/webapp/img/ico/funnel-small.png +0 -0
  166. data/webapp/img/ico/funnel.png +0 -0
  167. data/webapp/img/ico/gear.png +0 -0
  168. data/webapp/img/ico/globe-network.png +0 -0
  169. data/webapp/img/ico/globe.png +0 -0
  170. data/webapp/img/ico/hammer-screwdriver.png +0 -0
  171. data/webapp/img/ico/hand.png +0 -0
  172. data/webapp/img/ico/highlighter-text.png +0 -0
  173. data/webapp/img/ico/hourglass--exclamation.png +0 -0
  174. data/webapp/img/ico/hourglass.png +0 -0
  175. data/webapp/img/ico/inbox-document-text.png +0 -0
  176. data/webapp/img/ico/information-button.png +0 -0
  177. data/webapp/img/ico/information-small.png +0 -0
  178. data/webapp/img/ico/information-white.png +0 -0
  179. data/webapp/img/ico/information.png +0 -0
  180. data/webapp/img/ico/jar.png +0 -0
  181. data/webapp/img/ico/magnifier.png +0 -0
  182. data/webapp/img/ico/mail.png +0 -0
  183. data/webapp/img/ico/memory.png +0 -0
  184. data/webapp/img/ico/molecule.png +0 -0
  185. data/webapp/img/ico/network-cloud.png +0 -0
  186. data/webapp/img/ico/network-status-away.png +0 -0
  187. data/webapp/img/ico/network-status-busy.png +0 -0
  188. data/webapp/img/ico/network-status-offline.png +0 -0
  189. data/webapp/img/ico/network-status.png +0 -0
  190. data/webapp/img/ico/network.png +0 -0
  191. data/webapp/img/ico/node-design.png +0 -0
  192. data/webapp/img/ico/node-master.png +0 -0
  193. data/webapp/img/ico/node-select.png +0 -0
  194. data/webapp/img/ico/node-slave.png +0 -0
  195. data/webapp/img/ico/node.png +0 -0
  196. data/webapp/img/ico/pencil-small.png +0 -0
  197. data/webapp/img/ico/plus-button.png +0 -0
  198. data/webapp/img/ico/processor.png +0 -0
  199. data/webapp/img/ico/prohibition.png +0 -0
  200. data/webapp/img/ico/property.png +0 -0
  201. data/webapp/img/ico/question-small-white.png +0 -0
  202. data/webapp/img/ico/question-white.png +0 -0
  203. data/webapp/img/ico/question.png +0 -0
  204. data/webapp/img/ico/receipt-invoice.png +0 -0
  205. data/webapp/img/ico/receipt.png +0 -0
  206. data/webapp/img/ico/script-code.png +0 -0
  207. data/webapp/img/ico/server-cast.png +0 -0
  208. data/webapp/img/ico/server.png +0 -0
  209. data/webapp/img/ico/sitemap.png +0 -0
  210. data/webapp/img/ico/slash.png +0 -0
  211. data/webapp/img/ico/status-away.png +0 -0
  212. data/webapp/img/ico/status-busy.png +0 -0
  213. data/webapp/img/ico/status-offline.png +0 -0
  214. data/webapp/img/ico/status.png +0 -0
  215. data/webapp/img/ico/system-monitor--exclamation.png +0 -0
  216. data/webapp/img/ico/system-monitor.png +0 -0
  217. data/webapp/img/ico/table.png +0 -0
  218. data/webapp/img/ico/terminal.png +0 -0
  219. data/webapp/img/ico/tick-circle.png +0 -0
  220. data/webapp/img/ico/tick-red.png +0 -0
  221. data/webapp/img/ico/tick.png +0 -0
  222. data/webapp/img/ico/toggle-small-expand.png +0 -0
  223. data/webapp/img/ico/toggle-small.png +0 -0
  224. data/webapp/img/ico/toolbox.png +0 -0
  225. data/webapp/img/ico/ui-accordion.png +0 -0
  226. data/webapp/img/ico/ui-address-bar.png +0 -0
  227. data/webapp/img/ico/ui-check-box-uncheck.png +0 -0
  228. data/webapp/img/ico/ui-check-box.png +0 -0
  229. data/webapp/img/ico/ui-radio-button-uncheck.png +0 -0
  230. data/webapp/img/ico/ui-radio-button.png +0 -0
  231. data/webapp/img/ico/ui-text-field-select.png +0 -0
  232. data/webapp/img/ico/users.png +0 -0
  233. data/webapp/img/ico/wooden-box.png +0 -0
  234. data/webapp/img/ico/zone.png +0 -0
  235. data/webapp/img/loader-light.gif +0 -0
  236. data/webapp/img/loader.gif +0 -0
  237. data/webapp/img/lucene-ico.png +0 -0
  238. data/webapp/img/solr-ico.png +0 -0
  239. data/webapp/{admin/solr_small.png → img/solr.png} +0 -0
  240. data/webapp/img/tree.png +0 -0
  241. data/webapp/js/lib/ZeroClipboard.js +317 -0
  242. data/webapp/js/lib/chosen.js +953 -0
  243. data/webapp/{admin/get-properties.jsp → js/lib/console.js} +13 -10
  244. data/webapp/js/lib/d3.js +9342 -0
  245. data/webapp/js/lib/highlight.js +1 -0
  246. data/webapp/{admin/jquery-1.4.3.min.js → js/lib/jquery-1.7.2.min.js} +0 -0
  247. data/webapp/js/lib/jquery.blockUI.js +499 -0
  248. data/webapp/js/lib/jquery.cookie.js +47 -0
  249. data/webapp/js/lib/jquery.form.js +782 -0
  250. data/webapp/js/lib/jquery.jstree.js +3510 -0
  251. data/webapp/js/lib/jquery.sammy.js +1856 -0
  252. data/webapp/js/lib/jquery.sparkline.js +1271 -0
  253. data/webapp/js/lib/jquery.timeago.js +165 -0
  254. data/webapp/js/lib/linker.js +48 -0
  255. data/webapp/js/lib/order.js +189 -0
  256. data/webapp/js/main.js +57 -0
  257. data/webapp/js/require.js +11319 -0
  258. data/webapp/js/scripts/analysis.js +549 -0
  259. data/webapp/js/scripts/app.js +368 -0
  260. data/webapp/js/scripts/cloud.js +719 -0
  261. data/webapp/js/scripts/cores.js +540 -0
  262. data/webapp/js/scripts/dashboard.js +540 -0
  263. data/webapp/js/scripts/dataimport.js +567 -0
  264. data/webapp/js/scripts/file.js +56 -0
  265. data/webapp/js/scripts/index.js +344 -0
  266. data/webapp/js/scripts/java-properties.js +107 -0
  267. data/webapp/js/scripts/logging.js +519 -0
  268. data/webapp/js/scripts/ping.js +72 -0
  269. data/webapp/js/scripts/plugins.js +426 -0
  270. data/webapp/js/scripts/query.js +170 -0
  271. data/webapp/js/scripts/replication.js +557 -0
  272. data/webapp/js/scripts/schema-browser.js +1206 -0
  273. data/webapp/js/scripts/threads.js +159 -0
  274. data/webapp/tpl/analysis.html +83 -0
  275. data/webapp/tpl/cloud.html +54 -0
  276. data/webapp/tpl/cores.html +215 -0
  277. data/webapp/tpl/dashboard.html +164 -0
  278. data/webapp/tpl/dataimport.html +123 -0
  279. data/webapp/tpl/index.html +250 -0
  280. data/webapp/tpl/logging.html +23 -0
  281. data/webapp/tpl/plugins.html +39 -0
  282. data/webapp/tpl/query.html +318 -0
  283. data/webapp/tpl/replication.html +207 -0
  284. data/webapp/tpl/schema-browser.html +178 -0
  285. data/webapp/tpl/threads.html +56 -0
  286. metadata +307 -40
  287. data/lib/rjack-solr/solr-core-3.6.2.jar +0 -0
  288. data/lib/rjack-solr/solr-solrj-3.6.2.jar +0 -0
  289. data/webapp/admin/_info.jsp +0 -120
  290. data/webapp/admin/action.jsp +0 -94
  291. data/webapp/admin/analysis.jsp +0 -496
  292. data/webapp/admin/analysis.xsl +0 -179
  293. data/webapp/admin/dataimport.jsp +0 -53
  294. data/webapp/admin/debug.jsp +0 -103
  295. data/webapp/admin/distributiondump.jsp +0 -160
  296. data/webapp/admin/form.jsp +0 -152
  297. data/webapp/admin/get-file.jsp +0 -72
  298. data/webapp/admin/header.jsp +0 -44
  299. data/webapp/admin/index.jsp +0 -162
  300. data/webapp/admin/meta.xsl +0 -34
  301. data/webapp/admin/ping.jsp +0 -52
  302. data/webapp/admin/ping.xsl +0 -71
  303. data/webapp/admin/raw-schema.jsp +0 -38
  304. data/webapp/admin/registry.jsp +0 -107
  305. data/webapp/admin/registry.xsl +0 -321
  306. data/webapp/admin/replication/header.jsp +0 -89
  307. data/webapp/admin/replication/index.jsp +0 -378
  308. data/webapp/admin/schema.jsp +0 -690
  309. data/webapp/admin/solr-admin.css +0 -215
  310. data/webapp/admin/stats.jsp +0 -92
  311. data/webapp/admin/stats.xsl +0 -220
  312. data/webapp/admin/tabular.xsl +0 -141
  313. data/webapp/admin/threaddump.jsp +0 -110
  314. data/webapp/admin/threaddump.xsl +0 -103
  315. data/webapp/index.jsp +0 -49
@@ -0,0 +1,72 @@
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+
18
+ $( '.ping a', app.menu_element )
19
+ .live
20
+ (
21
+ 'click',
22
+ function( event )
23
+ {
24
+ $.ajax
25
+ (
26
+ {
27
+ url : $( this ).attr( 'rel' ) + '?wt=json&ts=' + (new Date).getTime(),
28
+ dataType : 'json',
29
+ context: this,
30
+ beforeSend : function( arr, form, options )
31
+ {
32
+ loader.show( this );
33
+ },
34
+ success : function( response, text_status, xhr )
35
+ {
36
+ $( this )
37
+ .removeAttr( 'title' );
38
+
39
+ $( this ).parents( 'li' )
40
+ .removeClass( 'error' );
41
+
42
+ var qtime_element = $( '.qtime', this );
43
+
44
+ if( 0 === qtime_element.size() )
45
+ {
46
+ qtime_element = $( '<small class="qtime"> (<span></span>)</small>' );
47
+
48
+ $( this )
49
+ .append( qtime_element );
50
+ }
51
+
52
+ $( 'span', qtime_element )
53
+ .html( response.responseHeader.QTime + 'ms' );
54
+ },
55
+ error : function( xhr, text_status, error_thrown )
56
+ {
57
+ $( this )
58
+ .attr( 'title', '/admin/ping is not configured (' + xhr.status + ': ' + error_thrown + ')' );
59
+
60
+ $( this ).parents( 'li' )
61
+ .addClass( 'error' );
62
+ },
63
+ complete : function( xhr, text_status )
64
+ {
65
+ loader.hide( this );
66
+ }
67
+ }
68
+ );
69
+
70
+ return false;
71
+ }
72
+ );
@@ -0,0 +1,426 @@
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+
18
+ var core_basepath = null;
19
+ var content_element = null;
20
+ var selected_type = null;
21
+ var context_path = null;
22
+ var active_context = null;
23
+ var changes = null;
24
+ var reference_xml = null;
25
+
26
+ var compute_plugin_data = function( response, changeset )
27
+ {
28
+ var types = [];
29
+ var sort_table = {};
30
+ var plugin_data = {};
31
+
32
+ var types_obj = {};
33
+ var plugin_key = null;
34
+
35
+ changes = { count : {}, list : {} }
36
+
37
+ for( var i = 0; i < response['solr-mbeans'].length; i++ )
38
+ {
39
+ if( !( i % 2 ) )
40
+ {
41
+ plugin_key = response['solr-mbeans'][i];
42
+ }
43
+ else
44
+ {
45
+ plugin_data[plugin_key] = response['solr-mbeans'][i];
46
+ }
47
+ }
48
+
49
+ for( var key in plugin_data )
50
+ {
51
+ sort_table[key] = {
52
+ url : [],
53
+ component : [],
54
+ handler : []
55
+ };
56
+ for( var part_key in plugin_data[key] )
57
+ {
58
+ if( plugin_data[key][part_key]['_changed_'] )
59
+ {
60
+ delete plugin_data[key][part_key]['_changed_'];
61
+
62
+ changes.count[key] = changes.count[key] || 0;
63
+ changes.count[key]++;
64
+
65
+ changes.list[key] = changes.list[key] || {};
66
+ changes.list[key][part_key] = true;
67
+ }
68
+
69
+ if( 0 < part_key.indexOf( '.' ) )
70
+ {
71
+ types_obj[key] = true;
72
+ sort_table[key]['handler'].push( part_key );
73
+ }
74
+ else if( 0 === part_key.indexOf( '/' ) )
75
+ {
76
+ types_obj[key] = true;
77
+ sort_table[key]['url'].push( part_key );
78
+ }
79
+ else
80
+ {
81
+ types_obj[key] = true;
82
+ sort_table[key]['component'].push( part_key );
83
+ }
84
+ }
85
+ }
86
+
87
+ for( var type in types_obj )
88
+ {
89
+ types.push( type );
90
+ }
91
+ types.sort();
92
+
93
+ return {
94
+ 'plugin_data' : plugin_data,
95
+ 'sort_table' : sort_table,
96
+ 'types' : types
97
+ };
98
+ };
99
+
100
+ var render_plugin_data = function( plugin_data, plugin_sort, types )
101
+ {
102
+ var frame_element = $( '#frame', content_element );
103
+ var navigation_element = $( '#navigation ul', content_element );
104
+
105
+ var navigation_content = [];
106
+ for( var i = 0; i < types.length; i++ )
107
+ {
108
+ var type_url = active_context.params.splat[0] + '/' + active_context.params.splat[1] + '/' + types[i].toLowerCase();
109
+
110
+ var navigation_markup = '<li class="' + types[i].toLowerCase().esc() + '">' +
111
+ '<a href="#/' + type_url + '" rel="' + types[i].esc() + '">' + types[i].esc();
112
+
113
+ if( changes.count[types[i]] )
114
+ {
115
+ navigation_markup += ' <span>' + changes.count[types[i]].esc() + '</span>';
116
+ }
117
+
118
+ navigation_markup += '</a>' +
119
+ '</li>';
120
+
121
+ navigation_content.push( navigation_markup );
122
+ }
123
+
124
+ navigation_content.push( '<li class="PLUGINCHANGES"><a href="#">Watch Changes</a></li>' );
125
+ navigation_content.push( '<li class="RELOAD"><a href="#" onClick="window.location.reload()">Refresh Values</a></li>' );
126
+
127
+ navigation_element
128
+ .html( navigation_content.join( "\n" ) );
129
+
130
+ $( '.PLUGINCHANGES a', navigation_element )
131
+ .die( 'click' )
132
+ .live
133
+ (
134
+ 'click',
135
+ function( event )
136
+ {
137
+ load_reference_xml();
138
+
139
+ changes = { count : {}, list : {} }
140
+ $( 'a > span', navigation_element ).remove();
141
+ $( '.entry.changed', frame_element ).removeClass( 'changed' );
142
+
143
+ $.blockUI
144
+ (
145
+ {
146
+ message: $('#recording'),
147
+ css: { width: '450px' }
148
+ }
149
+ );
150
+
151
+ return false;
152
+ }
153
+ );
154
+
155
+ $( '#recording button' )
156
+ .die( 'click' )
157
+ .live
158
+ (
159
+ 'click',
160
+ function( event )
161
+ {
162
+ $.ajax
163
+ (
164
+ {
165
+ type: 'POST',
166
+ url: core_basepath + '/admin/mbeans',
167
+ dataType : 'json',
168
+ data: {
169
+ 'stats': 'true',
170
+ 'wt': 'json',
171
+ 'diff': 'true',
172
+ 'all': 'true',
173
+ 'stream.body': reference_xml
174
+ },
175
+ success : function( response, text_status, xhr )
176
+ {
177
+ load_reference_xml();
178
+
179
+ app.plugin_data = compute_plugin_data( response );
180
+ render_plugin_data( app.plugin_data.plugin_data, app.plugin_data.sort_table, app.plugin_data.types );
181
+ }
182
+ }
183
+ );
184
+ $.unblockUI();
185
+ return false;
186
+ }
187
+ );
188
+
189
+ $( 'a[href="' + context_path + '"]', navigation_element )
190
+ .parent().addClass( 'current' );
191
+
192
+ var content = '<ul>';
193
+ for( var sort_key in plugin_sort[selected_type] )
194
+ {
195
+ plugin_sort[selected_type][sort_key].sort();
196
+ var plugin_type_length = plugin_sort[selected_type][sort_key].length;
197
+
198
+ for( var i = 0; i < plugin_type_length; i++ )
199
+ {
200
+ var bean = plugin_sort[selected_type][sort_key][i];
201
+ var classes = [ 'entry' ];
202
+
203
+ if( changes.list[selected_type] && changes.list[selected_type][bean] )
204
+ {
205
+ classes.push( 'changed' );
206
+ }
207
+
208
+ content += '<li class="' + classes.join( ' ' ) + '">' + "\n";
209
+ content += '<a href="' + context_path + '?entry=' + bean.esc() + '">';
210
+ content += '<span>' + bean.esc() + '</span>';
211
+ content += '</a>' + "\n";
212
+ content += '<ul class="detail">' + "\n";
213
+
214
+ var details = plugin_data[selected_type][ plugin_sort[selected_type][sort_key][i] ];
215
+ for( var detail_key in details )
216
+ {
217
+ if( 'stats' !== detail_key )
218
+ {
219
+ var detail_value = details[detail_key];
220
+
221
+ if( 'description' === detail_key )
222
+ {
223
+ // Link component list to their MBeans page
224
+ if(detail_value.match(/^Search using components: /)) {
225
+ var idx = detail_value.indexOf(':');
226
+ var url = '#/'+active_context.params.splat[0]+'/plugins/other?entry=';
227
+ var tmp = 'Search using components:<ul>';
228
+ $.each(detail_value.substr(idx+1).split(","), function(index, value) {
229
+ value = $.trim(value);
230
+ tmp += '<li><a href="'+url+value+'" class="linker">'+value+"</a></li>";
231
+ });
232
+ tmp += "</ul>";
233
+ detail_value = tmp;
234
+ }
235
+ }
236
+
237
+ content += '<li><dl class="clearfix">' + "\n";
238
+ content += '<dt>' + detail_key + ':</dt>' + "\n";
239
+ if($.isArray(detail_value)) {
240
+ $.each(detail_value, function(index, value) {
241
+ content += '<dd>' + value + '</dd>' + "\n";
242
+ });
243
+ }
244
+ else {
245
+ content += '<dd>' + detail_value + '</dd>' + "\n";
246
+ }
247
+ content += '</dl></li>' + "\n";
248
+ }
249
+ else if( 'stats' === detail_key && details[detail_key] )
250
+ {
251
+ content += '<li class="stats clearfix">' + "\n";
252
+ content += '<span>' + detail_key + ':</span>' + "\n";
253
+ content += '<ul>' + "\n";
254
+
255
+ for( var stats_key in details[detail_key] )
256
+ {
257
+ var stats_value = details[detail_key][stats_key];
258
+
259
+ if( 'readerDir' === stats_key )
260
+ {
261
+ stats_value = stats_value.replace( /@/g, '@&#8203;' );
262
+ }
263
+
264
+ content += '<li><dl class="clearfix">' + "\n";
265
+ content += '<dt>' + stats_key + ':</dt>' + "\n";
266
+ content += '<dd>' + stats_value + '</dd>' + "\n";
267
+ content += '</dl></li>' + "\n";
268
+ }
269
+
270
+ content += '</ul></li>' + "\n";
271
+ }
272
+ }
273
+
274
+ content += '</ul>' + "\n";
275
+ }
276
+ }
277
+ content += '</ul>' + "\n";
278
+
279
+ frame_element
280
+ .html( content );
281
+
282
+ $( 'a[href="' + decodeURIComponent( active_context.path ) + '"]', frame_element )
283
+ .parent().addClass( 'expanded' );
284
+
285
+ // Try to make links for anything with http (but leave the rest alone)
286
+ $( '.detail dd' ).each(function(index) {
287
+ var txt = $(this).html();
288
+ if(txt.indexOf("http") >= 0) {
289
+ $(this).linker({
290
+ className : 'linker',
291
+ });
292
+ }
293
+ });
294
+
295
+ // Add invisible whitespace after each slash
296
+ $( '.detail a.linker' ).each(function(index) {
297
+ $(this).html( $(this).html().replace( /\//g, '/&#8203;' ) );
298
+ });
299
+
300
+
301
+ $( '.entry', frame_element )
302
+ .each
303
+ (
304
+ function( i, entry )
305
+ {
306
+ $( '.detail > li', entry ).not( '.stats' ).filter( ':even' )
307
+ .addClass( 'odd' );
308
+
309
+ $( '.stats li:odd', entry )
310
+ .addClass( 'odd' );
311
+ }
312
+ );
313
+ };
314
+
315
+ var load_reference_xml = function()
316
+ {
317
+ $.ajax
318
+ (
319
+ {
320
+ type: 'GET',
321
+ url: core_basepath + '/admin/mbeans?stats=true&wt=xml',
322
+ dataType : 'text',
323
+ success: function( data )
324
+ {
325
+ reference_xml = data;
326
+ }
327
+ }
328
+ );
329
+ }
330
+
331
+ sammy.bind
332
+ (
333
+ 'plugins_load',
334
+ function( event, params )
335
+ {
336
+ var callback = function()
337
+ {
338
+ params.callback( app.plugin_data.plugin_data, app.plugin_data.sort_table, app.plugin_data.types );
339
+ }
340
+
341
+ if( app.plugin_data )
342
+ {
343
+ callback( app.plugin_data );
344
+ return true;
345
+ }
346
+
347
+ $.ajax
348
+ (
349
+ {
350
+ url : core_basepath + '/admin/mbeans?stats=true&wt=json',
351
+ dataType : 'json',
352
+ beforeSend : function( xhr, settings )
353
+ {
354
+ },
355
+ success : function( response, text_status, xhr )
356
+ {
357
+ app.plugin_data = compute_plugin_data( response );
358
+
359
+ $.get
360
+ (
361
+ 'tpl/plugins.html',
362
+ function( template )
363
+ {
364
+ $( '#content' )
365
+ .html( template );
366
+
367
+ callback( app.plugin_data );
368
+ }
369
+ );
370
+ },
371
+ error : function( xhr, text_status, error_thrown)
372
+ {
373
+ },
374
+ complete : function( xhr, text_status )
375
+ {
376
+ }
377
+ }
378
+ );
379
+ }
380
+ );
381
+
382
+ // #/:core/plugins/$type
383
+ sammy.get
384
+ (
385
+ /^#\/([\w\d-]+)\/(plugins)\/(\w+)$/,
386
+ function( context )
387
+ {
388
+ core_basepath = this.active_core.attr( 'data-basepath' );
389
+ content_element = $( '#content' );
390
+ selected_type = context.params.splat[2].toUpperCase();
391
+ context_path = context.path.split( '?' ).shift();
392
+ active_context = context;
393
+
394
+ sammy.trigger
395
+ (
396
+ 'plugins_load',
397
+ {
398
+ active_core : this.active_core,
399
+ callback : render_plugin_data
400
+ }
401
+ );
402
+ }
403
+ );
404
+
405
+ // #/:core/plugins
406
+ sammy.get
407
+ (
408
+ /^#\/([\w\d-]+)\/(plugins)$/,
409
+ function( context )
410
+ {
411
+ core_basepath = this.active_core.attr( 'data-basepath' );
412
+ delete app.plugin_data;
413
+
414
+ sammy.trigger
415
+ (
416
+ 'plugins_load',
417
+ {
418
+ active_core : this.active_core,
419
+ callback : function( plugin_data, plugin_sort, types )
420
+ {
421
+ context.redirect( context.path + '/' + types[0].toLowerCase() );
422
+ }
423
+ }
424
+ );
425
+ }
426
+ );