resty-generators 0.5.3 → 0.6.0

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 (68) hide show
  1. data/features/generators.feature +67 -0
  2. data/features/step_definitions/simple_steps.rb +1 -0
  3. data/lib/generators/resty/base.rb +15 -3
  4. data/lib/generators/resty/model/model_generator.rb +33 -3
  5. data/lib/generators/resty/scaffold/scaffold_generator.rb +30 -15
  6. data/lib/generators/resty/setup/setup_generator.rb +2 -2
  7. data/lib/generators/resty/setup/setup_generator.rb~ +31 -0
  8. data/lib/generators/resty/setup/templates/ActivityFactory.java~ +7 -0
  9. data/lib/generators/resty/setup/templates/ActivityPlace.java +5 -0
  10. data/lib/generators/resty/setup/templates/ActivityPlace.java~ +8 -0
  11. data/lib/generators/resty/setup/templates/BreadCrumbsPanel.java +3 -2
  12. data/lib/generators/resty/setup/templates/BreadCrumbsPanel.java~ +79 -0
  13. data/lib/generators/resty/setup/templates/GinModule.java~ +7 -0
  14. data/lib/generators/resty/setup/templates/LoginActivity.java~ +58 -0
  15. data/lib/generators/resty/setup/templates/LoginPlace.java~ +20 -0
  16. data/lib/generators/resty/setup/templates/LoginViewImpl.java~ +21 -0
  17. data/lib/generators/resty/setup/templates/Mavenfile +5 -5
  18. data/lib/generators/resty/setup/templates/Mavenfile~ +15 -0
  19. data/lib/generators/resty/setup/templates/MenuPanel.java~ +12 -0
  20. data/lib/generators/resty/setup/templates/PLaceHistoryMapper.java~ +7 -0
  21. data/lib/generators/resty/setup/templates/RestfulPlace.java~ +22 -0
  22. data/lib/generators/resty/setup/templates/SessionActivityPlaceActivityMapper.java~ +71 -0
  23. data/lib/generators/resty/setup/templates/SessionRestService.java~ +23 -0
  24. data/lib/generators/resty/setup/templates/User.java +34 -4
  25. data/lib/generators/resty/setup/templates/authentication.rb +2 -1
  26. data/lib/generators/resty/setup/templates/authentication.rb~ +4 -0
  27. data/lib/generators/resty/setup/templates/empty.css~ +1 -0
  28. data/lib/generators/resty/setup/templates/gwt.css +45 -0
  29. data/lib/generators/resty/setup/templates/initializer.rb~ +1 -0
  30. data/lib/generators/resty/setup/templates/monkey_patch.rb~ +27 -0
  31. data/lib/generators/resty/setup/templates/page.html~ +0 -0
  32. data/lib/generators/resty/setup/templates/session.rb +18 -36
  33. data/lib/generators/resty/setup/templates/session.rb~ +45 -0
  34. data/lib/generators/resty/setup/templates/sessions_controller.rb +27 -8
  35. data/lib/generators/resty/setup/templates/sessions_controller.rb~ +27 -0
  36. data/lib/generators/resty/setup/templates/user.rb +38 -6
  37. data/lib/generators/resty/setup/templates/user.rb~ +27 -0
  38. data/lib/generators/resty/templates/Activity.java +78 -39
  39. data/lib/generators/resty/templates/Activity.java~ +67 -0
  40. data/lib/generators/resty/templates/ActivityPlace.java~ +11 -0
  41. data/lib/generators/resty/templates/ColumnDefinitionsImpl.java~ +24 -0
  42. data/lib/generators/resty/templates/ColumnDefintionsImpl.java~ +34 -0
  43. data/lib/generators/resty/templates/Controller.java~ +49 -0
  44. data/lib/generators/resty/templates/Editor.java +123 -0
  45. data/lib/generators/resty/templates/Editor.java~ +84 -0
  46. data/lib/generators/resty/templates/Editor.ui.xml +41 -0
  47. data/lib/generators/resty/templates/Editor.ui.xml~ +37 -0
  48. data/lib/generators/resty/templates/Event.java +30 -0
  49. data/lib/generators/resty/templates/Event.java~ +31 -0
  50. data/lib/generators/resty/templates/EventHandler.java +8 -0
  51. data/lib/generators/resty/templates/EventHandler.java~ +30 -0
  52. data/lib/generators/resty/templates/Model.java +144 -15
  53. data/lib/generators/resty/templates/Model.java~ +23 -0
  54. data/lib/generators/resty/templates/Place.java +1 -1
  55. data/lib/generators/resty/templates/Place.java~ +21 -0
  56. data/lib/generators/resty/templates/PlaceTokenizer.java +1 -1
  57. data/lib/generators/resty/templates/PlaceTokenizer.java~ +19 -0
  58. data/lib/generators/resty/templates/RestService.java~ +51 -0
  59. data/lib/generators/resty/templates/View.java +15 -4
  60. data/lib/generators/resty/templates/View.java~ +23 -0
  61. data/lib/generators/resty/templates/View.ui.xml +22 -38
  62. data/lib/generators/resty/templates/View.ui.xml~ +17 -0
  63. data/lib/generators/resty/templates/ViewImpl.java +88 -103
  64. data/lib/generators/resty/templates/ViewImpl.java~ +153 -0
  65. data/lib/resty/abstract_session.rb~ +59 -0
  66. data/lib/resty/child_path.rb~ +18 -0
  67. data/lib/resty/session.rb~ +6 -0
  68. metadata +56 -11
