glimmer 0.1.0.0 → 0.1.2

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 (83) hide show
  1. data/.rvmrc +1 -0
  2. data/Gemfile +9 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.markdown +54 -0
  5. data/Rakefile +54 -0
  6. data/VERSION +1 -0
  7. data/bin/glimmer +132 -0
  8. data/glimmer.gemspec +145 -0
  9. data/images/Bitter-sweet.jpg +0 -0
  10. data/{src → lib}/command_handler.rb +7 -10
  11. data/{src → lib}/command_handler_chain_factory.rb +29 -22
  12. data/{src → lib}/command_handler_chain_link.rb +19 -22
  13. data/{src → lib}/command_handlers.rb +29 -26
  14. data/{src → lib}/command_handlers/bind_command_handler.rb +25 -28
  15. data/lib/command_handlers/combo_selection_data_binding_command_handler.rb +39 -0
  16. data/{src → lib}/command_handlers/data_binding_command_handler.rb +61 -64
  17. data/lib/command_handlers/list_selection_data_binding_command_handler.rb +42 -0
  18. data/lib/command_handlers/models/list_observer.rb +31 -0
  19. data/{src → lib}/command_handlers/models/model_observer.rb +28 -25
  20. data/{src → lib}/command_handlers/models/observable_array.rb +53 -46
  21. data/lib/command_handlers/models/observable_model.rb +61 -0
  22. data/{src → lib}/command_handlers/models/r_runnable.rb +11 -14
  23. data/{src → lib}/command_handlers/models/r_shell.rb +23 -26
  24. data/lib/command_handlers/models/r_tab_item_composite.rb +25 -0
  25. data/{src → lib}/command_handlers/models/r_widget.rb +16 -14
  26. data/lib/command_handlers/models/r_widget_listener.rb +9 -0
  27. data/{src → lib}/command_handlers/models/r_widget_packages.rb +5 -8
  28. data/{src → lib}/command_handlers/models/table_items_updater.rb +38 -39
  29. data/{src → lib}/command_handlers/models/widget_observer.rb +4 -6
  30. data/{src → lib}/command_handlers/shell_command_handler.rb +14 -17
  31. data/{src → lib}/command_handlers/swt_constant_command_handler.rb +18 -21
  32. data/lib/command_handlers/tab_item_command_handler.rb +22 -0
  33. data/{src → lib}/command_handlers/table_column_properties_data_binding_command_handler.rb +20 -23
  34. data/{src → lib}/command_handlers/table_items_data_binding_command_handler.rb +26 -29
  35. data/{src → lib}/command_handlers/widget_command_handler.rb +22 -25
  36. data/{src → lib}/command_handlers/widget_listener_command_handler.rb +36 -34
  37. data/{src → lib}/command_handlers/widget_method_command_handler.rb +18 -21
  38. data/{src → lib}/glimmer.rb +52 -45
  39. data/lib/parent.rb +5 -0
  40. data/{src → lib}/shine.rb +21 -24
  41. data/{src → lib}/xml_command_handlers.rb +15 -18
  42. data/{src → lib}/xml_command_handlers/html_command_handler.rb +45 -49
  43. data/{src → lib}/xml_command_handlers/models/depth_first_search_iterator.rb +17 -20
  44. data/{src → lib}/xml_command_handlers/models/name_space_visitor.rb +17 -20
  45. data/{src → lib}/xml_command_handlers/models/node.rb +80 -83
  46. data/{src → lib}/xml_command_handlers/models/node_visitor.rb +8 -11
  47. data/{src → lib}/xml_command_handlers/models/xml_visitor.rb +58 -61
  48. data/{src → lib}/xml_command_handlers/xml_command_handler.rb +18 -22
  49. data/{src → lib}/xml_command_handlers/xml_name_space_command_handler.rb +31 -34
  50. data/{src → lib}/xml_command_handlers/xml_tag_command_handler.rb +23 -26
  51. data/{src → lib}/xml_command_handlers/xml_text_command_handler.rb +19 -22
  52. data/samples/contactmanager/contact.rb +0 -3
  53. data/samples/contactmanager/contact_manager.rb +1 -4
  54. data/samples/contactmanager/contact_manager_presenter.rb +0 -3
  55. data/samples/contactmanager/contact_repository.rb +0 -3
  56. data/samples/hello_combo.rb +32 -0
  57. data/samples/hello_world.rb +1 -4
  58. data/samples/login.rb +1 -4
  59. data/samples/tictactoe/tic_tac_toe.rb +2 -5
  60. data/samples/tictactoe/tic_tac_toe_board.rb +0 -3
  61. data/test/glimmer_combo_data_binding_test.rb +131 -0
  62. data/test/glimmer_constant_test.rb +6 -11
  63. data/test/glimmer_data_binding_test.rb +16 -16
  64. data/test/glimmer_list_data_binding_test.rb +223 -0
  65. data/test/glimmer_listeners_test.rb +6 -6
  66. data/test/glimmer_shine_data_binding_test.rb +7 -6
  67. data/test/glimmer_tab_item_test.rb +61 -0
  68. data/test/glimmer_table_data_binding_test.rb +7 -20
  69. data/test/glimmer_test.rb +18 -13
  70. data/test/helper.rb +21 -0
  71. data/test/observable_model_test.rb +2 -4
  72. data/test/r_widget_test.rb +5 -5
  73. data/test/samples/contactmanager/contact_manager_presenter_test.rb +1 -4
  74. data/test/samples/tictactoe/tic_tac_toe_test.rb +1 -4
  75. data/test/xml/glimmer_xml_test.rb +43 -43
  76. metadata +210 -105
  77. data/COPYING.LGPL +0 -504
  78. data/README +0 -27
  79. data/src/command_handlers/models/observable_model.rb +0 -35
  80. data/src/command_handlers/models/r_widget_listener.rb +0 -12
  81. data/src/parent.rb +0 -8
  82. data/src/swt.rb +0 -10
  83. data/src/xml.rb +0 -10
