resty-generators 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. data/lib/generators/resty/model/model_generator.rb +1 -1
  2. data/lib/generators/resty/scaffold/scaffold_generator.rb +47 -30
  3. data/lib/generators/resty/setup/setup_generator.rb +11 -0
  4. data/lib/generators/resty/setup/templates/ActivityPlace.java +8 -4
  5. data/lib/generators/resty/setup/templates/ActivityPlaceActivityMapper.java +3 -3
  6. data/lib/generators/resty/setup/templates/BreadCrumbsPanel.java +3 -6
  7. data/lib/generators/resty/setup/templates/EntryPoint.java +22 -17
  8. data/lib/generators/resty/setup/templates/LoginPlace.java +3 -3
  9. data/lib/generators/resty/setup/templates/LoginView.ui.xml +1 -1
  10. data/lib/generators/resty/setup/templates/Mavenfile +1 -1
  11. data/lib/generators/resty/setup/templates/MenuPanel.java +27 -0
  12. data/lib/generators/resty/setup/templates/PlaceHistoryMapper.java +37 -4
  13. data/lib/generators/resty/setup/templates/SessionActivityPlaceActivityMapper.java +10 -10
  14. data/lib/generators/resty/setup/templates/authentication.rb +1 -1
  15. data/lib/generators/resty/templates/Activity.java +63 -17
  16. data/lib/generators/resty/templates/Model.java +2 -2
  17. data/lib/generators/resty/templates/Place.java +7 -2
  18. data/lib/generators/resty/templates/PlaceTokenizer.java +3 -8
  19. data/lib/generators/resty/templates/RestService.java +4 -2
  20. data/lib/generators/resty/templates/View.java +16 -2
  21. data/lib/generators/resty/templates/View.ui.xml +31 -19
  22. data/lib/generators/resty/templates/ViewImpl.java +131 -28
  23. data/lib/resty-generators.rb +1 -1
  24. metadata +9 -12
  25. data/lib/generators/resty/setup/templates/monkey_patch.rb +0 -47
  26. data/lib/generators/resty/templates/ColumnDefinitionsImpl.java +0 -24
  27. data/lib/resty/child_path.rb +0 -31
@@ -1,14 +1,14 @@
1
1
  package <%= activities_package %>;
2
+ <% unless options[:singleton] -%>
2
3
 
4
+ import java.util.List;
5
+ <% end -%>
3
6
 
4
7
  import <%= models_package %>.<%= class_name %>;
5
8
  import <%= places_package %>.<%= class_name %>Place;
6
9
  import <%= restservices_package %>.<%= class_name.pluralize %>RestService;
7
10
  import <%= views_package %>.<%= class_name %>View;
8
11
 
9
- import <%= gwt_rails_package %>.Notice;
10
- import <%= gwt_rails_package %>.RestfulActionEnum;
11
-
12
12
  import org.fusesource.restygwt.client.Method;
13
13
  import org.fusesource.restygwt.client.MethodCallback;
14
14
 
@@ -20,6 +20,11 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
20
20
  import com.google.inject.Inject;
21
21
  import com.google.inject.assistedinject.Assisted;
22
22
 