@@ -0,0 +1,67 @@
1
+ Feature: Generators for Resty
2
+
3
+ Scenario: Create a rails application and adding 'resty-generators' gem will provide the resty generators
4
+ Given I create new rails application with template "simple.template"
5
+ And I execute "rails generate"
6
+ Then the output should contain "resty:controller" and "resty:model" and "resty:scaffold" and "resty:setup"
7
+
8
+ Given me an existing rails application "simple"
9
+ And I execute "rails generate resty:setup"
10
+ Then the output should contain "GWT_MODULE_NAME"
11
+
12
+ Given me an existing rails application "simple"
13
+ And I execute "rails generate resty:setup com.example"
14
+ Then the output should contain "src/main/java/com/example/Simple.gwt.xml" and "Mavenfile" and "src/main/java/com/example/client/SimpleEntryPoint.java" and "public/Simple.html" and "public/stylesheets/simple.css"
15
+
16
+ Given me an existing rails application "simple"
17
+ And I execute "compile gwt:compile"
18
+ Then the output should contain "Compilation succeeded"
19
+
20
+ Given me an existing rails application "simple"
21
+ And I execute "rails generate scaffold user name:string"
22
+ Then the output should contain "src/main/java/com/example/client/models/User.java" and "src/main/java/com/example/client/restservices/UsersRestService.java"
23
+
24
+ Given me an existing rails application "simple"
25
+ And I execute "compile gwt:compile"
26
+ Then the output should contain "Compilation succeeded"
27
+
28
+ Given me an existing rails application "simple"
29
+ And I execute "rake db:migrate test"
30
+ Then the output should contain "1 tests, 1 assertions, 0 failures, 0 errors" and "7 tests, 10 assertions, 0 failures, 0 errors"
31
+
32
+ Given me an existing rails application "simple"
33
+ And I execute "rails generate scaffold project name:string children:number cars:fixnum age:integer weight:float activated:boolean expires_at:date fire_up_at:datetime --skip-timestamps"
34
+ And I execute "compile gwt:compile"
35
+ Then the output should contain "Compilation succeeded"
36
+
37
+ Given me an existing rails application "simple"
38
+ And I execute "rails generate scaffold accounts name:string --timestamps --optimistic"
39
+ And I execute "compile gwt:compile"
40
+ Then the output should contain "Compilation succeeded"
41
+
42
+ Given me an existing rails application "simple"
43
+ And I execute "rails generate model cars name:string"
44
+ And I execute "compile gwt:compile"
45
+ Then the output should contain "Compilation succeeded"
46
+
47
+
48
+
49
+ Scenario: Create a gwt rails application with session and menu
50
+ Given I create new rails application with template "complete.template" and "complete" tests
51
+ And I execute "rails generate resty:setup com.example --session --menu"
52
+ Then the output should contain "src/main/java/com/example/client/SessionActivityPlaceActivityMapper.java" and "src/main/java/com/example/client/managed/CompleteMenuPanel.java" and "src/main/java/com/example/client/activities/LoginActivity.java"
53
+
54
+ Given me an existing rails application "complete"
55
+ And I execute "compile gwt:compile"
56
+ Then the output should contain "Compilation succeeded"
57
+
58
+ Given me an existing rails application "complete"
59
+ And I execute "rails generate scaffold accounts name:string"
60
+ And I execute "compile gwt:compile"
61
+ Then the output should contain "Compilation succeeded"
62
+
63
+ Given me an existing rails application "complete"
64
+ And I execute "rake db:migrate test"
65
+ Then the output should contain "1 tests, 1 assertions, 0 failures, 0 errors" and "7 tests, 10 assertions, 0 failures, 0 errors"
66
+
67
+
@@ -0,0 +1 @@
1
+ require 'maven/cucumber_steps'
@@ -38,6 +38,14 @@ module Resty
38
38
  @places_package ||= base_package + ".places"