@@ -1,10 +1,8 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  class WidgetObserver
5
2
  attr_reader :widget, :property
6
3
  @@property_type_converters = {
7
- :text => Proc.new { |value| value.to_s }
4
+ :text => Proc.new { |value| value.to_s },
5
+ :items => Proc.new { |value| value.to_java :string}
8
6
  }
9
7
  def initialize model, property
10
8
  @widget = model
@@ -14,10 +12,10 @@ class WidgetObserver
14
12
  converted_value = value
15
13
  converter = @@property_type_converters[@property.to_sym]
16
14
  converted_value = converter.call(value) if converter
17
- @widget.widget.send "set" + @property.camelcase(true), converted_value unless evaluate_property == converted_value
15
+ @widget.widget.send("set#{@property.camelcase(:upper)}", converted_value) unless evaluate_property == converted_value
18
16
  end
19
17
  def evaluate_property
20
- @widget.widget.send("get" + @property.camelcase(true))
18
+ @widget.widget.send(@property)
21
19
  end
22
20
  end
23
21
 
@@ -1,18 +1,15 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_shell"
6
-
7
- class ShellCommandHandler
8
- include CommandHandler
9
-
10
- def can_handle?(parent, command_symbol, *args, &block)
11
- command_symbol.to_s == "shell"
12
- end
13
-
14
- def do_handle(parent, command_symbol, *args, &block)
15
- RShell.send(:new, *args)
16
- end
17
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_shell"
3
+
4
+ class ShellCommandHandler
5
+ include CommandHandler
6
+
7
+ def can_handle?(parent, command_symbol, *args, &block)
8
+ command_symbol.to_s == "shell"
9
+ end
10
+
11
+ def do_handle(parent, command_symbol, *args, &block)
12
+ RShell.send(:new, *args)
13
+ end
14
+
18
15
  end