23
+ import <%= gwt_rails_package %>.Notice;
24
+ <% unless options[:singleton] -%>
25
+ import <%= gwt_rails_package %>.places.RestfulActionEnum;
26
+ <% end -%>
27
+
23
28
  public class <%= class_name %>Activity extends AbstractActivity implements <%= class_name %>View.Presenter{
24
29
 
25
30
  private final <%= class_name %>Place place;
@@ -31,7 +36,7 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
31
36
  @Inject
32
37
  public <%= class_name %>Activity(@Assisted <%= class_name %>Place place, Notice notice, <%= class_name %>View view,
33
38
  <%= class_name.pluralize %>RestService service, PlaceController placeController) {
34
- this.place = place;
39
+ this.place = place;
35
40
  this.notice = notice;
36
41
  this.view = view;
37
42
  this.service = service;
@@ -42,20 +47,21 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
42
47
  display.setWidget(view.asWidget());
43
48
  view.setPresenter(this);
44
49
  <% if options[:singleton] -%>
45
- load();
50
+ load();
46
51
  <% else -%>
47
52
  switch(RestfulActionEnum.valueOf(place.action.name())){
48
53
  case EDIT:
49
54
  case SHOW:
50
- load(place.id);
55
+ load(place.model == null ? place.id : place.model.id);
51
56
  break;
52
- case INDEX:
53
- //TODO
54
- default:
55
- case NEW:
57
+ case NEW:
56
58
  notice.setText(null);
57
59
  view.reset(new <%= class_name %>());
58
60
  break;
61
+ case INDEX:
62
+ default:
63
+ load();
64
+ break;
59
65
  }
60
66
  <% end -%>
61
67
  view.reset(place.action);
@@ -64,6 +70,29 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
64
70
  public void goTo(Place place) {
65
71
  placeController.goTo(place);
66
72
  }
73
+ <% unless options[:singleton] -%>
74
+
75
+ public void load(){
76
+ view.setEnabled(false);
77
+ service.index(new MethodCallback<List<<%= class_name %>>>() {
78
+
79
+ public void onFailure(Method method, Throwable exception) {
80
+ notice.setText("error loading list of <%= class_name.underscore.humanize %>: "
81
+ + exception.getMessage());
82
+ view.reset(place.action);
83
+ }
84
+
85
+ public void onSuccess(Method method, List<<%= class_name %>> response) {
86
+ view.reset(response);
87
+ notice.setText(null);
88
+ view.reset(place.action);
89
+ }
90
+ });
91
+ if(!notice.isVisible()){
92
+ notice.setText("loading list of <%= class_name.underscore.humanize %> . . .");
93
+ }
94
+ }
95
+ <% end -%>
67
96
 
68
97
  public void load(<% unless options[:singleton] -%>int id<% end -%>) {
69
98
  view.setEnabled(false);
@@ -76,8 +105,8 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
76
105
  }
77
106
 
78
107
  public void onSuccess(Method method, <%= class_name %> response) {
79
- view.reset(response);
80
108
  notice.setText(null);
109
+ view.reset(response);
81
110
  view.reset(place.action);
82
111
  }
83
112
  });
@@ -94,9 +123,12 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
94
123
  public void onFailure(Method method, Throwable exception) {
95
124
  notice.setText("error creating <%= class_name.underscore.humanize %>: "
96
125
  + exception.getMessage());
126
+ view.reset(place.action);
97
127
  }
98
128
 
99
129
  public void onSuccess(Method method, <%= class_name %> response) {
130
+ notice.setText(null);
131
+ view.addToList(response);
100
132
  goTo(new <%= class_name %>Place(response.id,
101
133
  RestfulActionEnum.EDIT));
102
134
  }
@@ -104,36 +136,50 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
104
136
  notice.setText("creating <%= class_name.underscore.humanize %> . . .");
105
137
  }
106
138
 