39
39
  end
40
40
 
41
+ def events_package
42
+ @events_package ||= base_package + ".events"
43
+ end
44
+
45
+ def editors_package
46
+ @editors_package ||= base_package + ".editors"
47
+ end
48
+
41
49
  def activities_package
42
50
  @activities_package ||= base_package + ".activities"
43
51
  end
@@ -59,11 +67,15 @@ module Resty
59
67
  end
60
68
 
61
69
  def type_map
62
- @type_map ||= {:integer => 'int', :boolean => 'bool', :string => 'String', :float => 'double', :date => 'java.util.Date', :datetime => 'java.util.Date', :number => 'long', :fixnum => 'long'}
70
+ @type_map ||= {:integer => 'int', :boolean => 'boolean', :string => 'String', :float => 'double', :date => 'java.util.Date', :datetime => 'java.util.Date', :number => 'long', :fixnum => 'long', :text => 'String', :password => 'String'}
71
+ end
72
+
73
+ def type_widget_map
74
+ @type_widget_map ||= {:integer => 'r:IntegerBox', :boolean => 'g:CheckBox', :float => 'r:DoubleBox', :date => 'd:DateBox', :datetime => 'd:DateBox', :number => 'r:LongBox', :fixnum => 'r:LongBox', :text => 'g:TextArea', :string => 'g:TextBox', :password => 'g:PasswordTextBox', :float => 'r:DoubleBox'}
63
75
  end
64
76
 
65
- def type_conversion_map
66
- @type_conversion_map ||= {:integer => 'Integer.parseInt', :boolean => 'Boolean.parseBoolean', :float => 'Double.parseDouble', :date => 'TODO', :datetime => 'TODO', :number => 'Long.parseLong', :fixnum => 'Long.parseLong'}
77
+ def type_widget_prefix_map
78
+ @type_widget_prefix_map ||= {:integer => 'r', :boolean => 'g', :float => 'r', :date => 'd', :datetime => 'd', :number => 'r', :fixnum => 'r', :text => 'g', :string => 'g', :passord => 'g', :float => 'r'}
67
79
  end
68
80
 
69
81
  def find_gwt_xml(basedir)
@@ -8,16 +8,46 @@ module Resty
8
8
 
9
9
  argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
10
10
 
11
- if defined? ::Ixtlan::ModifiedBy
12
- class_option :modified_by, :type => :boolean
13
- end
14
11
  class_option :timestamps, :type => :boolean, :default => true
12
+ class_option :read_only, :type => :boolean, :default => false
13
+ class_option :modified_by, :type => :boolean, :default => false
14
+ class_option :singleton, :type => :boolean, :default => false
15
15
  class_option :parent, :type => :string, :desc => "The parent class for the generated model"
16
16
 
17
17
  def create_model_file
18
18
  template 'Model.java', File.join(java_root, models_package.gsub(/\./, "/"), class_path, "#{class_name}.java")
19
19
  end
20
20
 