@@ -1,22 +1,19 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class SwtConstantCommandHandler
8
- include CommandHandler
9
-
10
- include_package 'org.eclipse.swt'
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- args.size == 0 and
14
- block == nil
15
- end
16
-
17
- def do_handle(parent, command_symbol, *args, &block)
18
- puts 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
19
- eval 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
20
- end
21
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class SwtConstantCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt'
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ args.size == 0 and
11
+ block == nil
12
+ end
13
+
14
+ def do_handle(parent, command_symbol, *args, &block)
15
+ puts 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
16
+ eval 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
17
+ end
18
+
22
19
  end
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_shell"
3
+ require File.dirname(__FILE__) + "/models/r_tab_item_composite"
4
+
5
+ class TabItemCommandHandler
6
+ include CommandHandler
7
+ include Glimmer
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ parent.is_a?(RWidget) and
11
+ command_symbol.to_s == "tab_item" and
12
+ (args.size == 0 or
13
+ (args.size == 1 and args[0].is_a?(Fixnum)))
14
+ end
15
+
16
+ def do_handle(parent, command_symbol, *args, &block)
17
+ style = args[0] if args.size == 1
18
+ tab_item = RWidget.new(command_symbol.to_s, parent.widget, style)
19
+ RTabItemComposite.new(tab_item, parent.widget, style)
20
+ end
21
+
22
+ end
@@ -1,24 +1,21 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class TableColumnPropertiesDataBindingCommandHandler
8
- include CommandHandler
9
-
10
- include_package 'org.eclipse.swt'
11
- include_package 'org.eclipse.swt.widgets'
12
-
13
- def can_handle?(parent, command_symbol, *args, &block)
14
- parent.is_a?(RWidget) and
15
- parent.widget.is_a?(Table) and
16
- command_symbol.to_s == "column_properties" and
17
- block == nil
18
- end
19
-
20
- def do_handle(parent, command_symbol, *args, &block)
21
- args
22
- end
23
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class TableColumnPropertiesDataBindingCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt'
8
+ include_package 'org.eclipse.swt.widgets'
9
+
10
+ def can_handle?(parent, command_symbol, *args, &block)
11
+ parent.is_a?(RWidget) and
12
+ parent.widget.is_a?(Table) and
13
+ command_symbol.to_s == "column_properties" and
14
+ block == nil
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ args
19
+ end
20
+
24
21
  end
@@ -1,30 +1,27 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
- require File.dirname(__FILE__) + "/models/table_items_updater"
7
-
8
- class TableItemsDataBindingCommandHandler
9
- include CommandHandler
10
-
11
- include_package 'org.eclipse.swt.widgets'
12
-
13
- def can_handle?(parent, command_symbol, *args, &block)
14
- parent.is_a?(RWidget) and
15
- parent.widget.is_a?(Table) and
16
- command_symbol.to_s == "items" and
17
- args.size == 2 and
18
- args[0].is_a?(ModelObserver) and
19
- args[0].evaluate_property.is_a?(Array) and
20
- args[1].is_a?(Array) and
21
- block == nil
22
- end
23
-
24
- def do_handle(parent, command_symbol, *args, &block)
25
- model_observer = args[0]
26
- column_properties = args[1]
27
- TableItemsUpdater.new(parent, model_observer, column_properties)
28
- end
29
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+ require File.dirname(__FILE__) + "/models/table_items_updater"
4
+
5
+ class TableItemsDataBindingCommandHandler
6
+ include CommandHandler
7
+
8
+ include_package 'org.eclipse.swt.widgets'
9
+
10
+ def can_handle?(parent, command_symbol, *args, &block)
11
+ parent.is_a?(RWidget) and
12
+ parent.widget.is_a?(Table) and
13
+ command_symbol.to_s == "items" and
14
+ args.size == 2 and
15
+ args[0].is_a?(ModelObserver) and
16
+ args[0].evaluate_property.is_a?(Array) and
17
+ args[1].is_a?(Array) and
18
+ block == nil
19
+ end
20
+
21
+ def do_handle(parent, command_symbol, *args, &block)
22
+ model_observer = args[0]
23
+ column_properties = args[1]
24
+ TableItemsUpdater.new(parent, model_observer, column_properties)
25
+ end
26
+
30
27
  end