107
- public void delete() {
108
- <%= class_name %> model = view.retrieve<%= class_name %>();
139
+ public void delete(final <%= class_name %> model){
109
140
  view.setEnabled(false);
110
141
  service.destroy(model, new MethodCallback<Void>() {
111
142
 
112
143
  public void onFailure(Method method, Throwable exception) {
113
144
  notice.setText("error deleting <%= class_name.underscore.humanize %>: "
114
145
  + exception.getMessage());
146
+ view.reset(place.action);
115
147
  }
116
148
 
117
149
  public void onSuccess(Method method, Void response) {
118
- goTo(new <%= class_name %>Place(RestfulActionEnum.INDEX));
150
+ notice.setText(null);
151
+ view.removeFromList(model);
152
+ <%= class_name %>Place next = new <%= class_name %>Place(RestfulActionEnum.INDEX);
153
+ if(placeController.getWhere().equals(next)){
154
+ view.reset(place.action);
155
+ }
156
+ else{
157
+ goTo(next);
158
+ }
119
159
  }
120
160
  });
121
161
  notice.setText("deleting <%= class_name.underscore.humanize %> . . .");
122
162
  }
123
163
  <% end -%>
164
+
124
165
  public void save() {
125
166
  <%= class_name %> model = view.retrieve<%= class_name %>();
126
167
  view.setEnabled(false);
127
168
  service.update(model, new MethodCallback<<%= class_name %>>() {
128
169
 
129
170
  public void onFailure(Method method, Throwable exception) {
130
- notice.setText("error loading <%= class_name.underscore.humanize %>: "
171
+ notice.setText("error saving <%= class_name.underscore.humanize %>: "
131
172
  + exception.getMessage());
173
+ view.reset(place.action);
132
174
  }
133
175
 
134
176
  public void onSuccess(Method method, <%= class_name %> response) {
135
- goTo(new <%= class_name %>Place(<% unless options[:singleton] -%>response.id,
136
- <% end -%>RestfulActionEnum.EDIT));
177
+ notice.setText(null);
178
+ <% unless options[:singleton] -%>
179
+ view.updateInList(response);
180
+ <% end -%>
181
+ view.reset(response);
182
+ view.reset(place.action);
137
183
  }
138
184
  });
139
185
  notice.setText("saving <%= class_name.underscore.humanize %> . . .");
@@ -14,12 +14,12 @@ public class <%= class_name %> {
14
14
  public int id;
15
15
  <% end -%>
16
16
  <% for attribute in attributes -%>
17
- <% name = attribute.name.classify.sub(/^(.)/) {$1.downcase} -%>
17
+ <% name = attribute.name.camelcase.sub(/^(.)/) {$1.downcase} -%>
18
18
 
19
19
  <% if name != name.underscore -%> @Json(name = "<%= name.underscore %>")
20
20
  <% end -%>
21
21
  <% if attribute.type == :has_one -%>
22
- public <%= attribute.name.classify %> <%= name %>;
22
+ public <%= attribute.name.camelcase %> <%= name %>;
23
23
  <% elsif attribute.type == :has_many -%>
24
24
  public java.util.List<<%= attribute.name.classify %>> <%= name %>;
25
25
  <% else -%>
@@ -1,13 +1,14 @@
1
1
  package <%= places_package %>;
2
2
 
3
- import <%= gwt_rails_package %>.RestfulAction;
3
+ import <%= gwt_rails_package %>.places.RestfulAction;
4
4
 
5
5
  import <%= managed_package %>.ActivityFactory;
6
+ import <%= models_package %>.<%= class_name %>;
6
7
  import <%= base_package %>.ActivityPlace;
7
8
 
8
9
  import com.google.gwt.activity.shared.Activity;
9
10
 
10
- public class <%= class_name %>Place extends ActivityPlace {
11
+ public class <%= class_name %>Place extends ActivityPlace<<%= class_name %>> {
11
12
 
12
13
  public Activity create(ActivityFactory factory){
13
14
  return factory.create(this);
@@ -17,6 +18,10 @@ public class <%= class_name %>Place extends ActivityPlace {
17
18
  super(restfulAction, "<%= table_name %>");
18
19
  }
19
20
 
21
+ public <%= class_name %>Place(<%= class_name %> model, RestfulAction restfulAction) {
22
+ super(model, restfulAction, "<%= table_name %>");
23
+ }
24
+
20
25
  public <%= class_name %>Place(int id, RestfulAction restfulAction) {
21
26
  super(id, restfulAction, "<%= table_name %>");
22
27
  }
@@ -1,17 +1,12 @@
1
1
  package <%= places_package %>;
2
2
 
3
- import com.google.gwt.place.shared.PlaceTokenizer;
4
- import com.google.gwt.place.shared.Prefix;
3
+ import <%= gwt_rails_package %>.places.RestfulPlaceTokenizer;
5
4
 
6
- import <%= gwt_rails_package %>.RestfulPlaceTokenizer;
7
-
8
- @Prefix("<% if options[:singleton] -%><%= singular_table_name %><% else -%><%= table_name %><% end -%>")
9
- public class <%= class_name %>PlaceTokenizer extends RestfulPlaceTokenizer<<%= class_name %>Place>
10
- implements PlaceTokenizer<<%= class_name %>Place> {
5
+ public class <%= class_name %>PlaceTokenizer extends RestfulPlaceTokenizer<<%= class_name %>Place> {
11
6
 
12
7
  public <%= class_name %>Place getPlace(String token) {
13
8
  <% if options[:singleton] -%>
14
- return new <%= class_name %>Place(toSingletonToken(token).action);
9
+ return new <%= class_name %>Place(toSingletonToken(token).action);
15
10
  <% else -%>
16
11
  Token t = toToken(token);
17
12
  if(t.identifier == null){
@@ -1,10 +1,12 @@
1
1
  package <%= restservices_package %>;
2
2
 
3
- import <%= gwt_rails_package %>.RestfulDispatcherSingleton;
3
+ import <%= gwt_rails_package %>.dispatchers.RestfulDispatcherSingleton;
4
+ <% unless options[:singleton] -%>
4
5
  <% if action_map.values.member? :get_all -%>
5
- import <%= gwt_rails_package %>.DefaultDispatcherSingleton;
6
+ import <%= gwt_rails_package %>.dispatchers.DefaultDispatcherSingleton;
6
7
  import java.util.List;
7
8
  <% end -%>
9
+ <% end -%>
8
10
 
9
11
  import javax.ws.rs.*;
10
12
 
@@ -1,14 +1,16 @@
1
1
  package <%= views_package %>;
2
2
 
3
+ <% unless options[:singleton] -%>
3
4
  import java.util.List;
4
5
 
6
+ <% end -%>
5
7
  import <%= models_package %>.<%= class_name %>;
6
8
 
7
9
  import com.google.gwt.place.shared.Place;
8
10
  import com.google.gwt.user.client.ui.IsWidget;
9
11
  import com.google.inject.ImplementedBy;
10
12
 
11
- import <%= gwt_rails_package %>.RestfulAction;
13
+ import <%= gwt_rails_package %>.places.RestfulAction;
12
14
 
13
15
  @ImplementedBy(<%= class_name %>ViewImpl.class)
14
16
  public interface <%= class_name %>View extends IsWidget {
@@ -19,17 +21,29 @@ public interface <%= class_name %>View extends IsWidget {
19
21
  <% end -%>
20
22
  void save();
21
23
  <% unless options[:singleton] -%>
22
- void delete();
24
+ void delete(<%= class_name %> model);
23
25
  <% end -%>
24
26
  void goTo(Place place);
25
27
  }
26
28
  void setPresenter(Presenter presenter);
27
29
 
28
30
  void reset(<%= class_name %> model);
31
+ <% unless options[:singleton] -%>
32
+
33
+ void reset(List<<%= class_name %>> models);
34
+ <% end -%>
29
35
 
30
36
  void reset(RestfulAction action);
31
37
 
32
38
  void setEnabled(boolean enabled);
33
39
 
34
40
  <%= class_name %> retrieve<%= class_name %>();
41
+ <% unless options[:singleton] -%>
42
+
43
+ void updateInList(<%= class_name %> model);
44
+
45
+ void removeFromList(<%= class_name %> model);
46
+
47
+ void addToList(<%= class_name %> model);
48
+ <% end -%>
35
49
  }
@@ -5,43 +5,55 @@
5
5
 
6
6
  <ui:style>
7
7
  .buttons {}
8
- .signatur { float: left; }
9
- .signatur * { display: inline; margin-right: 1em; font-size: 0.8em;}
8
+ .signature { float: left; }
9
+ .signature * { display: inline; margin-right: 1em; font-size: 0.8em;}
10
10
  .fields { clear: both;}
11
11
  .field { }
12
12
  </ui:style>
13
13
 
14
- <g:FlowPanel>
14
+ <g:FlowPanel styleName="display">
15
15
  <g:FlowPanel styleName="{style.buttons}">
16
16
  <% unless options[:singleton] -%>
17
17
  <g:Button ui:field="newButton">New</g:Button>
18
- <g:Button ui:field="createButton">Create</g:Button>
19
18
  <% end -%>
20
19
  <g:Button ui:field="editButton">Edit</g:Button>
21
- <g:Button ui:field="saveButton">Save</g:Button>
22
- <% unless options[:singleton] -%>
23
- <g:Button ui:field="deleteButton">Delete</g:Button>
24
- <% end -%>
25
20
  </g:FlowPanel>
26
- <g:FlowPanel styleName="{style.signatur}">
21
+ <g:FlowPanel ui:field="form" styleName="form">
22
+ <g:FlowPanel styleName="{style.signature}" ui:field="signature">
27
23
  <% unless options[:singleton] -%>
28
- <g:Label ui:field="id" />
24
+ <g:Label>id: </g:Label>
25
+ <g:NumberLabel ui:field="id" />
29
26
  <% end -%>
30
27
  <% if options[:timestamps] %>
31
- <g:Label ui:field="createdAt" />
32
- <g:Label ui:field="updatedAt" />
28
+ <g:Label>created at: </g:Label>
29
+ <g:DateLabel ui:field="createdAt" predefinedFormat="DATE_TIME_MEDIUM"/>
30
+ <g:Label>updated at: </g:Label>
31
+ <g:DateLabel ui:field="updatedAt" predefinedFormat="DATE_TIME_MEDIUM" />
33
32
  <% end -%>
34
- </g:FlowPanel>
35
- <g:FlowPanel styleName="{style.fields}">
33
+ </g:FlowPanel>
34
+ <g:FlowPanel styleName="{style.fields}">
36
35
  <% for attribute in attributes -%>
37
36
  <% if attribute.type != :has_one && attribute.type != :has_many -%>
38
- <% name = attribute.name.classify.sub(/^(.)/){ $1.downcase } -%>
39
- <g:FlowPanel styleName="{style.field}">
40
- <g:HTML><label name="<%= name %>"><%= name.underscore.humanize %></label></g:HTML>
41
- <g:TextBox ui:field="<%= name %>" name="<%= name %>"/>
42
- </g:FlowPanel>
37
+ <% name = attribute.name.camelcase.sub(/^(.)/){ $1.downcase } -%>
38
+ <g:FlowPanel styleName="{style.field}">
39
+ <g:HTML><label name="<%= name %>"><%= name.underscore.humanize %></label></g:HTML>
40
+ <g:TextBox ui:field="<%= name %>" name="<%= name %>"/>
41
+ </g:FlowPanel>
43
42
  <% end -%>
44
43
  <% end -%>
44
+ </g:FlowPanel>
45
+ <g:FlowPanel styleName="{style.buttons}">
46
+ <% unless options[:singleton] -%>
47
+ <g:Button ui:field="createButton">Create</g:Button>
48
+ <% end -%>
49
+ <g:Button ui:field="saveButton">Save</g:Button>
50
+ <% unless options[:singleton] -%>
51
+ <g:Button ui:field="deleteButton">Delete</g:Button>
52
+ <% end -%>
53
+ </g:FlowPanel>
45
54
  </g:FlowPanel>
55
+ <% unless options[:singleton] -%>
56
+ <g:FlexTable ui:field="list" styleName="list"/>
57
+ <% end -%>
46
58
  </g:FlowPanel>
47
59
  </ui:UiBinder>
@@ -1,20 +1,27 @@
1
1
  package <%= views_package %>;
2
2
 
3
- <% if options[:timestamps] %>
4
- import java.util.Date;
3
+ <% unless options[:singleton] -%>
4
+ import java.util.List;
5
+
5
6
  <% end -%>
6
7
  <% if options[:timestamps] -%>
7
- import <%= gwt_rails_package %>.<% unless options[:singleton] -%>Identifyable<% end -%>TimestampedView;<% else -%><% unless options[:singleton] -%>
8
- import <%= gwt_rails_package %>.IdentifyableView;<% end -%><% end -%>
8
+ import <%= gwt_rails_package %>.views.<% unless options[:singleton] -%>Identifyable<% end -%>TimestampedView;<% else -%><% unless options[:singleton] -%>
9
+ import <%= gwt_rails_package %>.views.IdentifyableView;<% end -%><% end -%>
9
10
 
10
- import <%= gwt_rails_package %>.RestfulAction;
11
- import <%= gwt_rails_package %>.RestfulActionEnum;
11
+ <% unless options[:singleton] -%>
12
+ import <%= gwt_rails_package %>.views.ModelButton;
13
+ <% end -%>
14
+ import <%= gwt_rails_package %>.places.RestfulAction;
15
+ import <%= gwt_rails_package %>.places.RestfulActionEnum;
12
16
 
13
17
  import <%= models_package %>.<%= class_name %>;
14
18
  import <%= places_package %>.<%= class_name %>Place;
15
19
 
16
20
  import com.google.gwt.core.client.GWT;
17
21
  import com.google.gwt.event.dom.client.ClickEvent;
22
+ <% unless options[:singleton] -%>
23
+ import com.google.gwt.event.dom.client.ClickHandler;
24
+ <% end -%>
18
25
  import com.google.gwt.uibinder.client.UiBinder;
19
26
  import com.google.gwt.uibinder.client.UiField;
20
27
  import com.google.gwt.uibinder.client.UiHandler;
@@ -52,14 +59,21 @@ public class <%= class_name %>ViewImpl extends <% if options[:timestamps] -%><%
52
59
  <% end -%>
53
60
  <% for attribute in attributes -%>
54
61
  <% if attribute.type == :has_one -%>
55
- // TODO <%= attribute.name.classify %> <%= attribute.name %>;
62
+ // TODO <%= attribute.name.camelcase %> <%= attribute.name %>;
56
63
  <% elsif attribute.type == :has_many -%>
57
- // TODO public java.util.List<<%= attribute.name.classify %>> <%= attribute.name %>;
64
+ // TODO public java.util.List<<%= attribute.name.camelcase %>> <%= attribute.name %>;
58
65
  <% else -%>
59
66
  @UiField
60
- TextBox <%= attribute.name.classify.sub(/^(.)/){ $1.downcase } %>;
67
+ TextBox <%= attribute.name.camelcase.sub(/^(.)/){ $1.downcase } %>;
61
68
  <% end -%>
62
69
 
70
+ <% end -%>
71
+ <% unless options[:singleton] -%>
72
+ @UiField
73
+ Panel form;
74
+
75
+ @UiField
76
+ FlexTable list;
63
77
  <% end -%>
64
78
 
65
79
  private Presenter presenter;
@@ -78,21 +92,24 @@ public class <%= class_name %>ViewImpl extends <% if options[:timestamps] -%><%
78
92
  void onClickCreate(ClickEvent e) {
79
93
  presenter.create();
80
94
  }
95
+
81
96
  <% end -%>
82
97
  @UiHandler("editButton")
83
98
  void onClickEdit(ClickEvent e) {
84
- presenter.goTo(new <%= class_name %>Place(<% unless options[:singleton] -%>idCache, <% end -%>RestfulActionEnum.EDIT));
99
+ presenter.goTo(new <%= class_name %>Place(<% unless options[:singleton] -%>id.getValue(), <% end -%>RestfulActionEnum.EDIT));
85
100
  }
86
101
 
87
102
  @UiHandler("saveButton")
88
103
  void onClickSave(ClickEvent e) {
89
104
  presenter.save();
90
105
  }
106
+
91
107
  <% unless options[:singleton] -%>
92
108
  @UiHandler("deleteButton")
93
109
  void onClickDelete(ClickEvent e) {
94
- presenter.delete();
110
+ presenter.delete(retrieve<%= class_name %>());
95
111
  }
112
+
96
113
  <% end -%>
97
114
  <% end -%>
98
115
  public void setPresenter(Presenter presenter) {
@@ -111,43 +128,54 @@ public class <%= class_name %>ViewImpl extends <% if options[:timestamps] -%><%
111
128
  <% end -%>
112
129
  <% for attribute in attributes -%>
113
130
  <% if attribute.type != :has_one && attribute.type != :has_many -%>
114
- <% name = attribute.name.classify.sub(/^(.)/){ $1.downcase } -%>
131
+ <% name = attribute.name.camelcase.sub(/^(.)/){ $1.downcase } -%>
115
132
  <%= name %>.setText(model.<%= name %><% if type_conversion_map[attribute.type] -%> + ""<% end -%>);
116
133
  <% end -%>
117
134
  <% end -%>
118
135
  }
119
136
 
120
137
  public void reset(RestfulAction action) {
121
- GWT.log(action.name() + " <%= class_name %>"<% unless options[:singleton] -%> + (idCache > 0 ? "(" + idCache + ")" : "")<% end -%>);
122
- <% if options[:readonly] -%>
123
- setEnabled(false);
138
+ <% if options[:singleton] -%>
139
+ editButton.setVisible(action.name().equals(RestfulActionEnum.SHOW.name()) ||
140
+ action.name().equals(RestfulActionEnum.INDEX.name()));
141
+ saveButton.setVisible(action.name().equals(RestfulActionEnum.EDIT.name()));
142
+ setEnabled(!action.viewOnly());
124
143
  <% else -%>
125
- <% unless options[:singleton] -%>
126
144
  newButton.setVisible(!action.name().equals(RestfulActionEnum.NEW.name()));
127
- createButton.setVisible(action.name().equals(RestfulActionEnum.NEW.name()));
128
- <% end -%>
129
- editButton.setVisible(action.name().equals(RestfulActionEnum.SHOW.name()));
130
- saveButton.setVisible(action.name().equals(RestfulActionEnum.EDIT.name()));
131
- <% unless options[:singleton] -%>
132
- deleteButton.setVisible(!action.name().equals(RestfulActionEnum.NEW.name()));
145
+ if(action.name().equals(RestfulActionEnum.INDEX.name())){
146
+ editButton.setVisible(false);
147
+ list.setVisible(true);
148
+ form.setVisible(false);
149
+ }
150
+ else {
151
+ <% if options[:readonly] -%>
152
+ setEnabled(false);
153
+ <% else -%>
154
+ createButton.setVisible(action.name().equals(RestfulActionEnum.NEW.name()));
155
+ editButton.setVisible(action.name().equals(RestfulActionEnum.SHOW.name()));
156
+ saveButton.setVisible(action.name().equals(RestfulActionEnum.EDIT.name()));
157
+ deleteButton.setVisible(action.name().equals(RestfulActionEnum.EDIT.name()));
133
158
  <% end -%>
134
- setEnabled(!action.viewOnly());
159
+ setEnabled(!action.viewOnly());
160
+ list.setVisible(false);
161
+ form.setVisible(true);
162
+ }
135
163
  <% end -%>
136
164
  }
137
165
 
138
166
  public <%= class_name %> retrieve<%= class_name %>() {
139
167
  <%= class_name %> model = new <%= class_name %>();
140
168
  <% unless options[:singleton] -%>
141
- model.id = idCache;
169
+ model.id = id.getValue() == null ? 0 : id.getValue();
142
170
  <% end -%>
143
171
  <% if options[:timestamps] %>
144
- model.createdAt = createdAtCache;
145
- model.updatedAt = updatedAtCache;
172
+ model.createdAt = createdAt.getValue();
173
+ model.updatedAt = updatedAt.getValue();
146
174
  <% end -%>
147
175
 
148
176
  <% for attribute in attributes -%>
149
177
  <% if attribute.type != :has_one && attribute.type != :has_many -%>
150
- <% name = attribute.name.classify.sub(/^(.)/){ $1.downcase } -%>
178
+ <% name = attribute.name.camelcase.sub(/^(.)/){ $1.downcase } -%>
151
179
  model.<%= name %> = <% if (conv = type_conversion_map[attribute.type]).nil? -%><%= name %>.getText()<% else -%><%= conv %>(<%= name %>.getText())<% end -%>;
152
180
  <% end -%>
153
181
 
@@ -158,9 +186,84 @@ public class <%= class_name %>ViewImpl extends <% if options[:timestamps] -%><%
158
186
  public void setEnabled(boolean enabled) {
159
187
  <% for attribute in attributes -%>
160
188
  <% if attribute.type != :has_one && attribute.type != :has_many -%>
161
- <% name = attribute.name.classify.sub(/^(.)/){ $1.downcase } -%>
189
+ <% name = attribute.name.camelcase.sub(/^(.)/){ $1.downcase } -%>
162
190
  <%= name %>.setEnabled(enabled);
163
191
  <% end -%>
164
192
  <% end -%>
165
193
  }
194
+ <% unless options[:singleton] -%>
195
+
196
+ private final ClickHandler clickHandler = new ClickHandler() {
197
+
198
+ @SuppressWarnings("unchecked")
199
+ public void onClick(ClickEvent event) {
200
+ ModelButton<<%= class_name %>> button = (ModelButton<<%= class_name %>>)event.getSource();
201
+ switch(button.action){
202
+ case DESTROY:
203
+ presenter.delete(button.model);
204
+ break;
205
+ default:
206
+ presenter.goTo(new <%= class_name %>Place(button.model, button.action));
207
+ }
208
+ }
209
+ };
210
+
211
+ private Button newButton(RestfulActionEnum action, <%= class_name %> model){
212
+ ModelButton<<%= class_name %>> button = new ModelButton<<%= class_name %>>(action, model);
213
+ button.addClickHandler(clickHandler);
214
+ return button;
215
+ }
216
+
217
+ public void reset(List<<%= class_name %>> models) {
218
+ list.removeAllRows();
219
+ list.setText(0, 0, "Id");
220
+ <% attributes.each_with_index do |attribute, index| -%>
221
+ list.setText(0, <%= index + 1 %>, "<%= attribute.name.humanize -%>");
222
+ <% end -%>
223
+ list.getRowFormatter().addStyleName(0, "model-list-header");
224
+ int row = 1;
225
+ for(<%= class_name %> model: models){
226
+ setRow(row, model);
227
+ row++;
228
+ }
229
+ }
230
+
231
+ private void setRow(int row, <%= class_name %> model) {
232
+ list.setText(row, 0, model.id + "");
233
+ <% attributes.each_with_index do |attribute, index| -%>
234
+ <% if attribute.type != :has_one && attribute.type != :has_many -%>
235
+ <% name = attribute.name.camelcase.sub(/^(.)/){ $1.downcase } -%>
236
+ list.setText(row, <%= index + 1 %>, model.<%= name %> + "");
237
+ <% end -%>
238
+
239
+ <% end -%>
240
+ list.setWidget(row, <%= attributes.size + 1 %>, newButton(RestfulActionEnum.SHOW, model));
241
+ list.setWidget(row, <%= attributes.size + 2 %>, newButton(RestfulActionEnum.EDIT, model));
242
+ list.setWidget(row, <%= attributes.size + 3 %>, newButton(RestfulActionEnum.DESTROY, model));
243
+ }
244
+
245
+ public void updateInList(<%= class_name %> model) {
246
+ String id = model.id + "";
247
+ for(int i = 0; i < list.getRowCount(); i++){
248
+ if(list.getText(i, 0).equals(id)){
249
+ setRow(i, model);
250
+ return;
251
+ }
252
+ }
253
+ }
254
+
255
+ public void removeFromList(<%= class_name %> model) {
256
+ String id = model.id + "";
257
+ for(int i = 0; i < list.getRowCount(); i++){
258
+ if(list.getText(i, 0).equals(id)){
259
+ list.removeRow(i);
260
+ return;
261
+ }
262
+ }
263
+ }
264
+
265
+ public void addToList(<%= class_name %> model) {
266
+ setRow(list.getRowCount(), model);
267
+ }
268
+ <% end -%>
166
269
  }
@@ -1,4 +1,4 @@
1
1
  if defined?(Rails)
2
2
  require 'resty/resty_railtie'
3
- require 'ixtlan-core'
3
+ require 'ixtlan-generators'
4
4
  end