21
+ def create_event_files
22
+ template 'Event.java', File.join(java_root, events_package.gsub(/\./, "/"), class_path, "#{class_name}Event.java")
23
+ template 'EventHandler.java', File.join(java_root, events_package.gsub(/\./, "/"), class_path, "#{class_name}EventHandler.java")
24
+ end
25
+
26
+ def create_rest_service_file
27
+ template 'RestService.java', File.join(java_root, restservices_package.gsub(/\./, "/"), class_path, "#{controller_class_name}RestService.java")
28
+ end
29
+
30
+ def controller_class_name
31
+ @controller_class_name ||= class_name
32
+ end
33
+
34
+ def actions
35
+ @actions ||=
36
+ begin
37
+ keys = action_map.keys
38
+ if options[:singleton]
39
+ keys.delete('index')
40
+ keys.delete('create')
41
+ keys.delete('destroy')
42
+ end
43
+ if options[:read_only]
44
+ keys.delete('update')
45
+ keys.delete('create')
46
+ keys.delete('destroy')
47
+ end
48
+ keys
49
+ end
50
+ end
21
51
  end
22
52
  end
23
53
  end
@@ -9,17 +9,21 @@ module Resty
9
9
 
10
10
  argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
11
11
 
12
- if defined? ::Ixtlan::ModifiedBy
13
- class_option :modified_by, :type => :boolean
14
- end
15
- class_option :timestamps, :type => :boolean, :default => true
16
- class_option :parent, :type => :string, :desc => "The parent class for the generated model"
17
- class_option :singleton, :type => :boolean
12
+ class_option :timestamps, :type => :boolean, :default => true
13
+ class_option :read_only, :type => :boolean, :default => false
14
+ class_option :modified_by, :type => :boolean, :default => false
15
+ class_option :singleton, :type => :boolean, :default => false
16
+ class_option :parent, :type => :string, :desc => "The parent class for the generated model"
18
17
 
19
18
  def create_model_file
20
19
  template 'Model.java', File.join(java_root, models_package.gsub(/\./, "/"), class_path, "#{class_name}.java")
21
20
  end
22
21
 
22
+ def create_event_files
23
+ template 'Event.java', File.join(java_root, events_package.gsub(/\./, "/"), class_path, "#{class_name}Event.java")
24
+ template 'EventHandler.java', File.join(java_root, events_package.gsub(/\./, "/"), class_path, "#{class_name}EventHandler.java")
25
+ end
26
+
23
27
  def create_rest_service_file
24
28
  template 'RestService.java', File.join(java_root, restservices_package.gsub(/\./, "/"), class_path, "#{controller_class_name}RestService.java")
25
29
  end
@@ -30,6 +34,11 @@ module Resty
30
34
  template 'ViewImpl.java', File.join(java_root, views_package.gsub(/\./, "/"), class_path, "#{class_name}ViewImpl.java")
31
35
  end
32
36
 
37
+ def create_editor_files
38
+ template 'Editor.java', File.join(java_root, editors_package.gsub(/\./, "/"), class_path, "#{class_name}Editor.java")
39
+ template 'Editor.ui.xml', File.join(java_root, editors_package.gsub(/\./, "/"), class_path, "#{class_name}Editor.ui.xml")
40
+ end
41
+
33
42
  def create_place_files
34
43
  template 'Place.java', File.join(java_root, places_package.gsub(/\./, "/"), class_path, "#{class_name}Place.java")
35
44
  template 'PlaceTokenizer.java', File.join(java_root, places_package.gsub(/\./, "/"), class_path, "#{class_name}PlaceTokenizer.java")
@@ -115,15 +124,21 @@ EOF
115
124
  end
116
125
 
117
126
  def actions
118
- if options[:singleton]
119
- keys = action_map.keys
120
- keys.delete('index')
121
- keys.delete('create')
122
- keys.delete('destroy')
123
- keys
124
- else
125
- action_map.keys
126
- end
127
+ @actions ||=
128
+ begin
129
+ keys = action_map.keys
130
+ if options[:singleton]
131
+ keys.delete('index')
132
+ keys.delete('create')
133
+ keys.delete('destroy')
134
+ end
135
+ if options[:read_only]
136
+ keys.delete('update')
137
+ keys.delete('create')
138
+ keys.delete('destroy')
139
+ end
140
+ keys
141
+ end
127
142
  end
128
143
  end
129
144
  end
@@ -179,8 +179,8 @@ resource :session do
179
179
  ROUTE
180
180
  gem 'ixtlan-session-timeout'
181
181
  gem 'ixtlan-guard'