@@ -1,26 +1,23 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class WidgetCommandHandler
8
- include CommandHandler
9
-
10
- include_package 'org.eclipse.swt.widgets'
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- parent.is_a?(RWidget) and
14
- command_symbol.to_s != "shell" and
15
- (args.size == 0 or
16
- (args.size == 1 and args[0].is_a?(Fixnum))) and
17
- RWidget.widget_exists?(command_symbol.to_s)
18
- end
19
-
20
- def do_handle(parent, command_symbol, *args, &block)
21
- style = args[0] if args.size == 1
22
- puts "style argument is: " + style.to_s
23
- RWidget.new(command_symbol.to_s, parent.widget, style)
24
- end
25
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class WidgetCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt.widgets'
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ parent.is_a?(RWidget) and
11
+ command_symbol.to_s != "shell" and
12
+ (args.size == 0 or
13
+ (args.size == 1 and args[0].is_a?(Fixnum))) and
14
+ RWidget.widget_exists?(command_symbol.to_s)
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ style = args[0] if args.size == 1
19
+ puts "style argument is: " + style.to_s
20
+ RWidget.new(command_symbol.to_s, parent.widget, style)
21
+ end
22
+
26
23
  end
@@ -1,35 +1,37 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class WidgetListenerCommandHandler
8
- include CommandHandler
9
-
10
- include_package 'org.eclipse.swt.widgets'
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- parent.is_a?(RWidget) and
14
- command_symbol.to_s[0,3] == "on_" and
15
- command_symbol.to_s.length > 3 and
16
- args.size == 0 and
17
- parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])
18
- end
19
-
20
- def do_handle(parent, command_symbol, *args, &block)
21
- parent.add_listener(command_symbol.to_s[3, command_symbol.to_s.length], &block)
22
- ListenerParent.new #TODO refactor and move to models
23
- end
24
-
25
- #TODO refactor and move to separate file
26
- class ListenerParent
27
- include Parent
28
-
29
- def process_block(block)
30
- #NOOP
31
- end
32
-
33
- end
34
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class WidgetListenerCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt.widgets'
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ puts "parent is a widget: " + (parent.is_a?(RWidget)).to_s
11
+ return unless parent.is_a?(RWidget)
12
+ puts "on listener?: " + (command_symbol.to_s[0,3] == "on_").to_s
13
+ return unless command_symbol.to_s[0,3] == "on_"
14
+ puts "command symbol is longer than 3: " + (command_symbol.to_s.length > 3).to_s
15
+ return unless command_symbol.to_s.length > 3
16
+ puts "args are 0?: " + (args.size == 0).to_s
17
+ return unless args.size == 0
18
+ puts "can add listener? " + (parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])).to_s
19
+ parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])
20
+ end
21
+
22
+ def do_handle(parent, command_symbol, *args, &block)
23
+ parent.add_listener(command_symbol.to_s[3, command_symbol.to_s.length], &block)
24
+ ListenerParent.new #TODO refactor and move to models
25
+ end
26
+
27
+ #TODO refactor and move to separate file
28
+ class ListenerParent
29
+ include Parent
30
+
31
+ def process_block(block)
32
+ #NOOP
33
+ end
34
+
35
+ end
36
+
35
37
  end
@@ -1,22 +1,19 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class WidgetMethodCommandHandler
8
- include CommandHandler
9
-
10
- def can_handle?(parent, command_symbol, *args, &block)
11
- parent.is_a?(RWidget) and
12
- args.size > 0 and
13
- block == nil and
14
- parent.respond_to?(command_symbol, *args)
15
- end
16
-
17
- def do_handle(parent, command_symbol, *args, &block)
18
- parent.send(command_symbol, *args)
19
- nil
20
- end
21
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class WidgetMethodCommandHandler
5
+ include CommandHandler
6
+
7
+ def can_handle?(parent, command_symbol, *args, &block)
8
+ parent.is_a?(RWidget) and
9
+ args.size > 0 and
10
+ block == nil and
11
+ parent.respond_to?(command_symbol, *args)
12
+ end
13
+
14
+ def do_handle(parent, command_symbol, *args, &block)
15
+ parent.send(command_symbol, *args)
16
+ nil
17
+ end
18
+
22
19
  end
