aws-cfn-stacker 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (438) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +53 -0
  5. data/README.rdoc +28 -0
  6. data/Rakefile +22 -1
  7. data/app/assets/images/.keep +0 -0
  8. data/app/assets/javascripts/application.js +16 -0
  9. data/app/assets/javascripts/pizza_service.js.coffee +3 -0
  10. data/app/assets/javascripts/version.js.coffee +3 -0
  11. data/app/assets/stylesheets/application.css +15 -0
  12. data/app/assets/stylesheets/pizza_service.css.scss +3 -0
  13. data/app/assets/stylesheets/version.css.scss +3 -0
  14. data/app/controllers/application_controller.rb +5 -0
  15. data/app/controllers/concerns/.keep +0 -0
  16. data/app/controllers/pizza_service_controller.rb +2 -0
  17. data/app/controllers/version_controller.rb +32 -0
  18. data/app/helpers/application_helper.rb +2 -0
  19. data/app/helpers/pizza_service_helper.rb +2 -0
  20. data/app/helpers/version_helper.rb +74 -0
  21. data/app/mailers/.keep +0 -0
  22. data/app/models/.keep +0 -0
  23. data/app/models/concerns/.keep +0 -0
  24. data/app/views/layouts/application.html.erb +14 -0
  25. data/app/views/version/index.html.erb +2 -0
  26. data/app/views/version/versioninfo.html.erb +3 -0
  27. data/aws-cfn-stacker.gemspec +15 -7
  28. data/aws-cfn-stacker.iml +127 -28
  29. data/bin/cfn-stacker +12 -21
  30. data/bin/stacker +16 -0
  31. data/config.ru +4 -0
  32. data/config/application.rb +23 -0
  33. data/config/boot.rb +4 -0
  34. data/config/database.yml +25 -0
  35. data/config/environment.rb +5 -0
  36. data/config/environments/development.rb +37 -0
  37. data/config/environments/production.rb +78 -0
  38. data/config/environments/test.rb +39 -0
  39. data/config/initializers/assets.rb +8 -0
  40. data/config/initializers/backtrace_silencers.rb +7 -0
  41. data/config/initializers/cookies_serializer.rb +3 -0
  42. data/config/initializers/filter_parameter_logging.rb +4 -0
  43. data/config/initializers/inflections.rb +16 -0
  44. data/config/initializers/mime_types.rb +4 -0
  45. data/config/initializers/session_store.rb +3 -0
  46. data/config/initializers/wrap_parameters.rb +14 -0
  47. data/config/locales/en.yml +23 -0
  48. data/config/routes.rb +60 -0
  49. data/config/secrets.yml +22 -0
  50. data/db/development.sqlite3 +0 -0
  51. data/db/seeds.rb +7 -0
  52. data/db/test.sqlite3 +0 -0
  53. data/lib/assets/.keep +0 -0
  54. data/lib/aws/cfn/stacker.rb +5 -6
  55. data/lib/aws/cfn/stacker/base.rb +198 -1
  56. data/lib/aws/cfn/stacker/commands/list_params.rb +5 -0
  57. data/lib/aws/cfn/stacker/mixins/convert_to_class_name.rb +44 -0
  58. data/lib/aws/cfn/stacker/mixins/main.rb +28 -29
  59. data/lib/aws/cfn/stacker/mixins/options.rb +74 -43
  60. data/lib/aws/cfn/stacker/mixins/prerequisites.rb +4 -4
  61. data/lib/aws/cfn/stacker/subcommand_loader.rb +30 -0
  62. data/lib/aws/cfn/stacker/version.rb +2 -1
  63. data/lib/tasks/.keep +0 -0
  64. data/log/.keep +0 -0
  65. data/public/404.html +67 -0
  66. data/public/422.html +67 -0
  67. data/public/500.html +66 -0
  68. data/public/favicon.ico +0 -0
  69. data/public/robots.txt +5 -0
  70. data/spec/controllers/pizza_service_controller_spec.rb +5 -0
  71. data/spec/helpers/pizza_service_helper_spec.rb +15 -0
  72. data/spec/rails_helper.rb +51 -0
  73. data/spec/spec_helper.rb +85 -0
  74. data/ui/build.xml +172 -0
  75. data/ui/lib/gwt-dev-2.6.1.jar +0 -0
  76. data/ui/lib/gwt-user-2.6.1.jar +0 -0
  77. data/ui/lib/gxt-3.1.1.jar +0 -0
  78. data/ui/lib/gxt-chart-3.1.1.jar +0 -0
  79. data/ui/lib/gxt-theme-neptune-3.1.1.jar +0 -0
  80. data/ui/lib/jackson-annotations-2.3.2.jar +0 -0
  81. data/ui/lib/jackson-core-2.3.2.jar +0 -0
  82. data/ui/lib/jackson-databind-2.3.2.jar +0 -0
  83. data/ui/lib/jsr311-api-1.1.1-sources.jar +0 -0
  84. data/ui/lib/jsr311-api-1.1.1.jar +0 -0
  85. data/ui/src/com/dldinternet/aws/cfn/stacker/api/ApiBase.java +20 -0
  86. data/ui/src/com/dldinternet/aws/cfn/stacker/api/model/OrderConfirmation.java +55 -0
  87. data/ui/src/com/dldinternet/aws/cfn/stacker/api/model/Pizza.java +47 -0
  88. data/ui/src/com/dldinternet/aws/cfn/stacker/api/model/PizzaOrder.java +74 -0
  89. data/ui/src/com/dldinternet/aws/cfn/stacker/api/model/Topping.java +42 -0
  90. data/ui/src/com/dldinternet/aws/cfn/stacker/api/service/GreetingService.java +12 -0
  91. data/ui/src/com/dldinternet/aws/cfn/stacker/api/service/GreetingServiceAsync.java +11 -0
  92. data/ui/src/com/dldinternet/aws/cfn/stacker/api/service/JSONBindingService.java +61 -0
  93. data/ui/src/com/dldinternet/aws/cfn/stacker/api/service/JSONRPCPizzaService.java +11 -0
  94. data/ui/src/com/dldinternet/aws/cfn/stacker/api/service/MethodService.java +51 -0
  95. data/ui/src/com/dldinternet/aws/cfn/stacker/api/service/PizzaService.java +49 -0
  96. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/Desktop.gwt.xml +29 -0
  97. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/layout/CascadeDesktopLayout.java +61 -0
  98. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/layout/CenterDesktopLayout.java +59 -0
  99. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/layout/DesktopLayout.java +40 -0
  100. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/layout/DesktopLayoutType.java +15 -0
  101. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/layout/LimitedDesktopLayout.java +54 -0
  102. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/layout/TileDesktopLayout.java +83 -0
  103. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/container/DesktopLayout.css +22 -0
  104. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/container/DesktopLayoutDefaultAppearance.java +75 -0
  105. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/container/desktop.jpg +0 -0
  106. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/ShortcutCell.css +7 -0
  107. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/ShortcutCellDefaultAppearance.java +35 -0
  108. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/ShortcutTableFrame.css +37 -0
  109. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/ShortcutTableFrameResources.java +104 -0
  110. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/background.gif +0 -0
  111. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/backgroundOverBorder.gif +0 -0
  112. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/backgroundPressedBorder.gif +0 -0
  113. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomBorder.gif +0 -0
  114. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomLeftBorder.gif +0 -0
  115. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomLeftOverBorder.gif +0 -0
  116. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomLeftPressedBorder.gif +0 -0
  117. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomOverBorder.gif +0 -0
  118. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomPressedBorder.gif +0 -0
  119. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomRightBorder.gif +0 -0
  120. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomRightOverBorder.gif +0 -0
  121. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/bottomRightPressedBorder.gif +0 -0
  122. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/leftBorder.gif +0 -0
  123. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/leftOverBorder.gif +0 -0
  124. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/leftPressedBorder.gif +0 -0
  125. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/rightBorder.gif +0 -0
  126. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/rightOverBorder.gif +0 -0
  127. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/rightPressedBorder.gif +0 -0
  128. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topBorder.gif +0 -0
  129. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topLeftBorder.gif +0 -0
  130. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topLeftOverBorder.gif +0 -0
  131. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topLeftPressedBorder.gif +0 -0
  132. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topOverBorder.gif +0 -0
  133. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topPressedBorder.gif +0 -0
  134. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topRightBorder.gif +0 -0
  135. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topRightOverBorder.gif +0 -0
  136. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/shortcut/topRightPressedBorder.gif +0 -0
  137. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/StartButtonCell.css +22 -0
  138. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/StartButtonCellDefaultAppearance.java +48 -0
  139. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/StartButtonTableFrame.css +171 -0
  140. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/StartButtonTableFrameResources.java +105 -0
  141. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/background.gif +0 -0
  142. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/backgroundOverBorder.gif +0 -0
  143. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/backgroundPressedBorder.gif +0 -0
  144. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomBorder.gif +0 -0
  145. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomLeftBorder.gif +0 -0
  146. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomLeftOverBorder.gif +0 -0
  147. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomLeftPressedBorder.gif +0 -0
  148. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomOverBorder.gif +0 -0
  149. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomPressedBorder.gif +0 -0
  150. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomRightBorder.gif +0 -0
  151. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomRightOverBorder.gif +0 -0
  152. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/bottomRightPressedBorder.gif +0 -0
  153. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/leftBorder.gif +0 -0
  154. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/leftOverBorder.gif +0 -0
  155. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/leftPressedBorder.gif +0 -0
  156. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/rightBorder.gif +0 -0
  157. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/rightOverBorder.gif +0 -0
  158. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/rightPressedBorder.gif +0 -0
  159. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/startButtonIcon.gif +0 -0
  160. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topBorder.gif +0 -0
  161. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topLeftBorder.gif +0 -0
  162. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topLeftOverBorder.gif +0 -0
  163. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topLeftPressedBorder.gif +0 -0
  164. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topOverBorder.gif +0 -0
  165. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topPressedBorder.gif +0 -0
  166. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topRightBorder.gif +0 -0
  167. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topRightOverBorder.gif +0 -0
  168. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startbutton/topRightPressedBorder.gif +0 -0
  169. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartHeadingMenuItem.css +11 -0
  170. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartHeadingMenuItemAppearance.java +44 -0
  171. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartItem.css +17 -0
  172. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartMainMenu.css +12 -0
  173. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartMainMenu.html +3 -0
  174. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartMainMenuAppearance.java +70 -0
  175. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartMenu.css +29 -0
  176. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartMenu.html +11 -0
  177. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartMenuDefaultAppearance.java +96 -0
  178. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartToolMenu.css +12 -0
  179. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartToolMenu.html +3 -0
  180. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartToolMenuAppearance.java +60 -0
  181. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartToolMenuItem.css +10 -0
  182. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/StartToolMenuItemAppearance.java +45 -0
  183. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/startmenu/itemOver.gif +0 -0
  184. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/TaskButtonCell.css +15 -0
  185. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/TaskButtonCellDefaultAppearance.java +36 -0
  186. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/TaskButtonTableFrame.css +171 -0
  187. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/TaskButtonTableFrameResources.java +105 -0
  188. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/background.gif +0 -0
  189. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/backgroundOverBorder.gif +0 -0
  190. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/backgroundPressedBorder.gif +0 -0
  191. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomBorder.gif +0 -0
  192. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomLeftBorder.gif +0 -0
  193. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomLeftOverBorder.gif +0 -0
  194. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomLeftPressedBorder.gif +0 -0
  195. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomOverBorder.gif +0 -0
  196. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomPressedBorder.gif +0 -0
  197. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomRightBorder.gif +0 -0
  198. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomRightOverBorder.gif +0 -0
  199. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/bottomRightPressedBorder.gif +0 -0
  200. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/leftBorder.gif +0 -0
  201. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/leftOverBorder.gif +0 -0
  202. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/leftPressedBorder.gif +0 -0
  203. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/rightBorder.gif +0 -0
  204. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/rightOverBorder.gif +0 -0
  205. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/rightPressedBorder.gif +0 -0
  206. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topBorder.gif +0 -0
  207. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topLeftBorder.gif +0 -0
  208. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topLeftOverBorder.gif +0 -0
  209. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topLeftPressedBorder.gif +0 -0
  210. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topOverBorder.gif +0 -0
  211. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topPressedBorder.gif +0 -0
  212. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topRightBorder.gif +0 -0
  213. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topRightOverBorder.gif +0 -0
  214. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/theme/base/taskbutton/topRightPressedBorder.gif +0 -0
  215. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/AutoVerticalLayoutContainer.java +19 -0
  216. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/Desktop.java +483 -0
  217. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/DesktopLayoutContainer.java +227 -0
  218. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/EnumComboBox.java +1 -0
  219. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/ScaleOnResizeSupport.java +156 -0
  220. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/Shortcut.java +38 -0
  221. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/ShortcutCell.java +59 -0
  222. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartButton.java +75 -0
  223. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartButtonCell.java +59 -0
  224. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartHeadingMenuItem.java +62 -0
  225. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartMainMenu.java +68 -0
  226. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartMainMenuItem.java +60 -0
  227. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartMenu.java +260 -0
  228. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartToolMenu.java +68 -0
  229. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/StartToolMenuItem.java +71 -0
  230. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/TaskBar.java +192 -0
  231. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/TaskButton.java +64 -0
  232. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/TaskButtonCell.java +59 -0
  233. data/ui/src/com/dldinternet/aws/cfn/stacker/desktop/client/widget/WindowManager.java +226 -0
  234. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/DesktopApp.gwt.xml +27 -0
  235. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/DesktopApp.java +304 -0
  236. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/DesktopAppPresenter.java +232 -0
  237. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/DesktopAppPresenterImpl.java +436 -0
  238. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/DesktopAppView.java +33 -0
  239. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/DesktopAppViewImpl.java +263 -0
  240. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/DesktopBus.java +297 -0
  241. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/FileBasedMiniAppPresenter.java +21 -0
  242. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/FileBasedMiniAppPresenterImpl.java +257 -0
  243. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/FileBasedMiniAppView.java +22 -0
  244. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/LoginModel.java +73 -0
  245. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/LoginPresenter.java +30 -0
  246. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/LoginPresenterImpl.java +85 -0
  247. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/LoginView.java +62 -0
  248. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/LoginViewImpl.java +232 -0
  249. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/Presenter.java +26 -0
  250. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/ProfileFactory.java +31 -0
  251. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/ProfileModel.java +69 -0
  252. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/ProfilePresenter.java +44 -0
  253. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/ProfilePresenterImpl.java +78 -0
  254. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/ProfileView.java +51 -0
  255. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/ProfileViewImpl.java +220 -0
  256. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/browser/BrowserPresenter.java +22 -0
  257. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/browser/BrowserPresenterImpl.java +41 -0
  258. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/browser/BrowserView.java +14 -0
  259. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/browser/BrowserViewImpl.java +90 -0
  260. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/AddFileModelEvent.java +41 -0
  261. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/AddStackModelEvent.java +41 -0
  262. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/CloseFileModelEvent.java +48 -0
  263. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/CreateFileModelEvent.java +49 -0
  264. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/LoginEvent.java +46 -0
  265. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/LogoutEvent.java +34 -0
  266. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/OpenFileModelEvent.java +48 -0
  267. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/OpenStackModelEvent.java +48 -0
  268. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/RemoveFileModelEvent.java +41 -0
  269. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/RemoveStackModelEvent.java +41 -0
  270. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/SelectFileModelEvent.java +41 -0
  271. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/SelectStackModelEvent.java +41 -0
  272. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/UpdateFileModelEvent.java +42 -0
  273. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/UpdateProfileEvent.java +53 -0
  274. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/event/UpdateStackModelEvent.java +42 -0
  275. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerGridInlineEditing.java +73 -0
  276. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerIconProvider.java +41 -0
  277. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerMenu.java +266 -0
  278. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerPresenter.java +40 -0
  279. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerPresenterImpl.java +158 -0
  280. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerSizeCell.java +47 -0
  281. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerToolBar.java +273 -0
  282. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerTreeGrid.java +49 -0
  283. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerView.java +29 -0
  284. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/FileManagerViewImpl.java +379 -0
  285. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/Images.java +60 -0
  286. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/arrow_in.png +0 -0
  287. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/arrow_out.png +0 -0
  288. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/bin_closed.png +0 -0
  289. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/bullet_go.png +0 -0
  290. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/cross.png +0 -0
  291. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/disk.png +0 -0
  292. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/folder.png +0 -0
  293. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/folder_add.png +0 -0
  294. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/page_white.png +0 -0
  295. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/page_white_add.png +0 -0
  296. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/script.png +0 -0
  297. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/script_add.png +0 -0
  298. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/table.png +0 -0
  299. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/table_add.png +0 -0
  300. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/textfield_rename.png +0 -0
  301. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/world.png +0 -0
  302. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/filemanager/images/world_add.png +0 -0
  303. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/DesktopImages.java +40 -0
  304. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/application_cascade.png +0 -0
  305. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/application_tile_horizontal.png +0 -0
  306. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/door_in.png +0 -0
  307. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/door_out.png +0 -0
  308. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/folder.png +0 -0
  309. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/folder_shortcut.png +0 -0
  310. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/grid.png +0 -0
  311. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/stack.png +0 -0
  312. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/stack_shortcut.png +0 -0
  313. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/table.png +0 -0
  314. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/user.png +0 -0
  315. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/images/user_edit.png +0 -0
  316. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/interpreter/InterpreterPresenter.java +16 -0
  317. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/interpreter/InterpreterPresenterImpl.java +150 -0
  318. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/interpreter/InterpreterView.java +16 -0
  319. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/interpreter/InterpreterViewImpl.java +243 -0
  320. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/AutoBeanToString.java +17 -0
  321. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/BackingStore.java +20 -0
  322. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/FileModel.java +47 -0
  323. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/FileModelFactory.java +19 -0
  324. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/FileModelProperties.java +32 -0
  325. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/FileSystem.java +350 -0
  326. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/MemoryBackingStore.java +45 -0
  327. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/StackModel.java +48 -0
  328. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/StackModelFactory.java +19 -0
  329. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/StackModelProperties.java +32 -0
  330. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/StackPile.java +350 -0
  331. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/StorageBackingStore.java +61 -0
  332. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/persistence/StorageProvider.java +71 -0
  333. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/service/LoginServiceProvider.java +1 -0
  334. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/service/LoginServiceRequest.java +1 -0
  335. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/service/ProfileServiceProvider.java +1 -0
  336. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/service/ProfileServiceRequest.java +1 -0
  337. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/servicebus/ServiceBus.java +1 -0
  338. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/servicebus/ServiceProvider.java +13 -0
  339. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/servicebus/ServiceRequest.java +13 -0
  340. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/ChartValueProvider.java +47 -0
  341. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/ColumnProvider.java +19 -0
  342. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/Evaluator.java +547 -0
  343. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/Row.java +21 -0
  344. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/RowValueProvider.java +33 -0
  345. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetChartListStoreAdapter.java +236 -0
  346. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetChartPresenter.java +21 -0
  347. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetChartPresenterImpl.java +74 -0
  348. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetChartView.java +18 -0
  349. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetChartViewImpl.java +284 -0
  350. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetMenu.java +133 -0
  351. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetPresenter.java +40 -0
  352. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetPresenterImpl.java +194 -0
  353. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetToolBar.java +189 -0
  354. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetUtilities.java +55 -0
  355. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetView.java +28 -0
  356. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/SpreadsheetViewImpl.java +420 -0
  357. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/Table.java +23 -0
  358. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/TableCategory.java +19 -0
  359. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/TableFactory.java +21 -0
  360. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/TableValueProvider.java +14 -0
  361. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/Worksheet.java +353 -0
  362. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/Images.java +46 -0
  363. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/arrow_down.png +0 -0
  364. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/arrow_left.png +0 -0
  365. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/arrow_right.png +0 -0
  366. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/arrow_up.png +0 -0
  367. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/chart_bar.png +0 -0
  368. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/chart_line.png +0 -0
  369. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/chart_pie.png +0 -0
  370. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/table_column_delete.png +0 -0
  371. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/spreadsheet/images/table_row_delete.png +0 -0
  372. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerGridInlineEditing.java +73 -0
  373. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerIconProvider.java +32 -0
  374. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerMenu.java +233 -0
  375. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerPresenter.java +40 -0
  376. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerPresenterImpl.java +155 -0
  377. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerSizeCell.java +47 -0
  378. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerToolBar.java +234 -0
  379. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerTreeGrid.java +49 -0
  380. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerView.java +29 -0
  381. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/StackManagerViewImpl.java +379 -0
  382. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/Images.java +45 -0
  383. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/arrow_in.png +0 -0
  384. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/arrow_out.png +0 -0
  385. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/bin_closed.png +0 -0
  386. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/bullet_go.png +0 -0
  387. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/folder.png +0 -0
  388. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/folder_add.png +0 -0
  389. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/stack.png +0 -0
  390. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/stack_add.png +0 -0
  391. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/stackmanager/images/textfield_rename.png +0 -0
  392. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/utility/Prompt.java +23 -0
  393. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/utility/PromptImpl.java +72 -0
  394. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/utility/Utility.java +41 -0
  395. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/wordprocessor/WordProcessorPresenter.java +14 -0
  396. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/wordprocessor/WordProcessorPresenterImpl.java +43 -0
  397. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/wordprocessor/WordProcessorView.java +14 -0
  398. data/ui/src/com/dldinternet/aws/cfn/stacker/desktopapp/client/wordprocessor/WordProcessorViewImpl.java +107 -0
  399. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/Messages.gwt.xml +15 -0
  400. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages.java +19 -0
  401. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages.properties +8 -0
  402. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessagesApi.java +34 -0
  403. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_ca.properties +109 -0
  404. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_cs.properties +106 -0
  405. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_da.properties +106 -0
  406. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_de.properties +107 -0
  407. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_el_GR.properties +106 -0
  408. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_es.properties +110 -0
  409. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_fr.properties +134 -0
  410. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_hu.properties +134 -0
  411. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_it.properties +107 -0
  412. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_ja.properties +190 -0
  413. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_nl.properties +190 -0
  414. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_no.properties +106 -0
  415. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_pl.properties +166 -0
  416. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_pt.properties +106 -0
  417. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_pt_BR.properties +116 -0
  418. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_pt_PT.properties +106 -0
  419. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_ru.properties +106 -0
  420. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_sl.properties +152 -0
  421. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_tr.properties +186 -0
  422. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_ua.properties +106 -0
  423. data/ui/src/com/dldinternet/aws/cfn/stacker/messages/client/DesktopMessages_zh.properties +106 -0
  424. data/ui/src/com/dldinternet/aws/cfn/stacker/server/GreetingServiceImpl.java +47 -0
  425. data/ui/src/com/dldinternet/aws/cfn/stacker/server/JsonpServlet.java +50 -0
  426. data/ui/src/com/dldinternet/aws/cfn/stacker/server/PizzaServlet.java +131 -0
  427. data/ui/src/com/dldinternet/aws/cfn/stacker/server/TestServlet.java +162 -0
  428. data/ui/src/com/dldinternet/aws/cfn/stacker/shared/FieldVerifier.java +42 -0
  429. data/ui/src/com/dldinternet/aws/cfn/stacker/ui/UI.gwt.xml +77 -0
  430. data/ui/src/com/dldinternet/aws/cfn/stacker/ui/UI.java +180 -0
  431. data/ui/war/.htaccess +10 -0
  432. data/ui/war/UI.css +34 -0
  433. data/ui/war/UI.html +86 -0
  434. data/ui/war/WEB-INF/web.xml +91 -0
  435. data/ui/war/images/large-loading.gif +0 -0
  436. data/vendor/assets/javascripts/.keep +0 -0
  437. data/vendor/assets/stylesheets/.keep +0 -0
  438. metadata +532 -31
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Sencha GXT 3.1.1 - Sencha for GWT
3
+ * Copyright(c) 2007-2014, Sencha, Inc.
4
+ * licensing@sencha.com
5
+ *
6
+ * http://www.sencha.com/products/gxt/license/
7
+ */
8
+ package com.dldinternet.aws.cfn.stacker.desktopapp.client.persistence;
9
+
10
+ import com.google.gwt.storage.client.Storage;
11
+ import com.google.gwt.storage.client.StorageMap;
12
+
13
+ import java.util.Iterator;
14
+
15
+ // TODO: Consider decorator pattern for encryption layer support
16
+
17
+ public class StorageBackingStore implements BackingStore {
18
+
19
+ private static final String DELIMITER = ".";
20
+
21
+ private Storage storage;
22
+ private String storageKeyPrefix;
23
+
24
+ public StorageBackingStore(Storage storage, String storageKeyPrefix) {
25
+ this.storage = storage;
26
+ this.storageKeyPrefix = storageKeyPrefix;
27
+ }
28
+
29
+ @Override
30
+ public void clear() {
31
+ String qualifiedStorageKeyPrefix = storageKeyPrefix + DELIMITER;
32
+ StorageMap storageMap = new StorageMap(storage);
33
+ Iterator<String> iterator = storageMap.keySet().iterator();
34
+ while (iterator.hasNext()) {
35
+ String key = iterator.next();
36
+ if (key.startsWith(qualifiedStorageKeyPrefix)) {
37
+ iterator.remove();
38
+ }
39
+ }
40
+ }
41
+
42
+ @Override
43
+ public String getItem(String key) {
44
+ return storage.getItem(getStorageKey(key));
45
+ }
46
+
47
+ @Override
48
+ public void removeItem(String key) {
49
+ storage.removeItem(getStorageKey(key));
50
+ }
51
+
52
+ @Override
53
+ public void setItem(String key, String data) {
54
+ storage.setItem(getStorageKey(key), data);
55
+ }
56
+
57
+ private String getStorageKey(String key) {
58
+ return storageKeyPrefix + DELIMITER + key;
59
+ }
60
+
61
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Sencha GXT 3.1.1 - Sencha for GWT
3
+ * Copyright(c) 2007-2014, Sencha, Inc.
4
+ * licensing@sencha.com
5
+ *
6
+ * http://www.sencha.com/products/gxt/license/
7
+ */
8
+ package com.dldinternet.aws.cfn.stacker.desktopapp.client.persistence;
9
+
10
+ import com.google.gwt.core.client.GWT;
11
+ import com.google.gwt.storage.client.Storage;
12
+ import com.google.gwt.storage.client.StorageEvent;
13
+ import com.google.gwt.storage.client.StorageEvent.Handler;
14
+ import com.google.gwt.storage.client.StorageMap;
15
+ import com.sencha.gxt.core.client.GXTLogConfiguration;
16
+
17
+ import java.util.Map.Entry;
18
+ import java.util.logging.Logger;
19
+
20
+ public class StorageProvider {
21
+
22
+ private static Logger logger = Logger.getLogger(StorageProvider.class.getName());
23
+ private Storage storage;
24
+
25
+ public StorageProvider() {
26
+ storage = Storage.getLocalStorageIfSupported();
27
+ dumpStorage("initialize");
28
+ addStorageChangeTrace();
29
+ }
30
+
31
+ public void clearAll() {
32
+ if (GXTLogConfiguration.loggingIsEnabled()) {
33
+ logger.severe("clearAll: clearing local storage");
34
+ }
35
+ storage.clear();
36
+ }
37
+
38
+ public Storage getStorage() {
39
+ return storage;
40
+ }
41
+
42
+ private void addStorageChangeTrace() {
43
+ if (GXTLogConfiguration.loggingIsEnabled()) {
44
+ Storage.addStorageEventHandler(new Handler() {
45
+ @Override
46
+ public void onStorageChange(StorageEvent event) {
47
+ String key = event.getKey();
48
+ String oldValue = event.getOldValue();
49
+ String newValue = event.getNewValue();
50
+ logger.finer("onStorageChange: key=" + key + "\noldValue=" + oldValue + "\nnewValue=" + newValue);
51
+ dumpStorage("change");
52
+ }
53
+ });
54
+ }
55
+ }
56
+
57
+ private void dumpStorage(String reason) {
58
+ if (GXTLogConfiguration.loggingIsEnabled() && !GWT.isProdMode()) {
59
+ logger.finest("dumpStorage: reason=" + reason);
60
+ if (storage == null) {
61
+ logger.severe("local storage is not available");
62
+ } else {
63
+ StorageMap storageMap = new StorageMap(storage);
64
+ for (Entry<?, ?> entry : storageMap.entrySet()) {
65
+ logger.finest("key=" + entry.getKey() + ", value=" + entry.getValue());
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+ }
@@ -0,0 +1 @@
1
+ /**
2
  * Sencha GXT 3.1.1 - Sencha for GWT
1
3
  * Copyright(c) 2007-2014, Sencha, Inc.
2
4
  * licensing@sencha.com
3
5
  *
4
6
  * http://www.sencha.com/products/gxt/license/
5
7
  */
6
8
  private LoginPresenter loginPresenter;
7
9
  private HasWidgets hasWidgets;
8
10
  public LoginServiceProvider(LoginPresenter loginPresenter, HasWidgets hasWidgets) {
9
11
  this.loginPresenter = loginPresenter;
10
12
  this.hasWidgets = hasWidgets;
11
13
  }
12
14
  @Override
13
15
  public void onServiceRequest(LoginServiceRequest loginServiceRequest) {
14
16
  loginPresenter.go(hasWidgets);
15
17
  }
@@ -0,0 +1 @@
1
+ /**
2
  * Sencha GXT 3.1.1 - Sencha for GWT
1
3
  * Copyright(c) 2007-2014, Sencha, Inc.
2
4
  * licensing@sencha.com
3
5
  *
4
6
  * http://www.sencha.com/products/gxt/license/
5
7
  */
6
8
  public LoginServiceRequest() {
7
9
  }
@@ -0,0 +1 @@
1
+ /**
2
  * Sencha GXT 3.1.1 - Sencha for GWT
1
3
  * Copyright(c) 2007-2014, Sencha, Inc.
2
4
  * licensing@sencha.com
3
5
  *
4
6
  * http://www.sencha.com/products/gxt/license/
5
7
  */
6
8
  private ProfilePresenter profilePresenter;
7
9
  private HasWidgets hasWidgets;
8
10
  public ProfileServiceProvider(ProfilePresenter profilePresenter, HasWidgets hasWidgets) {
9
11
  this.profilePresenter = profilePresenter;
10
12
  this.hasWidgets = hasWidgets;
11
13
  }
12
14
  @Override
13
15
  public void onServiceRequest(ProfileServiceRequest profileServiceRequest) {
14
16
  profilePresenter.go(hasWidgets);
15
17
  }
@@ -0,0 +1 @@
1
+ /**
2
  * Sencha GXT 3.1.1 - Sencha for GWT
1
3
  * Copyright(c) 2007-2014, Sencha, Inc.
2
4
  * licensing@sencha.com
3
5
  *
4
6
  * http://www.sencha.com/products/gxt/license/
5
7
  */
6
8
  public ProfileServiceRequest() {
7
9
  }
@@ -0,0 +1 @@
1
+ /**
2
  * Sencha GXT 3.1.1 - Sencha for GWT
1
3
  * Copyright(c) 2007-2014, Sencha, Inc.
2
4
  * licensing@sencha.com
3
5
  *
4
6
  * http://www.sencha.com/products/gxt/license/
5
7
  */
6
8
  private HashMap<Object, Object> serviceProviders = new HashMap<Object, Object>();
7
9
  public ServiceBus() {
8
10
  }
9
11
  @SuppressWarnings("unchecked")
10
12
  public <T extends ServiceRequest> T invoke(T serviceRequest) {
11
13
  ServiceProvider<T> serviceProvider = (ServiceProvider<T>) serviceProviders.get(serviceRequest.getClass());
12
14
  if (serviceProvider == null) {
13
15
  throw new IllegalStateException("No service provider, serviceRequest=" + serviceRequest.getClass().getName());
14
16
  }
15
17
  serviceProvider.onServiceRequest(serviceRequest);
16
18
  return serviceRequest; // for one step access to getters
17
19
  }
18
20
  public <T extends ServiceRequest> void registerServiceProvider(Class<T> serviceRequestClass,
19
21
  ServiceProvider<T> serviceProvider) {
20
22
  Object previousServiceProvider = serviceProviders.put(serviceRequestClass, serviceProvider);
21
23
  if (previousServiceProvider != null) {
22
24
  throw new IllegalStateException("Provider already defined, serviceRequest=" + serviceRequestClass.getName()
23
25
  + ", serviceProvider=" + serviceProvider.getClass().getName());
24
26
  }
25
27
  }
26
28
  public <T extends ServiceRequest> void removeServiceProvider(Class<T> serviceRequestClass) {
27
29
  serviceProviders.remove(serviceRequestClass);
28
30
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Sencha GXT 3.1.1 - Sencha for GWT
3
+ * Copyright(c) 2007-2014, Sencha, Inc.
4
+ * licensing@sencha.com
5
+ *
6
+ * http://www.sencha.com/products/gxt/license/
7
+ */
8
+ package com.dldinternet.aws.cfn.stacker.desktopapp.client.servicebus;
9
+
10
+ public interface ServiceProvider<T extends ServiceRequest>
11
+ {
12
+ public void onServiceRequest(T serviceRequest);
13
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Sencha GXT 3.1.1 - Sencha for GWT
3
+ * Copyright(c) 2007-2014, Sencha, Inc.
4
+ * licensing@sencha.com
5
+ *
6
+ * http://www.sencha.com/products/gxt/license/
7
+ */
8
+ package com.dldinternet.aws.cfn.stacker.desktopapp.client.servicebus;
9
+
10
+ public interface ServiceRequest
11
+ {
12
+
13
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Sencha GXT 3.1.1 - Sencha for GWT
3
+ * Copyright(c) 2007-2014, Sencha, Inc.
4
+ * licensing@sencha.com
5
+ *
6
+ * http://www.sencha.com/products/gxt/license/
7
+ */
8
+ package com.dldinternet.aws.cfn.stacker.desktopapp.client.spreadsheet;
9
+
10
+ import com.sencha.gxt.core.client.ValueProvider;
11
+
12
+ public class ChartValueProvider implements ValueProvider<Row, Number> {
13
+ private int columnIndex;
14
+ private Worksheet worksheet;
15
+
16
+ public ChartValueProvider(Worksheet worksheet, int columnIndex) {
17
+ this.worksheet = worksheet;
18
+ this.columnIndex = columnIndex;
19
+ }
20
+
21
+ @Override
22
+ public String getPath() {
23
+ return worksheet.getValue(0, columnIndex);
24
+ }
25
+
26
+ @Override
27
+ public Number getValue(Row row) {
28
+ Number number;
29
+ String value = row.getColumns().get(columnIndex);
30
+ if (value.startsWith(Evaluator.EXPRESSION_MARKER)) {
31
+ int rowIndex = worksheet.getListStore().indexOf(row);
32
+ number = worksheet.evaluate(value, rowIndex, columnIndex);
33
+ } else {
34
+ try {
35
+ number = Double.parseDouble(value);
36
+ } catch (RuntimeException e) {
37
+ number = 0;
38
+ }
39
+ }
40
+ return number;
41
+ }
42
+
43
+ @Override
44
+ public void setValue(Row row, Number value) {
45
+ throw new UnsupportedOperationException();
46
+ }
47
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Sencha GXT 3.1.1 - Sencha for GWT
3
+ * Copyright(c) 2007-2014, Sencha, Inc.
4
+ * licensing@sencha.com
5
+ *
6
+ * http://www.sencha.com/products/gxt/license/
7
+ */
8
+ package com.dldinternet.aws.cfn.stacker.desktopapp.client.spreadsheet;
9
+
10
+ import com.google.gwt.safehtml.shared.SafeHtml;
11
+ import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
12
+
13
+ public interface ColumnProvider {
14
+
15
+ ColumnConfig<Row, Object> getColumn(int cellIndex);
16
+
17
+ void setColumnHeader(int columnIndex, SafeHtml fromString);
18
+
19
+ }
@@ -0,0 +1,547 @@
1
+ /**
2
+ * Sencha GXT 3.1.1 - Sencha for GWT
3
+ * Copyright(c) 2007-2014, Sencha, Inc.
4
+ * licensing@sencha.com
5
+ *
6
+ * http://www.sencha.com/products/gxt/license/
7
+ */
8
+ package com.dldinternet.aws.cfn.stacker.desktopapp.client.spreadsheet;
9
+
10
+ import com.google.gwt.regexp.shared.MatchResult;
11
+ import com.google.gwt.regexp.shared.RegExp;
12
+
13
+ /**
14
+ * <pre>
15
+ * expression =
16
+ * simple-expression
17
+ * | "-" expression
18
+ * | "+" expression
19
+ * | "=" expression .
20
+ *
21
+ * simple-expression = term {("+"|"-") term} .
22
+ *
23
+ * term = factor {("*"|"/") factor} .
24
+ *
25
+ * factor =
26
+ * name
27
+ * | number
28
+ * | "(" expression ")" .
29
+ *
30
+ * name =
31
+ * cell-reference
32
+ * | function-name "(" expression {"," expression} ")" .
33
+ *
34
+ * </pre>
35
+ *
36
+ * The leading '=' form of the expression is provided to simplify use of
37
+ * EXPRESSION_MARKER in spreadsheet formulas.
38
+ *
39
+ * As is the convention, the leading '+' form of the expression is provided for
40
+ * symmetry with the leading '-' form.
41
+ *
42
+ * A cell-reference takes the conventional column-name-row-number form, where
43
+ * either can be specified as $ to indicate the same column or row, for example:
44
+ *
45
+ * <pre>
46
+ * =((B1-A1)/A1)*100 to calculate percent increase from A1 to B1
47
+ * =SUM(B2:B6) to sum rows 2 through 6 in column B
48
+ * =SUM($2:$6) to sum rows 2 through 6 in the same column
49
+ * =SUM(B$:F$) to sum columns B through F in the same row
50
+ * </pre>
51
+ */
52
+ public final class Evaluator {
53
+
54
+ public enum Location {
55
+ COLUMN, ROW
56
+ }
57
+
58
+ public enum Operation {
59
+ DELETE, INSERT, RESTORE, SAVE
60
+ }
61
+
62
+ public class RecursiveExpressionException extends IllegalArgumentException {
63
+
64
+ public RecursiveExpressionException(String message) {
65
+ super(message);
66
+ }
67
+
68
+ }
69
+
70
+ public class Scanner {
71
+ private int base;
72
+ private int current;
73
+ private String expression;
74
+
75
+ public Scanner(String expression) {
76
+ this.expression = expression;
77
+ }
78
+
79
+ public String getNext() {
80
+ base = current;
81
+ int length = expression.length();
82
+ State state = State.INITIAL;
83
+ StringBuilder s = new StringBuilder();
84
+ char quote = 0;
85
+
86
+ while (current < length && state != State.FINAL) {
87
+ char c = expression.charAt(current);
88
+ switch (state) {
89
+ case INITIAL:
90
+ if (isOperator(c)) {
91
+ s.append(c);
92
+ state = State.FINAL;
93
+ } else if (isAlpha(c)) {
94
+ s.append(c);
95
+ state = State.IDENTIFIER;
96
+ } else if (c == '.' || isDigit(c)) {
97
+ s.append(c);
98
+ state = State.NUMBER;
99
+ } else if (c == '\'') {
100
+ quote = c;
101
+ state = State.QUOTE;
102
+ } else if (!isWhitespace(c)) {
103
+ throw new IllegalArgumentException("Unexpected character " + c);
104
+ }
105
+ break;
106
+ case IDENTIFIER:
107
+ if (isWhitespace(c)) {
108
+ state = State.FINAL;
109
+ } else if (isOperator(c)) {
110
+ current--;
111
+ state = State.FINAL;
112
+ } else {
113
+ s.append(c);
114
+ }
115
+ break;
116
+ case NUMBER:
117
+ if (c == '.' || isDigit(c)) {
118
+ s.append(c);
119
+ } else {
120
+ current--;
121
+ state = State.FINAL;
122
+ }
123
+ break;
124
+ case QUOTE:
125
+ if (c == quote) {
126
+ state = State.FINAL;
127
+ } else {
128
+ s.append(c);
129
+ }
130
+ break;
131
+ case FINAL:
132
+ // do nothing
133
+ }
134
+ current++;
135
+ }
136
+ return s.toString();
137
+ }
138
+
139
+ public void retract() {
140
+ current = base;
141
+ }
142
+
143
+ private boolean isAlpha(char c) {
144
+ return Character.isLetter(c) || c == '$' || c == '@';
145
+ }
146
+
147
+ private boolean isDigit(char c) {
148
+ return Character.isDigit(c);
149
+ }
150
+
151
+ private boolean isOperator(char c) {
152
+ return c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')' || c == ',' || c == ':' || c == '=';
153
+ }
154
+
155
+ private boolean isWhitespace(char c) {
156
+ // Note: GWT does not support Character.isWhitespace
157
+ return c == ' ' || c == '\t' || c == '\n' || c == '\r';
158
+ }
159
+ }
160
+
161
+ public enum State {
162
+ FINAL, IDENTIFIER, INITIAL, NUMBER, QUOTE
163
+ }
164
+
165
+ private class AvgVisitor implements Visitor {
166
+
167
+ int count;
168
+ double sum;
169
+
170
+ public double getValue() {
171
+ return count == 0 ? 0 : sum / count;
172
+ }
173
+
174
+ @Override
175
+ public void initialize() {
176
+ count = 0;
177
+ sum = 0;
178
+ }
179
+
180
+ @Override
181
+ public void visit(int rowIndex, int columnIndex) {
182
+ count++;
183
+ sum += getDouble(rowIndex, columnIndex);
184
+ }
185
+
186
+ }
187
+
188
+ private class Cell {
189
+
190
+ private String rowName;
191
+ private int rowIndex;
192
+ private String columnName;
193
+ private int columnIndex;
194
+
195
+ private Cell(String rowName, int rowIndex, String columnName, int columnIndex) {
196
+ this.rowName = rowName;
197
+ this.rowIndex = rowIndex;
198
+ this.columnName = columnName;
199
+ this.columnIndex = columnIndex;
200
+ }
201
+
202
+ private int getColumnIndex() {
203
+ return columnIndex;
204
+ }
205
+
206
+ private String getColumnName() {
207
+ return columnName;
208
+ }
209
+
210
+ private int getRowIndex() {
211
+ return rowIndex;
212
+ }
213
+
214
+ private String getRowName() {
215
+ return rowName;
216
+ }
217
+
218
+ }
219
+
220
+ private class MaxVisitor implements Visitor {
221
+
222
+ double max;
223
+
224
+ public double getValue() {
225
+ return max;
226
+ }
227
+
228
+ @Override
229
+ public void initialize() {
230
+ max = Double.MIN_NORMAL;
231
+ }
232
+
233
+ @Override
234
+ public void visit(int rowIndex, int columnIndex) {
235
+ max = Math.max(max, getDouble(rowIndex, columnIndex));
236
+ }
237
+ }
238
+
239
+ private class MinVisitor implements Visitor {
240
+
241
+ double min;
242
+
243
+ public double getValue() {
244
+ return min;
245
+ }
246
+
247
+ @Override
248
+ public void initialize() {
249
+ min = Double.MAX_VALUE;
250
+ }
251
+
252
+ @Override
253
+ public void visit(int rowIndex, int columnIndex) {
254
+ min = Math.min(min, getDouble(rowIndex, columnIndex));
255
+ }
256
+ }
257
+
258
+ private class SumVisitor implements Visitor {
259
+
260
+ double sum;
261
+
262
+ public double getValue() {
263
+ return sum;
264
+ }
265
+
266
+ @Override
267
+ public void initialize() {
268
+ sum = 0;
269
+ }
270
+
271
+ @Override
272
+ public void visit(int rowIndex, int columnIndex) {
273
+ sum += getDouble(rowIndex, columnIndex);
274
+ }
275
+ }
276
+
277
+ private interface Visitor {
278
+
279
+ public double getValue();
280
+
281
+ public void initialize();
282
+
283
+ public void visit(int rowIndex, int columnIndex);
284
+
285
+ }
286
+
287
+ public static final String EXPRESSION_MARKER = "=";
288
+ private static final int MAX_LEVELS = 10;
289
+ private TableValueProvider table;
290
+ private Scanner scanner;
291
+ private int level;
292
+ private int rowIndex = -1;
293
+ private int columnIndex = -1;
294
+
295
+ public Evaluator(String expression, TableValueProvider table) {
296
+ this(expression, table, 0);
297
+ }
298
+
299
+ public Evaluator(String expression, TableValueProvider table, int level) {
300
+ this.scanner = new Scanner(expression);
301
+ this.table = table;
302
+ this.level = level;
303
+ }
304
+
305
+ public String adjustCellReferences(Operation operation, Location location, String expression, int index) {
306
+ int delta = 0;
307
+ switch (operation) {
308
+ case DELETE:
309
+ delta = -1;
310
+ break;
311
+ case INSERT:
312
+ delta = +1;
313
+ break;
314
+ default:
315
+ // do nothing
316
+ }
317
+ StringBuilder newExpression = new StringBuilder();
318
+ Scanner scanner = new Scanner(expression);
319
+ String token;
320
+ while (!(token = scanner.getNext()).isEmpty()) {
321
+ Cell cell = parseCellReference(token);
322
+ if (cell == null) {
323
+ newExpression.append(token);
324
+ } else {
325
+ switch (location) {
326
+ case COLUMN:
327
+ if (cell.getColumnName().equals("$")) {
328
+ newExpression.append(token);
329
+ } else if (operation == Operation.SAVE && cell.getColumnIndex() == index) {
330
+ newExpression.append(SpreadsheetUtilities.getCellName(cell.getRowName(), "@"));
331
+ } else if (operation == Operation.RESTORE && cell.getColumnName().equals("@")) {
332
+ newExpression.append(SpreadsheetUtilities.getCellName(cell.getRowName(), index));
333
+ } else if (cell.getColumnIndex() < index) {
334
+ newExpression.append(token);
335
+ } else {
336
+ newExpression.append(SpreadsheetUtilities.getCellName(cell.getRowName(), cell.getColumnIndex() + delta));
337
+ }
338
+ break;
339
+ case ROW:
340
+ if (cell.getRowName().equals("$")) {
341
+ newExpression.append(token);
342
+ } else if (operation == Operation.SAVE && cell.getRowIndex() == index) {
343
+ newExpression.append(SpreadsheetUtilities.getCellName("@", cell.getColumnName()));
344
+ } else if (operation == Operation.RESTORE && cell.getRowName().equals("@")) {
345
+ newExpression.append(SpreadsheetUtilities.getCellName(index, cell.getColumnName()));
346
+ } else if (cell.getRowIndex() < index) {
347
+ newExpression.append(token);
348
+ } else {
349
+ newExpression.append(SpreadsheetUtilities.getCellName(cell.getRowIndex() + delta, cell.getColumnName()));
350
+ }
351
+ break;
352
+ default:
353
+ throw new UnsupportedOperationException();
354
+ }
355
+ }
356
+ }
357
+ return newExpression.toString();
358
+ }
359
+
360
+ public double evaluateExpression() {
361
+ double left;
362
+ String operator = getOperator("-", "+", "=");
363
+ if (operator == null) {
364
+ left = evaluateSimpleExpression();
365
+ } else if (operator.equals("+") || operator.equals("=")) {
366
+ left = evaluateExpression();
367
+ } else {
368
+ left = -evaluateExpression();
369
+ }
370
+ return left;
371
+ }
372
+
373
+ public double getDouble(String stringValue, int rowIndex, int columnIndex) {
374
+ double doubleValue;
375
+ if (stringValue.startsWith("=")) {
376
+ if (level > MAX_LEVELS) {
377
+ throw new RecursiveExpressionException(stringValue);
378
+ }
379
+ Evaluator evaluator = new Evaluator(stringValue, table, level + 1);
380
+ evaluator.setRowIndex(rowIndex);
381
+ evaluator.setColumnIndex(columnIndex);
382
+ doubleValue = evaluator.evaluateExpression();
383
+ } else {
384
+ doubleValue = toDouble(stringValue);
385
+ }
386
+ return doubleValue;
387
+ }
388
+
389
+ public void setColumnIndex(int columnIndex) {
390
+ this.columnIndex = columnIndex;
391
+ }
392
+
393
+ public void setRowIndex(int rowIndex) {
394
+ this.rowIndex = rowIndex;
395
+ }
396
+
397
+ private double evaluateCellRangeFunctionReference(String token) {
398
+ Visitor visitor = null;
399
+ if (token.equalsIgnoreCase("avg")) {
400
+ visitor = new AvgVisitor();
401
+ } else if (token.equalsIgnoreCase("max")) {
402
+ visitor = new MaxVisitor();
403
+ } else if (token.equalsIgnoreCase("min")) {
404
+ visitor = new MinVisitor();
405
+ } else if (token.equalsIgnoreCase("sum")) {
406
+ visitor = new SumVisitor();
407
+ } else {
408
+ throw new IllegalArgumentException("Expected AVG, MAX, MIN or SUM. Encountered " + token);
409
+ }
410
+ visitCellRange(visitor);
411
+ return visitor.getValue();
412
+ }
413
+
414
+ private double evaluateCellReference(String token) {
415
+ Cell cell = parseCellReference(token);
416
+ if (cell == null) {
417
+ throw new IllegalArgumentException("Invalid cell reference " + token + ". Please use ColRow notation (e.g. B1).");
418
+ }
419
+ String value = table.getValue(cell.getRowIndex(), cell.getColumnIndex());
420
+ return getDouble(value, cell.getRowIndex(), cell.getColumnIndex());
421
+ }
422
+
423
+ private double evaluateFactor() {
424
+ double value;
425
+ String token = scanner.getNext();
426
+ if (isName(token)) {
427
+ String lookahead = scanner.getNext();
428
+ if (lookahead.equals("(")) {
429
+ value = evaluateCellRangeFunctionReference(token);
430
+ expect(")");
431
+ } else {
432
+ scanner.retract();
433
+ value = evaluateCellReference(token);
434
+ }
435
+ } else if (token.equals("(")) {
436
+ value = evaluateExpression();
437
+ expect(")");
438
+ } else {
439
+ value = toDouble(token);
440
+ }
441
+ return value;
442
+ }
443
+
444
+ private double evaluateSimpleExpression() {
445
+ double left = evaluateTerm();
446
+ String operator;
447
+ while ((operator = getOperator("+", "-")) != null) {
448
+ double right = evaluateTerm();
449
+ if (operator.equals("+")) {
450
+ left += right;
451
+ } else if (operator.equals("-")) {
452
+ left -= right;
453
+ }
454
+ }
455
+ return left;
456
+ }
457
+
458
+ private double evaluateTerm() {
459
+ double left = evaluateFactor();
460
+ String operator;
461
+ while ((operator = getOperator("*", "/")) != null) {
462
+ double right = evaluateFactor();
463
+ if (operator.equals("*")) {
464
+ left *= right;
465
+ } else if (operator.equals("/")) {
466
+ left /= right;
467
+ }
468
+ }
469
+ return left;
470
+ }
471
+
472
+ private void expect(String expectedToken) {
473
+ String token = scanner.getNext();
474
+ if (!token.equals(expectedToken)) {
475
+ throw new IllegalArgumentException("Expected " + expectedToken + ". Encountered " + token);
476
+ }
477
+ }
478
+
479
+ private double getDouble(int rowIndex, int columnIndex) {
480
+ String value = table.getValue(rowIndex, columnIndex);
481
+ return getDouble(value, rowIndex, columnIndex);
482
+ }
483
+
484
+ private String getOperator(String... operators) {
485
+ String token = scanner.getNext();
486
+ for (String operator : operators) {
487
+ if (token.equals(operator)) {
488
+ return operator;
489
+ }
490
+ }
491
+ scanner.retract();
492
+ return null;
493
+ }
494
+
495
+ private boolean isName(String token) {
496
+ return Character.isLetter(token.charAt(0));
497
+ }
498
+
499
+ private Cell parseCellReference(String cellName) {
500
+ Cell cell = null;
501
+ String pattern = "^([a-zA-Z\\$\\@])+([0-9\\$\\@])+$";
502
+ RegExp regularExpression = RegExp.compile(pattern);
503
+ MatchResult matchResult = regularExpression.exec(cellName);
504
+ if (matchResult != null) {
505
+ String columnName = matchResult.getGroup(1);
506
+ int columnIndex;
507
+ if (columnName.equals("$") || columnName.equals("@")) {
508
+ columnIndex = this.columnIndex;
509
+ } else {
510
+ columnIndex = SpreadsheetUtilities.getColumnIndex(columnName);
511
+ }
512
+ String rowName = matchResult.getGroup(2);
513
+ int rowIndex;
514
+ if (rowName.equals("$") || rowName.equals("@")) {
515
+ rowIndex = this.rowIndex;
516
+ } else {
517
+ rowIndex = Integer.parseInt(rowName) - 1;
518
+ }
519
+ cell = new Cell(rowName, rowIndex, columnName, columnIndex);
520
+ }
521
+ return cell;
522
+ }
523
+
524
+ private double toDouble(String token) {
525
+ double value;
526
+ try {
527
+ value = Double.parseDouble(token);
528
+ } catch (NumberFormatException e) {
529
+ value = 0;
530
+ }
531
+ return value;
532
+ }
533
+
534
+ private void visitCellRange(Visitor visitor) {
535
+ String from = scanner.getNext();
536
+ Cell fromCell = parseCellReference(from);
537
+ expect(":");
538
+ String to = scanner.getNext();
539
+ Cell toCell = parseCellReference(to);
540
+ visitor.initialize();
541
+ for (int rowIndex = fromCell.getRowIndex(); rowIndex <= toCell.getRowIndex(); rowIndex++) {
542
+ for (int columnIndex = fromCell.getColumnIndex(); columnIndex <= toCell.getColumnIndex(); columnIndex++) {
543
+ visitor.visit(rowIndex, columnIndex);
544
+ }
545
+ }
546
+ }
547
+ }