182
- # TODO until rmvn uses the right openssl gem
183
- #gem "jruby-openssl", "~> 0.7.4", :platforms => :jruby
182
+ # needs to be in Gemfile to have jruby find the gem
183
+ gem "jruby-openssl", "~> 0.7.4", :platforms => :jruby
184
184
  end
185
185
  end
186
186
 
@@ -0,0 +1,31 @@
1
+ require 'generators/resty/base'
2
+ module Resty
3
+ module Generators
4
+ class SetupGenerator < Base
5
+
6
+ arguments.clear # clear name argument from NamedBase
7
+
8
+ argument :gwt_module_name, :type => :string, :required => true
9
+
10
+ def name
11
+ gwt_module_name
12
+ end
13
+
14
+ def create_module_file
15
+ template 'module.gwt.xml', File.join(java_root, name.gsub(/\./, "/"), "#{application_name.underscore}.gwt.xml")
16
+ end
17
+
18
+ def create_maven_file
19
+ template 'Mavenfile', File.join("Mavenfile")
20
+ end
21
+
22
+ def create_entry_point_file
23
+ template 'EntryPoint.java', File.join(java_root, base_package.gsub(/\./, "/"), "#{application_name}.java")
24
+ end
25
+
26
+ def base_package
27
+ name + ".client"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ package <%= base_package %>.managed;
2
+
3
+ import com.google.gwt.activity.shared.Activity;
4
+ import com.google.inject.name.Named;
5
+
6
+ public interface ActivityFactory {
7
+ }
@@ -25,5 +25,10 @@ public abstract class ActivityPlace<T> extends RestfulPlace<T> {
25
25
  super(id, restfulAction, name);
26
26
  }
27
27
 
28
+ protected ActivityPlace(int id, T model, RestfulAction restfulAction,
29
+ String name) {
30
+ super(id, model, restfulAction, name);
31
+ }
32
+
28
33
  public abstract Activity create(ActivityFactory factory);
29
34
  }
@@ -0,0 +1,8 @@
1
+ package de.mkristian.gwt.rails;
2
+
3
+ import org.dhamma.schedules.client.managed.ActivityFactory;
4
+
5
+ public abstract class ActivityPlace extends Place {
6
+
7
+ public abstract Activity create(ActivityFactory factory);
8
+ }
@@ -1,3 +1,4 @@
1
+
1
2
  package <%= base_package %>;
2
3
 
3
4
  import javax.inject.Inject;