@@ -1,45 +1,52 @@
1
- # Glimmer - a JRuby DSL that enables easy and efficient authoring of user-interfaces
2
- # using the robust platform-independent Eclipse SWT library. Glimmer comes with built-in
3
- # data-binding support to greatly facilitate synchronizing UI with domain models.
4
- #
5
- # Copyright (C) 2007-2008 Annas Al Maleh
6
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
7
-
8
- require "rubygems"
9
- require "facets"
10
- require "java"
11
- require File.dirname(__FILE__) + "/parent"
12
-
13
- module Glimmer
14
-
15
- include_package 'org.eclipse.swt'
16
-
17
- @@parent_stack = []
18
-
19
- def self.method_missing(method_symbol, *args, &block)
20
- puts "method: " + method_symbol.to_s + " and args: " + args.to_s
21
- command_handler_chain = CommandHandlerChainFactory.chain
22
- return_value = command_handler_chain.handle(@@parent_stack.last, method_symbol, *args, &block)
23
- add_contents(return_value, &block)
24
- return return_value
25
- end
26
-
27
- def self.add_contents(parent, &block)
28
- @@parent_stack.push(parent) if parent.is_a?(Parent)
29
- @@parent_stack.last.process_block(block) if block and @@parent_stack.last
30
- @@parent_stack.pop if parent.is_a?(Parent)
31
- end
32
-
33
- #added for convenience
34
-
35
- def method_missing(method_symbol, *args, &block)
36
- Glimmer.method_missing(method_symbol, *args, &block)
37
- end
38
-
39
- def add_contents(parent, &block)
40
- Glimmer.add_contents(parent, &block)
41
- end
42
- end
43
-
44
- # Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
45
- #require File.dirname(__FILE__) + "/command_handlers"
1
+ # Glimmer - a JRuby DSL that enables easy and efficient authoring of user
2
+ # interfaces using the robust platform-independent Eclipse SWT library. Glimmer
3
+ # comes with built-in data-binding support to greatly facilitate synchronizing
4
+ # UI with domain models.
5
+
6
+ require "rubygems"
7
+ require "facets"
8
+ require "java"
9
+ require File.dirname(__FILE__) + "/parent"
10
+
11
+ module Glimmer
12
+
13
+ include_package 'org.eclipse.swt'
14
+
15
+ @@parent_stack = []
16
+
17
+ def self.method_missing(method_symbol, *args, &block)
18
+ puts "method: " + method_symbol.to_s + " and args: " + args.to_s
19
+ command_handler_chain = CommandHandlerChainFactory.chain
20
+ return_value = command_handler_chain.handle(@@parent_stack.last, method_symbol, *args, &block)
21
+ add_contents(return_value, &block)
22
+ return return_value
23
+ end
24
+
25
+ def self.add_contents(parent, &block)
26
+ @@parent_stack.push(parent) if parent.is_a?(Parent)
27
+ @@parent_stack.last.process_block(block) if block and @@parent_stack.last
28
+ @@parent_stack.pop if parent.is_a?(Parent)
29
+ end
30
+
31
+ def self.dsl(dsl)
32
+ CommandHandlerChainFactory.select_dsl(dsl)
33
+ end
34
+
35
+ #added for convenience
36
+
37
+ def method_missing(method_symbol, *args, &block)
38
+ Glimmer.method_missing(method_symbol, *args, &block)
39
+ end
40
+
41
+ def add_contents(parent, &block)
42
+ Glimmer.add_contents(parent, &block)
43
+ end
44
+
45
+ def dsl(dsl)
46
+ CommandHandlerChainFactory.select_dsl(dsl)
47
+ end
48
+ end
49
+
50
+ # Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
51
+ require File.dirname(__FILE__) + "/command_handlers"
52
+ require File.dirname(__FILE__) + "/xml_command_handlers"