@@ -27,7 +28,7 @@ public class BreadCrumbsPanel extends FlowPanel {
27
28
  @Inject
28
29
  public BreadCrumbsPanel(final SessionManager<User> sessionManager, final SessionRestService service,
29
30
  final Notice notice){
30
- setStyleName("rails-breadcrumbs");
31
+ setStyleName("gwt-rails-breadcrumbs");
31
32
  setVisible(false);
32
33
  sessionManager.addSessionHandler(new SessionHandler<User>() {
33
34
 
@@ -47,7 +48,7 @@ public class BreadCrumbsPanel extends FlowPanel {
47
48
  }
48
49
 
49
50
  public void login(User user) {
50
- setName(user.name);
51
+ setName(user.getName());
51
52
  }
52
53
 
53
54
  public void accessDenied() {
@@ -0,0 +1,79 @@
1
+ package org.dhamma.schedules.client;
2
+
3
+ import javax.inject.Inject;
4
+ import javax.inject.Singleton;
5
+
6
+ import org.dhamma.schedules.client.models.User;
7
+ import org.dhamma.schedules.client.restservices.SessionRestService;
8
+ import org.fusesource.restygwt.client.Method;
9
+ import org.fusesource.restygwt.client.MethodCallback;
10
+
11
+ import com.google.gwt.event.dom.client.ClickEvent;
12
+ import com.google.gwt.event.dom.client.ClickHandler;
13
+ import com.google.gwt.user.client.History;
14
+ import com.google.gwt.user.client.ui.Button;
15
+ import com.google.gwt.user.client.ui.FlowPanel;
16
+ import com.google.gwt.user.client.ui.Label;
17
+
18
+ import de.mkristian.gwt.rails.Notice;
19
+ import de.mkristian.gwt.rails.session.SessionHandler;
20
+ import de.mkristian.gwt.rails.session.SessionManager;
21
+
22
+ @Singleton
23
+ public class BreadCrumbsPanel extends FlowPanel {
24
+
25
+ private final Button logout;
26
+
27
+ @Inject
28
+ public BreadCrumbsPanel(final SessionManager<User> sessionManager, final SessionRestService service,
29
+ final Notice notice){
30
+ setVisible(false);
31
+ sessionManager.addSessionHandler(new SessionHandler<User>() {
32
+
33
+ public void timeout() {
34
+ notice.setText("timeout");
35
+ setName(null);
36
+ History.fireCurrentHistoryState();
37
+ }
38
+
39
+ public void logout() {
40
+ service.destroy(new MethodCallback<Void>() {
41
+ public void onSuccess(Method method, Void response) {
42
+ }
43
+ public void onFailure(Method method, Throwable exception) {
44
+ }
45
+ });
46
+ setName(null);
47
+ History.fireCurrentHistoryState();
48
+ }
49
+
50
+ public void login(User user) {
51
+ setName(user.name);
52
+ History.fireCurrentHistoryState();
53
+ }
54
+
55
+ public void accessDenied() {
56
+ notice.setText("access denied");
57
+ }
58
+ });
59
+ logout = new Button("logout");
60
+ logout.addClickHandler(new ClickHandler() {
61
+
62
+ public void onClick(ClickEvent event) {
63
+ sessionManager.logout();
64
+ }
65
+ });
66
+ }
67
+
68
+ private void setName(String name){
69
+ clear();
70
+ if(name != null){
71
+ add(new Label("Welcome " + name));
72
+ add(logout);
73
+ setVisible(true);
74
+ }
75
+ else {
76
+ setVisible(false);
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,7 @@
1
+ package <%= base_package %>.managed;
2
+
3
+ import com.google.gwt.activity.shared.Activity;
4
+ import com.google.inject.name.Named;
5
+
6
+ public interface ActivityFactory {
7
+ }
@@ -0,0 +1,58 @@
1
+ package org.dhamma.schedules.client.activities;
2
+
3
+ import javax.inject.Inject;
4
+
5
+ import org.dhamma.schedules.client.models.User;
6
+ import org.dhamma.schedules.client.places.LoginPlace;
7
+ import org.dhamma.schedules.client.restservices.SessionRestService;
8
+ import org.fusesource.restygwt.client.Method;
9
+ import org.fusesource.restygwt.client.MethodCallback;
10
+
11
+ import com.google.gwt.activity.shared.AbstractActivity;
12
+ import com.google.gwt.core.client.GWT;
13
+ import com.google.gwt.event.shared.EventBus;
14
+ import com.google.gwt.user.client.ui.AcceptsOneWidget;
15
+ import com.google.inject.assistedinject.Assisted;
16
+
17
+ import de.mkristian.gwt.rails.session.Authentication;
18
+ import de.mkristian.gwt.rails.session.LoginView;
19
+ import de.mkristian.gwt.rails.session.Session;
20
+ import de.mkristian.gwt.rails.session.SessionManager;
21
+
22
+ public class LoginActivity extends AbstractActivity implements LoginView.Presenter{
23
+
24
+ private final SessionRestService service;
25
+ private final LoginView view;
26
+ private final SessionManager<User> sessionManager;
27
+
28
+ @Inject
29
+ public LoginActivity(@Assisted LoginPlace place,
30
+ LoginView view,
31
+ SessionRestService service,
32
+ SessionManager<User> sessionManager) {
33
+ this.view = view;
34
+ this.service = service;
35
+ this.sessionManager = sessionManager;
36
+ }
37
+
38
+ public void start(AcceptsOneWidget display, EventBus eventBus) {
39
+ display.setWidget(view.asWidget());
40
+ view.setPresenter(this);
41
+ }
42
+
43
+ public void login(final String login, String password) {
44
+ Authentication authentication = new Authentication(login, password);
45
+ service.create(authentication, new MethodCallback<Session<User>>() {
46
+
47
+ public void onSuccess(Method method, Session<User> session) {
48
+ GWT.log("logged in: " + login);
49
+ sessionManager.login(session);
50
+ }
51
+
52
+ public void onFailure(Method method, Throwable exception) {
53
+ GWT.log("login failed: " + exception.getMessage(), exception);
54
+ sessionManager.accessDenied();
55
+ }
56
+ });
57
+ }
58
+ }