resty-generators 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/generators/resty/base.rb +4 -0
- data/lib/generators/resty/scaffold/scaffold_generator.rb +9 -3
- data/lib/generators/resty/setup/setup_generator.rb +3 -3
- data/lib/generators/resty/setup/templates/ActivityPlaceActivityMapper.java +7 -4
- data/lib/generators/resty/setup/templates/LoginPlace.java +3 -2
- data/lib/generators/resty/setup/templates/Mavenfile +1 -1
- data/lib/generators/resty/setup/templates/MenuPanel.java +1 -1
- data/lib/generators/resty/setup/templates/PlaceHistoryMapper.java +1 -1
- data/lib/generators/resty/setup/templates/SessionActivityPlaceActivityMapper.java +2 -2
- data/lib/generators/resty/templates/Activity.java +130 -62
- data/lib/generators/resty/templates/Cache.java +51 -0
- data/lib/generators/resty/templates/Cache.java~ +34 -0
- data/lib/generators/resty/templates/Editor.java +21 -3
- data/lib/generators/resty/templates/Editor.ui.xml +4 -0
- data/lib/generators/resty/templates/Place.java +8 -6
- data/lib/generators/resty/templates/RestService.java +15 -8
- data/lib/generators/resty/templates/View.java +14 -17
- data/lib/generators/resty/templates/View.ui.xml +5 -1
- data/lib/generators/resty/templates/ViewImpl.java +88 -59
- metadata +5 -3
@@ -62,6 +62,10 @@ module Resty
|
|
62
62
|
@restservices_package ||= base_package + ".restservices"
|
63
63
|
end
|
64
64
|
|
65
|
+
def caches_package
|
66
|
+
@caches_package ||= base_package + ".caches"
|
67
|
+
end
|
68
|
+
|
65
69
|
def action_map
|
66
70
|
@action_map ||= {'index' => :get_all, 'show' => :get_single, 'create' => :post, 'update' => :put, 'destroy' => :delete}
|
67
71
|
end
|
@@ -19,6 +19,12 @@ module Resty
|
|
19
19
|
template 'Model.java', File.join(java_root, models_package.gsub(/\./, "/"), class_path, "#{class_name}.java")
|
20
20
|
end
|
21
21
|
|
22
|
+
def create_cache_file
|
23
|
+
if !options[:singleton] && !options[:read_only]
|
24
|
+
template 'Cache.java', File.join(java_root, caches_package.gsub(/\./, "/"), class_path, "#{class_name.pluralize}Cache.java")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
22
28
|
def create_event_files
|
23
29
|
template 'Event.java', File.join(java_root, events_package.gsub(/\./, "/"), class_path, "#{class_name}Event.java")
|
24
30
|
template 'EventHandler.java', File.join(java_root, events_package.gsub(/\./, "/"), class_path, "#{class_name}EventHandler.java")
|
@@ -82,13 +88,13 @@ end
|
|
82
88
|
file = File.join(java_root, managed_package.gsub(/\./, "/"), class_path, "#{application_name}MenuPanel.java")
|
83
89
|
if File.exists?(file)
|
84
90
|
content = File.read(file)
|
85
|
-
if content =~ /#{class_name}Place\(
|
91
|
+
if content =~ /#{class_name}Place\(/
|
86
92
|
log 'keep', file
|
87
93
|
else
|
88
94
|
# TODO non session case !!!
|
89
95
|
t_name = options[:singleton] ? singular_table_name : table_name
|
90
|
-
content.sub! /super\(\s*sessionManager\s*\)\s*;/, "super(sessionManager);\n addButton(\"#{t_name.underscore.humanize}\"
|
91
|
-
content.sub! /super\(\s*\)\s*;/, "super();\n addButton(\"#{t_name.underscore.humanize}\"
|
96
|
+
content.sub! /super\(\s*sessionManager\s*,\s*placeController\s*\)\s*;/, "super(sessionManager, placeController);\n addButton(\"#{t_name.underscore.humanize}\", new #{places_package}.#{class_name}Place(#{options[:singleton] ? 'SHOW' : 'INDEX'}));"
|
97
|
+
content.sub! /super\(\s*placeController\s*\)\s*;/, "super(placeController);\n addButton(\"#{t_name.underscore.humanize}\", new #{places_package}.#{class_name}Place(#{options[:singleton] ? 'SHOW' : 'INDEX'}));"
|
92
98
|
File.open(file, 'w') { |f| f.print content }
|
93
99
|
log "added to", file
|
94
100
|
end
|
@@ -55,9 +55,9 @@ module Resty
|
|
55
55
|
|
56
56
|
def create_scaffolded_files
|
57
57
|
path = base_package.gsub(/\./, "/")
|
58
|
-
template 'ActivityPlace.java',
|
59
|
-
|
60
|
-
|
58
|
+
#template 'ActivityPlace.java',
|
59
|
+
# File.join(java_root, path,
|
60
|
+
# "ActivityPlace.java")
|
61
61
|
template 'ActivityPlaceActivityMapper.java',
|
62
62
|
File.join(java_root, path,
|
63
63
|
"ActivityPlaceActivityMapper.java")
|
@@ -4,10 +4,12 @@ import <%= managed_package %>.ActivityFactory;
|
|
4
4
|
|
5
5
|
import com.google.gwt.activity.shared.Activity;
|
6
6
|
import com.google.gwt.activity.shared.ActivityMapper;
|
7
|
+
import com.google.gwt.core.client.GWT;
|
7
8
|
import com.google.gwt.place.shared.Place;
|
8
9
|
import com.google.inject.Inject;
|
9
10
|
|
10
|
-
import
|
11
|
+
import <%= gwt_rails_package %>.Notice;
|
12
|
+
import <%= gwt_rails_package %>.places.RestfulPlace;
|
11
13
|
|
12
14
|
public class ActivityPlaceActivityMapper implements ActivityMapper {
|
13
15
|
protected final ActivityFactory factory;
|
@@ -19,10 +21,11 @@ public class ActivityPlaceActivityMapper implements ActivityMapper {
|
|
19
21
|
this.factory = factory;
|
20
22
|
}
|
21
23
|
|
22
|
-
|
24
|
+
@SuppressWarnings("unchecked")
|
23
25
|
public Activity getActivity(Place place) {
|
24
|
-
if (place instanceof
|
25
|
-
|
26
|
+
if (place instanceof RestfulPlace<?, ?>) {
|
27
|
+
GWT.log(place.toString());
|
28
|
+
return ((RestfulPlace<?, ActivityFactory>) place).create(factory);
|
26
29
|
}
|
27
30
|
notice.setText("nothing to see");
|
28
31
|
return null;
|
@@ -1,11 +1,12 @@
|
|
1
1
|
package <%= places_package %>;
|
2
2
|
|
3
|
-
import <%= base_package %>.ActivityPlace;
|
4
3
|
import <%= managed_package %>.ActivityFactory;
|
5
4
|
|
5
|
+
import <%= gwt_rails_package %>.places.RestfulPlace;
|
6
|
+
|
6
7
|
import com.google.gwt.activity.shared.Activity;
|
7
8
|
|
8
|
-
public class LoginPlace extends
|
9
|
+
public class LoginPlace extends RestfulPlace<Void, ActivityFactory> {
|
9
10
|
|
10
11
|
public static final LoginPlace LOGIN = new LoginPlace();
|
11
12
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#-*- mode: ruby -*-
|
2
2
|
GWT_VERSION = '2.4.0'
|
3
|
-
jar('de.mkristian.gwt:rails-gwt', '0.
|
3
|
+
jar('de.mkristian.gwt:rails-gwt', '0.7.0').scope :provided
|
4
4
|
jar('org.fusesource.restygwt:restygwt', '1.2').scope :provided
|
5
5
|
jar('javax.ws.rs:jsr311-api', '1.1').scope :provided
|
6
6
|
jar('com.google.gwt:gwt-user', GWT_VERSION).scope :provided
|
@@ -11,7 +11,7 @@ import com.google.gwt.event.dom.client.ClickEvent;
|
|
11
11
|
import com.google.gwt.event.dom.client.ClickHandler;
|
12
12
|
import com.google.gwt.place.shared.PlaceController;
|
13
13
|
|
14
|
-
import <%= gwt_rails_package %>.places.RestfulActionEnum
|
14
|
+
import static <%= gwt_rails_package %>.places.RestfulActionEnum.*;
|
15
15
|
<% if options[:session] -%>
|
16
16
|
import <%= gwt_rails_package %>.session.SessionManager;
|
17
17
|
<% end -%>
|
@@ -32,7 +32,7 @@ public class <%= application_name %>PlaceHistoryMapper extends RestfulPlaceHisto
|
|
32
32
|
|
33
33
|
@Override
|
34
34
|
public Place getPlace(String token) {
|
35
|
-
RestfulPlace
|
35
|
+
RestfulPlace<?, ?> place = (RestfulPlace<?, ?>) super.getPlace(token);
|
36
36
|
// place needs to be different on the level of equals in order to trigger an activity
|
37
37
|
place.hasSession = manager.hasSession();
|
38
38
|
return place;
|
@@ -36,7 +36,7 @@ public class SessionActivityPlaceActivityMapper extends ActivityPlaceActivityMap
|
|
36
36
|
protected Activity pessimisticGetActivity(Place place) {
|
37
37
|
if (!(place instanceof NoAuthorization)) {
|
38
38
|
if(manager.hasSession()){
|
39
|
-
if(!manager.isAllowed((RestfulPlace
|
39
|
+
if(!manager.isAllowed((RestfulPlace<?,?>)place)){
|
40
40
|
notice.setText("nothing to see");
|
41
41
|
return null;
|
42
42
|
}
|
@@ -57,7 +57,7 @@ public class SessionActivityPlaceActivityMapper extends ActivityPlaceActivityMap
|
|
57
57
|
protected Activity optimisticGetActivity(Place place) {
|
58
58
|
if (place instanceof NeedsAuthorization) {
|
59
59
|
if(manager.hasSession()){
|
60
|
-
if(!manager.isAllowed((RestfulPlace
|
60
|
+
if(!manager.isAllowed((RestfulPlace<?,?>)place)){
|
61
61
|
notice.setText("nothing to see");
|
62
62
|
return null;
|
63
63
|
}
|
@@ -5,6 +5,12 @@ import java.util.List;
|
|
5
5
|
<% end -%>
|
6
6
|
|
7
7
|
import <%= events_package %>.<%= class_name %>Event;
|
8
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
9
|
+
import <%= events_package %>.<%= class_name %>EventHandler;
|
10
|
+
<% end -%>
|
11
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
12
|
+
import <%= caches_package %>.<%= class_name.pluralize %>Cache;
|
13
|
+
<% end -%>
|
8
14
|
<% for attribute in attributes -%>
|
9
15
|
<% if attribute.type == :belongs_to -%>
|
10
16
|
import <%= models_package %>.<%= attribute.name.classify %>;
|
@@ -14,7 +20,9 @@ import <%= models_package %>.<%= class_name %>;
|
|
14
20
|
import <%= places_package %>.<%= class_name %>Place;
|
15
21
|
<% for attribute in attributes -%>
|
16
22
|
<% if attribute.type == :belongs_to -%>
|
17
|
-
import <%=
|
23
|
+
import <%= caches_package %>.<%= attribute.name.classify.to_s.pluralize %>Cache;
|
24
|
+
import <%= events_package %>.<%= attribute.name.classify %>Event;
|
25
|
+
import <%= events_package %>.<%= attribute.name.classify %>EventHandler;
|
18
26
|
<% end -%>
|
19
27
|
<% end -%>
|
20
28
|
import <%= restservices_package %>.<%= class_name.pluralize %>RestService;
|
@@ -32,6 +40,9 @@ import com.google.inject.Inject;
|
|
32
40
|
import com.google.inject.assistedinject.Assisted;
|
33
41
|
|
34
42
|
import <%= gwt_rails_package %>.Notice;
|
43
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
44
|
+
import <%= gwt_rails_package %>.events.ModelEvent;
|
45
|
+
<% end -%>
|
35
46
|
import <%= gwt_rails_package %>.events.ModelEvent.Action;
|
36
47
|
<% unless options[:singleton] -%>
|
37
48
|
import <%= gwt_rails_package %>.places.RestfulActionEnum;
|
@@ -39,25 +50,46 @@ import <%= gwt_rails_package %>.places.RestfulActionEnum;
|
|
39
50
|
|
40
51
|
public class <%= class_name %>Activity extends AbstractActivity implements <%= class_name %>View.Presenter{
|
41
52
|
|
53
|
+
<% if !options[:singleton] -%>
|
42
54
|
private final <%= class_name %>Place place;
|
55
|
+
<% end -%>
|
43
56
|
private final <%= class_name.pluralize %>RestService service;
|
44
57
|
private final Notice notice;
|
45
58
|
private final PlaceController placeController;
|
46
59
|
private final <%= class_name %>View view;
|
60
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
61
|
+
private final <%= class_name.pluralize %>Cache cache;
|
62
|
+
<% end -%>
|
63
|
+
<% attributes.select { |a| a.type == :belongs_to }.each do |attribute| -%>
|
64
|
+
private final <%= attribute.name.classify.to_s.pluralize %>Cache <%= attribute.name.pluralize %>Cache;
|
65
|
+
<% end -%>
|
47
66
|
private EventBus eventBus;
|
48
67
|
|
49
68
|
@Inject
|
50
69
|
public <%= class_name %>Activity(@Assisted <%= class_name %>Place place, final Notice notice, final <%= class_name %>View view,
|
51
|
-
<%= class_name.pluralize %>RestService service, PlaceController placeController<%
|
70
|
+
<%= class_name.pluralize %>RestService service, PlaceController placeController<% if !options[:singleton] && !options[:read_only] -%>,
|
71
|
+
<%= class_name.pluralize %>Cache cache<% for attribute in attributes -%>
|
72
|
+
<% end -%>
|
52
73
|
<% if attribute.type == :belongs_to -%>
|
53
|
-
, <%= attribute.name.classify.to_s.pluralize %>
|
74
|
+
, <%= attribute.name.classify.to_s.pluralize %>Cache <%= attribute.name.pluralize %>Cache<% end -%><% end -%>) {
|
75
|
+
<% if !options[:singleton] -%>
|
54
76
|
this.place = place;
|
77
|
+
<% end -%>
|
55
78
|
this.notice = notice;
|
56
79
|
this.view = view;
|
57
80
|
this.service = service;
|
58
81
|
this.placeController = placeController;
|
82
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
83
|
+
this.cache = cache;
|
84
|
+
<% end -%>
|
85
|
+
<% attributes.select { |a| a.type == :belongs_to }.each do |attribute| -%>
|
86
|
+
this.<%= attribute.name.pluralize %>Cache = <%= attribute.name.pluralize %>Cache;
|
87
|
+
<% end -%>
|
88
|
+
|
89
|
+
notice.hide();
|
90
|
+
view.setup(this, place.action);
|
59
91
|
<% for attribute in attributes -%>
|
60
|
-
<% if attribute.type == :
|
92
|
+
<% if attribute.type == :belongsss_to -%>
|
61
93
|
|
62
94
|
view.reset<%= attribute.name.classify.to_s.pluralize %>(null);
|
63
95
|
<%= attribute.name %>RestService.index(new MethodCallback<List<<%= attribute.name.classify %>>>() {
|
@@ -67,7 +99,7 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
|
|
67
99
|
}
|
68
100
|
|
69
101
|
public void onFailure(Method method, Throwable exception) {
|
70
|
-
notice.
|
102
|
+
notice.error("failed to load <%= attribute.name.pluralize %>");
|
71
103
|
}
|
72
104
|
});
|
73
105
|
<% end -%>
|
@@ -76,27 +108,57 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
|
|
76
108
|
|
77
109
|
public void start(AcceptsOneWidget display, EventBus eventBus) {
|
78
110
|
this.eventBus = eventBus;
|
111
|
+
<% attributes.select { |a| a.type == :belongs_to }.each do |attribute| -%>
|
112
|
+
|
113
|
+
this.eventBus.addHandler(<%= attribute.name.classify %>Event.TYPE, new <%= attribute.name.classify %>EventHandler() {
|
114
|
+
|
115
|
+
public void onModelEvent(ModelEvent<<%= attribute.name.classify %>> event) {
|
116
|
+
if(event.getModels() != null) {
|
117
|
+
view.reset<%= attribute.name.classify.to_s.pluralize %>(event.getModels());
|
118
|
+
}
|
119
|
+
}
|
120
|
+
});
|
121
|
+
view.reset<%= attribute.name.classify.to_s.pluralize %>(<%= attribute.name.pluralize %>Cache.getOrLoadModels());
|
122
|
+
<% end -%>
|
123
|
+
<% if !options[:singleton] && !options[:read_only]-%>
|
124
|
+
|
125
|
+
this.eventBus.addHandler(<%= class_name %>Event.TYPE, new <%= class_name %>EventHandler() {
|
126
|
+
|
127
|
+
public void onModelEvent(ModelEvent<<%= class_name %>> event) {
|
128
|
+
notice.finishLoading();
|
129
|
+
if (event.getModels() != null) {
|
130
|
+
view.reset(event.getModels());
|
131
|
+
} else if (event.getModel() == null) {
|
132
|
+
// TODO maybe error message ?
|
133
|
+
notice.error("error loading list of <%= class_name.underscore.humanize %>");
|
134
|
+
}
|
135
|
+
}
|
136
|
+
});
|
137
|
+
<% end -%>
|
138
|
+
|
79
139
|
display.setWidget(view.asWidget());
|
80
|
-
|
140
|
+
|
81
141
|
<% if options[:singleton] -%>
|
82
142
|
load();
|
83
143
|
<% else -%>
|
84
|
-
switch(RestfulActionEnum.valueOf(place.action
|
85
|
-
|
144
|
+
switch(RestfulActionEnum.valueOf(place.action)){
|
145
|
+
<% unless options[:read_only] -%>
|
146
|
+
case EDIT:
|
147
|
+
<% end -%>
|
86
148
|
case SHOW:
|
87
|
-
load(place.
|
149
|
+
load(place.id);
|
88
150
|
break;
|
151
|
+
<% unless options[:read_only] -%>
|
89
152
|
case NEW:
|
90
|
-
notice.setText(null);
|
91
153
|
view.edit(new <%= class_name %>());
|
92
154
|
break;
|
155
|
+
<% end -%>
|
93
156
|
case INDEX:
|
94
157
|
default:
|
95
158
|
load();
|
96
159
|
break;
|
97
160
|
}
|
98
161
|
<% end -%>
|
99
|
-
view.reset(place.action);
|
100
162
|
}
|
101
163
|
|
102
164
|
public void goTo(Place place) {
|
@@ -104,123 +166,129 @@ public class <%= class_name %>Activity extends AbstractActivity implements <%= c
|
|
104
166
|
}
|
105
167
|
<% unless options[:singleton] -%>
|
106
168
|
|
107
|
-
public void load(){
|
108
|
-
|
169
|
+
public void load(){
|
170
|
+
<% if options[:read_only] -%>
|
109
171
|
service.index(new MethodCallback<List<<%= class_name %>>>() {
|
110
172
|
|
111
173
|
public void onFailure(Method method, Throwable exception) {
|
112
|
-
notice.
|
113
|
-
|
114
|
-
view.reset(place.action);
|
174
|
+
notice.finishLoading();
|
175
|
+
notice.error("error loading list of <%= class_name.underscore.humanize %>", exception);
|
115
176
|
}
|
116
177
|
|
117
178
|
public void onSuccess(Method method, List<<%= class_name %>> response) {
|
179
|
+
notice.finishLoading();
|
118
180
|
eventBus.fireEvent(new <%= class_name %>Event(response, Action.LOAD));
|
119
|
-
notice.setText(null);
|
120
181
|
view.reset(response);
|
121
|
-
view.reset(place.action);
|
122
182
|
}
|
123
183
|
});
|
124
|
-
|
125
|
-
|
184
|
+
notice.loading();
|
185
|
+
<% else -%>
|
186
|
+
List<<%= class_name %>> models = cache.getOrLoadModels();
|
187
|
+
if (models != null){
|
188
|
+
view.reset(models);
|
126
189
|
}
|
190
|
+
else {
|
191
|
+
// loading the event callback fills the resets the models
|
192
|
+
notice.loading();
|
193
|
+
}
|
194
|
+
<% end -%>
|
127
195
|
}
|
128
196
|
<% end -%>
|
129
|
-
<%
|
197
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
130
198
|
|
131
199
|
public void create() {
|
132
200
|
<%= class_name %> model = view.flush();
|
133
|
-
view.setEnabled(false);
|
134
201
|
service.create(model<% if attributes.detect{|a| a.type == :belongs_to} -%>.minimalClone()<% end -%>, new MethodCallback<<%= class_name %>>() {
|
135
202
|
|
136
203
|
public void onFailure(Method method, Throwable exception) {
|
137
|
-
notice.
|
138
|
-
|
139
|
-
view.reset(place.action);
|
204
|
+
notice.finishLoading();
|
205
|
+
notice.error("error creating <%= class_name.underscore.humanize %>", exception);
|
140
206
|
}
|
141
207
|
|
142
208
|
public void onSuccess(Method method, <%= class_name %> response) {
|
209
|
+
notice.finishLoading();
|
143
210
|
eventBus.fireEvent(new <%= class_name %>Event(response, Action.CREATE));
|
144
|
-
notice.setText(null);
|
145
|
-
view.addToList(response);
|
146
211
|
goTo(new <%= class_name %>Place(response.getId(), RestfulActionEnum.EDIT));
|
147
212
|
}
|
148
213
|
});
|
149
|
-
notice.
|
214
|
+
notice.loading();
|
150
215
|
}
|
151
216
|
<% end -%>
|
152
217
|
|
153
218
|
public void load(<% unless options[:singleton] -%>int id<% end -%>) {
|
154
|
-
|
155
|
-
|
219
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
220
|
+
<%= class_name %> model = cache.getModel(id);
|
221
|
+
view.edit(model);
|
222
|
+
<% elsif options[:read_only] -%>
|
223
|
+
view.edit(new <%= class_name %>()); // clear the form
|
224
|
+
<% end -%>
|
225
|
+
<% if !options[:singleton] && !options[:read_only] && (options[:timestamps] || options[:modified_by]) -%>
|
226
|
+
if (model == null || model.get<% if options[:timestamps] -%>CreatedAt()<% else -%>ModifiedBy()<% end -%> == null) {
|
227
|
+
<% indent = ' ' -%>
|
228
|
+
<% else -%>
|
229
|
+
<% indent = '' -%>
|
230
|
+
<% end -%>
|
231
|
+
<%= indent %> service.show(<% unless options[:singleton] -%>id, <% end -%>new MethodCallback<<%= class_name %>>() {
|
156
232
|
|
157
|
-
public void onFailure(Method method, Throwable exception) {
|
158
|
-
notice.
|
159
|
-
|
160
|
-
|
161
|
-
}
|
233
|
+
<%= indent %> public void onFailure(Method method, Throwable exception) {
|
234
|
+
<%= indent %> notice.finishLoading();
|
235
|
+
<%= indent %> notice.error("error loading <%= class_name.underscore.humanize %>", exception);
|
236
|
+
<%= indent %> }
|
162
237
|
|
163
|
-
public void onSuccess(Method method, <%= class_name %> response) {
|
164
|
-
|
165
|
-
|
166
|
-
view.edit(response);
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
notice.setText("loading <%= class_name.underscore.humanize %> . . .");
|
238
|
+
<%= indent %> public void onSuccess(Method method, <%= class_name %> response) {
|
239
|
+
<%= indent %> notice.finishLoading();
|
240
|
+
<%= indent %> eventBus.fireEvent(new <%= class_name %>Event(response, Action.LOAD));
|
241
|
+
<%= indent %> view.edit(response);
|
242
|
+
<%= indent %> }
|
243
|
+
<%= indent %> });
|
244
|
+
<%= indent %> notice.loading();
|
245
|
+
<% if !options[:singleton] && !options[:read_only] && (options[:timestamps] || options[:modified_by]) -%>
|
172
246
|
}
|
247
|
+
<% end -%>
|
173
248
|
}
|
249
|
+
<% unless options[:read_only] -%>
|
174
250
|
|
175
251
|
public void save() {
|
176
252
|
<%= class_name %> model = view.flush();
|
177
|
-
view.setEnabled(false);
|
178
253
|
service.update(model<% if attributes.detect{|a| a.type == :belongs_to} -%>.minimalClone()<% end -%>, new MethodCallback<<%= class_name %>>() {
|
179
254
|
|
180
255
|
public void onFailure(Method method, Throwable exception) {
|
181
|
-
notice.
|
182
|
-
|
183
|
-
view.reset(place.action);
|
256
|
+
notice.finishLoading();
|
257
|
+
notice.error("error saving <%= class_name.underscore.humanize %>", exception);
|
184
258
|
}
|
185
259
|
|
186
260
|
public void onSuccess(Method method, <%= class_name %> response) {
|
261
|
+
notice.finishLoading();
|
187
262
|
eventBus.fireEvent(new <%= class_name %>Event(response, Action.UPDATE));
|
188
|
-
notice.setText(null);
|
189
|
-
<% unless options[:singleton] -%>
|
190
|
-
view.updateInList(response);
|
191
|
-
<% end -%>
|
192
263
|
view.edit(response);
|
193
|
-
view.reset(place.action);
|
194
264
|
}
|
195
265
|
});
|
196
|
-
notice.
|
266
|
+
notice.loading();
|
197
267
|
}
|
198
268
|
<% unless options[:singleton] -%>
|
199
269
|
|
200
270
|
public void delete(final <%= class_name %> model){
|
201
|
-
view.setEnabled(false);
|
202
271
|
service.destroy(model, new MethodCallback<Void>() {
|
203
272
|
|
204
273
|
public void onFailure(Method method, Throwable exception) {
|
205
|
-
notice.
|
206
|
-
|
207
|
-
view.reset(place.action);
|
274
|
+
notice.finishLoading();
|
275
|
+
notice.error("error deleting <%= class_name.underscore.humanize %>", exception);
|
208
276
|
}
|
209
277
|
|
210
278
|
public void onSuccess(Method method, Void response) {
|
279
|
+
notice.finishLoading();
|
211
280
|
eventBus.fireEvent(new <%= class_name %>Event(model, Action.DESTROY));
|
212
|
-
notice.setText(null);
|
213
|
-
view.removeFromList(model);
|
214
281
|
<%= class_name %>Place next = new <%= class_name %>Place(RestfulActionEnum.INDEX);
|
215
282
|
if(placeController.getWhere().equals(next)){
|
216
|
-
view.
|
283
|
+
view.removeFromList(model);
|
217
284
|
}
|
218
285
|
else{
|
219
286
|
goTo(next);
|
220
287
|
}
|
221
288
|
}
|
222
289
|
});
|
223
|
-
notice.
|
290
|
+
notice.loading();
|
224
291
|
}
|
225
292
|
<% end -%>
|
293
|
+
<% end -%>
|
226
294
|
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
package <%= caches_package %>;
|
2
|
+
|
3
|
+
import java.util.List;
|
4
|
+
|
5
|
+
import javax.inject.Inject;
|
6
|
+
import javax.inject.Singleton;
|
7
|
+
|
8
|
+
import <%= events_package %>.<%= class_name %>Event;
|
9
|
+
import <%= events_package %>.<%= class_name %>EventHandler;
|
10
|
+
import <%= models_package %>.<%= class_name %>;
|
11
|
+
import <%= models_package %>.User;
|
12
|
+
import <%= restservices_package %>.<%= class_name.pluralize %>RestService;
|
13
|
+
|
14
|
+
import com.google.gwt.event.shared.EventBus;
|
15
|
+
import com.google.gwt.event.shared.GwtEvent;
|
16
|
+
|
17
|
+
import <%= gwt_rails_package %>.caches.AbstractModelCache;
|
18
|
+
import <%= gwt_rails_package %>.events.ModelEvent;
|
19
|
+
import <%= gwt_rails_package %>.events.ModelEvent.Action;
|
20
|
+
import <%= gwt_rails_package %>.session.SessionManager;
|
21
|
+
|
22
|
+
@Singleton
|
23
|
+
public class <%= class_name.pluralize %>Cache extends AbstractModelCache<<%= class_name %>>{
|
24
|
+
|
25
|
+
private final <%= class_name.pluralize %>RestService restService;
|
26
|
+
|
27
|
+
@Inject
|
28
|
+
<%= class_name.pluralize %>Cache(SessionManager<User> manager, EventBus eventBus, <%= class_name.pluralize %>RestService restService) {
|
29
|
+
super(manager, eventBus);
|
30
|
+
this.restService = restService;
|
31
|
+
eventBus.addHandler(<%= class_name %>Event.TYPE, new <%= class_name %>EventHandler() {
|
32
|
+
|
33
|
+
public void onModelEvent(ModelEvent<<%= class_name %>> event) {
|
34
|
+
<%= class_name.pluralize %>Cache.this.onModelEvent(event);
|
35
|
+
}
|
36
|
+
});
|
37
|
+
}
|
38
|
+
|
39
|
+
protected void loadModels() {
|
40
|
+
restService.index(newMethodCallback());
|
41
|
+
}
|
42
|
+
|
43
|
+
protected <%= class_name %> newModel() {
|
44
|
+
return new <%= class_name %>();
|
45
|
+
}
|
46
|
+
|
47
|
+
@Override
|
48
|
+
protected GwtEvent<?> newEvent(List<<%= class_name %>> response) {
|
49
|
+
return new <%= class_name %>Event(response, Action.LOAD);
|
50
|
+
}
|
51
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
package <%= places_package %>;
|
2
|
+
|
3
|
+
import <%= gwt_rails_package %>.places.RestfulAction;
|
4
|
+
import <%= gwt_rails_package %>.places.RestfulPlace;
|
5
|
+
|
6
|
+
import <%= managed_package %>.ActivityFactory;
|
7
|
+
import <%= models_package %>.<%= class_name %>;
|
8
|
+
|
9
|
+
import com.google.gwt.activity.shared.Activity;
|
10
|
+
|
11
|
+
public class <%= class_name %>Place extends RestfulPlace<<%= class_name %>, ActivityFactory> {
|
12
|
+
|
13
|
+
public static final String NAME = "<%= table_name %>";
|
14
|
+
|
15
|
+
public Activity create(ActivityFactory factory){
|
16
|
+
return factory.create(this);
|
17
|
+
}
|
18
|
+
|
19
|
+
public <%= class_name %>Place(RestfulAction restfulAction) {
|
20
|
+
super(restfulAction, NAME);
|
21
|
+
}
|
22
|
+
|
23
|
+
public <%= class_name %>Place(<%= class_name %> model, RestfulAction restfulAction) {
|
24
|
+
super(<% unless options[:singleton] -%>model.getId(), <% end -%>model, restfulAction, NAME);
|
25
|
+
}
|
26
|
+
|
27
|
+
public <%= class_name %>Place(int id, RestfulAction restfulAction) {
|
28
|
+
super(id, restfulAction, NAME);
|
29
|
+
}
|
30
|
+
|
31
|
+
public <%= class_name %>Place(String id, RestfulAction restfulAction) {
|
32
|
+
super(id, restfulAction, NAME);
|
33
|
+
}
|
34
|
+
}
|
@@ -32,13 +32,25 @@ import com.google.gwt.user.client.ui.NumberLabel;
|
|
32
32
|
<% end -%>
|
33
33
|
import com.google.gwt.user.client.ui.*;
|
34
34
|
import com.google.gwt.user.client.ui.Widget;
|
35
|
+
<% if attributes.detect {|a| [:datetime, :date, :time].member? a.type } -%>
|
35
36
|
import com.google.gwt.user.datepicker.client.DateBox;
|
37
|
+
<% end -%>
|
36
38
|
|
39
|
+
<% if options[:modified_by] -%>
|
37
40
|
import de.mkristian.gwt.rails.editors.UserLabel;
|
41
|
+
<% end -%>
|
42
|
+
<% if attributes.detect {|a| a.type == :number } -%>
|
38
43
|
import de.mkristian.gwt.rails.editors.DoubleBox;
|
44
|
+
<% end -%>
|
45
|
+
<% if attributes.detect {|a| a.type == :integer } -%>
|
39
46
|
import de.mkristian.gwt.rails.editors.IntegerBox;
|
47
|
+
<% end -%>
|
48
|
+
<% if attributes.detect {|a| a.type == :number || a.type == :fixnum } -%>
|
40
49
|
import de.mkristian.gwt.rails.editors.LongBox;
|
50
|
+
<% end -%>
|
51
|
+
<% if attributes.detect {|a| a.type == :belongs_to } -%>
|
41
52
|
import de.mkristian.gwt.rails.editors.IdentifyableListBox;
|
53
|
+
<% end -%>
|
42
54
|
|
43
55
|
public class <%= class_name %>Editor extends Composite implements Editor<<%= class_name %>>{
|
44
56
|
|
@@ -70,6 +82,8 @@ public class <%= class_name %>Editor extends Composite implements Editor<<%= cla
|
|
70
82
|
// TODO public java.util.List<<%= attribute.name.camelcase %>> <%= attribute.name %>;
|
71
83
|
<% elsif attribute.type == :belongs_to -%>
|
72
84
|
@UiField IdentifyableListBox<<%= attribute.name.classify %>> <%= attribute.name.camelcase.sub(/^(.)/){ $1.downcase } %>;
|
85
|
+
<% elsif attribute.type == :text && options[:read_only] -%>
|
86
|
+
@UiField Label <%= attribute.name.camelcase.sub(/^(.)/){ $1.downcase } %>;
|
73
87
|
<% else -%>
|
74
88
|
@UiField <%= type_widget_map[attribute.type][2..-1] %> <%= attribute.name.camelcase.sub(/^(.)/){ $1.downcase } %>;
|
75
89
|
<% end -%>
|
@@ -102,7 +116,7 @@ public class <%= class_name %>Editor extends Composite implements Editor<<%= cla
|
|
102
116
|
|
103
117
|
<% end -%>
|
104
118
|
<% end -%>
|
105
|
-
public void
|
119
|
+
public void resetVisibility() {
|
106
120
|
<% if !options[:singleton] -%>
|
107
121
|
this.signature.setVisible(id.getValue() != null && id.getValue() > 0);
|
108
122
|
<% elsif options[:timestamps] -%>
|
@@ -110,14 +124,18 @@ public class <%= class_name %>Editor extends Composite implements Editor<<%= cla
|
|
110
124
|
<% elsif options[:modified_by] -%>
|
111
125
|
this.signature.setVisible(modifiedBy.getValue() != null);
|
112
126
|
<% end -%>
|
127
|
+
}
|
128
|
+
|
129
|
+
public void setEnabled(boolean enabled) {
|
130
|
+
resetVisibility();
|
113
131
|
<% for attribute in attributes -%>
|
114
132
|
<% if attribute.type == :has_one -%>
|
115
133
|
// TODO <%= attribute.name.camelcase %> <%= attribute.name %>;
|
116
134
|
<% elsif attribute.type == :has_many -%>
|
117
135
|
// TODO public java.util.List<<%= attribute.name.camelcase %>> <%= attribute.name %>;
|
118
|
-
<%
|
136
|
+
<% elsif !(attribute.type == :text && options[:read_only]) -%>
|
119
137
|
this.<%= attribute.name.camelcase.sub(/^(.)/){ $1.downcase } %>.setEnabled(enabled);
|
120
138
|
<% end -%>
|
121
139
|
<% end -%>
|
122
140
|
}
|
123
|
-
}
|
141
|
+
}
|
@@ -30,7 +30,11 @@
|
|
30
30
|
<% name = attribute.name.camelcase.sub(/^(.)/){ $1.downcase } -%>
|
31
31
|
<g:HTMLPanel>
|
32
32
|
<label name="<%= name %>"><%= name.underscore.humanize %></label>
|
33
|
+
<% if options[:read_only] && attribute.type == :text -%>
|
34
|
+
<pre><g:Label ui:field="<%= name %>"/></pre>
|
35
|
+
<% else -%>
|
33
36
|
<<%= type_widget_map[attribute.type] || 'r:IdentifyableListBox' %> ui:field="<%= name %>"/>
|
37
|
+
<% end -%>
|
34
38
|
</g:HTMLPanel>
|
35
39
|
<% end -%>
|
36
40
|
<% end -%>
|
@@ -1,32 +1,34 @@
|
|
1
1
|
package <%= places_package %>;
|
2
2
|
|
3
3
|
import <%= gwt_rails_package %>.places.RestfulAction;
|
4
|
+
import <%= gwt_rails_package %>.places.RestfulPlace;
|
4
5
|
|
5
6
|
import <%= managed_package %>.ActivityFactory;
|
6
7
|
import <%= models_package %>.<%= class_name %>;
|
7
|
-
import <%= base_package %>.ActivityPlace;
|
8
8
|
|
9
9
|
import com.google.gwt.activity.shared.Activity;
|
10
10
|
|
11
|
-
public class <%= class_name %>Place extends
|
11
|
+
public class <%= class_name %>Place extends RestfulPlace<<%= class_name %>, ActivityFactory> {
|
12
12
|
|
13
|
+
public static final String NAME = "<%= table_name %>";
|
14
|
+
|
13
15
|
public Activity create(ActivityFactory factory){
|
14
16
|
return factory.create(this);
|
15
17
|
}
|
16
18
|
|
17
19
|
public <%= class_name %>Place(RestfulAction restfulAction) {
|
18
|
-
super(restfulAction,
|
20
|
+
super(restfulAction, NAME);
|
19
21
|
}
|
20
22
|
|
21
23
|
public <%= class_name %>Place(<%= class_name %> model, RestfulAction restfulAction) {
|
22
|
-
super(<% unless options[:singleton] -%>model.getId(), <% end -%>model, restfulAction,
|
24
|
+
super(<% unless options[:singleton] -%>model.getId(), <% end -%>model, restfulAction, NAME);
|
23
25
|
}
|
24
26
|
|
25
27
|
public <%= class_name %>Place(int id, RestfulAction restfulAction) {
|
26
|
-
super(id, restfulAction,
|
28
|
+
super(id, restfulAction, NAME);
|
27
29
|
}
|
28
30
|
|
29
31
|
public <%= class_name %>Place(String id, RestfulAction restfulAction) {
|
30
|
-
super(id, restfulAction,
|
32
|
+
super(id, restfulAction, NAME);
|
31
33
|
}
|
32
34
|
}
|
@@ -1,35 +1,42 @@
|
|
1
1
|
package <%= restservices_package %>;
|
2
2
|
|
3
|
+
<% if options[:singleton] -%>
|
3
4
|
import <%= gwt_rails_package %>.dispatchers.RestfulDispatcherSingleton;
|
4
|
-
<%
|
5
|
-
<% if action_map.values.member? :get_all -%>
|
5
|
+
<% else -%>
|
6
6
|
import <%= gwt_rails_package %>.dispatchers.DefaultDispatcherSingleton;
|
7
|
+
<% if action_map.values.member? :get_all -%>
|
8
|
+
|
7
9
|
import java.util.List;
|
8
10
|
<% end -%>
|
9
11
|
<% end -%>
|
10
12
|
|
11
13
|
import javax.ws.rs.*;
|
12
14
|
|
13
|
-
|
15
|
+
<% unless options[:singleton] -%>
|
16
|
+
import org.fusesource.restygwt.client.Attribute;
|
17
|
+
<% end -%>
|
18
|
+
import org.fusesource.restygwt.client.MethodCallback;
|
19
|
+
import org.fusesource.restygwt.client.Options;
|
20
|
+
import org.fusesource.restygwt.client.RestService;
|
14
21
|
|
15
22
|
<% if name -%>
|
23
|
+
import <%= models_package %>.<%= class_name %>;
|
16
24
|
import <%= models_package %>.*;
|
17
25
|
<% end -%>
|
18
26
|
|
19
|
-
<% if options[:singleton] -%>@Path("/<%= singular_table_name %>")
|
27
|
+
<% if options[:singleton] -%>@Path("/<%= singular_table_name %>")
|
20
28
|
@Options(dispatcher = RestfulDispatcherSingleton.class)
|
29
|
+
<% else -%>
|
30
|
+
@Options(dispatcher = DefaultDispatcherSingleton.class)
|
31
|
+
<% end -%>
|
21
32
|
public interface <%= controller_class_name %>RestService extends RestService {
|
22
33
|
|
23
34
|
<% actions.each do |action|
|
24
35
|
case action_map[action]
|
25
36
|
when :get_all -%>
|
26
37
|
@GET @Path("/<%= table_name %>")
|
27
|
-
@Options(dispatcher = DefaultDispatcherSingleton.class)
|
28
38
|
void <%= action %>(MethodCallback<List<<%= class_name %>>> callback);
|
29
39
|
|
30
|
-
// @GET @Path("/<%= table_name %>")
|
31
|
-
// void <%= action %>(MethodCallback<List<<%= class_name %>>> callback, @QueryParam("limit") int limit, @QueryParam("offset") int offset);
|
32
|
-
//
|
33
40
|
<% when :get_single -%>
|
34
41
|
@GET<% unless options[:singleton] -%> @Path("/<%= table_name %>/{id}")<% end %>
|
35
42
|
void <%= action %>(<% unless options[:singleton] -%>@PathParam("id") int id, <% end -%>MethodCallback<<%= class_name %>> callback);
|
@@ -21,40 +21,37 @@ import <%= gwt_rails_package %>.places.RestfulAction;
|
|
21
21
|
public interface <%= class_name %>View extends IsWidget {
|
22
22
|
|
23
23
|
public interface Presenter {
|
24
|
+
<% unless options[:read_only] -%>
|
24
25
|
<% unless options[:singleton] -%>
|
25
26
|
void create();
|
26
|
-
<% end -%>
|
27
|
+
<% end -%>
|
27
28
|
void save();
|
28
29
|
<% unless options[:singleton] -%>
|
29
30
|
void delete(<%= class_name %> model);
|
31
|
+
<% end -%>
|
30
32
|
<% end -%>
|
31
33
|
void goTo(Place place);
|
32
34
|
}
|
33
|
-
void setPresenter(Presenter presenter);
|
34
35
|
|
35
|
-
void
|
36
|
-
|
37
|
-
<%= class_name %> flush();
|
36
|
+
void setup(Presenter presenter, RestfulAction action);
|
38
37
|
<% unless options[:singleton] -%>
|
39
38
|
|
40
39
|
void reset(List<<%= class_name %>> models);
|
41
40
|
<% end -%>
|
42
|
-
|
43
|
-
void reset(RestfulAction action);
|
44
|
-
|
45
|
-
void setEnabled(boolean enabled);
|
46
|
-
<% unless options[:singleton] -%>
|
47
|
-
|
48
|
-
void updateInList(<%= class_name %> model);
|
49
|
-
|
50
|
-
void removeFromList(<%= class_name %> model);
|
51
|
-
|
52
|
-
void addToList(<%= class_name %> model);
|
53
|
-
<% end -%>
|
54
41
|
<% for attribute in attributes -%>
|
55
42
|
<% if attribute.type == :belongs_to -%>
|
56
43
|
|
57
44
|
void reset<%= attribute.name.classify.to_s.pluralize %>(List<<%= attribute.name.classify %>> list);
|
58
45
|
<% end -%>
|
46
|
+
<% end -%>
|
47
|
+
|
48
|
+
void edit(<%= class_name %> model);
|
49
|
+
<% unless options[:read_only] -%>
|
50
|
+
|
51
|
+
<%= class_name %> flush();
|
52
|
+
<% end -%>
|
53
|
+
<% if !options[:singleton] && !options[:read_only] -%>
|
54
|
+
|
55
|
+
void removeFromList(<%= class_name %> model);
|
59
56
|
<% end -%>
|
60
57
|
}
|
@@ -4,10 +4,11 @@
|
|
4
4
|
xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
5
5
|
xmlns:t="urn:import:<%= editors_package %>">
|
6
6
|
|
7
|
-
<g:FlowPanel styleName="gwt-rails-display">
|
7
|
+
<g:FlowPanel styleName="gwt-rails-display <%= application_name.downcase %>-<%= table_name %>">
|
8
8
|
|
9
9
|
<g:Label><%if options[:singleton] -%><%= class_name.underscore.singularize.humanize %><% else -%><%= class_name.underscore.pluralize.humanize %><% end -%></g:Label>
|
10
10
|
|
11
|
+
<% unless options[:read_only] -%>
|
11
12
|
<g:FlowPanel styleName="gwt-rails-buttons">
|
12
13
|
<% unless options[:singleton] -%>
|
13
14
|
<g:Button ui:field="newButton">New</g:Button>
|
@@ -16,10 +17,12 @@
|
|
16
17
|
<g:Button ui:field="showButton">Show</g:Button>
|
17
18
|
</g:FlowPanel>
|
18
19
|
|
20
|
+
<% end -%>
|
19
21
|
<g:FlowPanel ui:field="model" styleName="gwt-rails-model">
|
20
22
|
|
21
23
|
<t:<%= class_name %>Editor ui:field="editor" styleName="gwt-rails-model-editor" />
|
22
24
|
|
25
|
+
<% unless options[:read_only] -%>
|
23
26
|
<g:FlowPanel styleName="gwt-rails-buttons">
|
24
27
|
<% unless options[:singleton] -%>
|
25
28
|
<g:Button ui:field="createButton">Create</g:Button>
|
@@ -30,6 +33,7 @@
|
|
30
33
|
<% end -%>
|
31
34
|
</g:FlowPanel>
|
32
35
|
|
36
|
+
<% end -%>
|
33
37
|
</g:FlowPanel>
|
34
38
|
<% unless options[:singleton] -%>
|
35
39
|
|
@@ -4,12 +4,21 @@ package <%= views_package %>;
|
|
4
4
|
import java.util.List;
|
5
5
|
|
6
6
|
<% end -%>
|
7
|
+
<% unless options[:read_only] -%>
|
8
|
+
import javax.inject.Inject;
|
9
|
+
<% end -%>
|
10
|
+
|
7
11
|
import <%= editors_package %>.<%= class_name %>Editor;
|
8
12
|
<% for attribute in attributes -%>
|
9
13
|
<% if attribute.type == :belongs_to -%>
|
10
14
|
import <%= models_package %>.<%= attribute.name.classify %>;
|
11
15
|
<% end -%>
|
12
16
|
<% end -%>
|
17
|
+
<% unless options[:read_only] -%>
|
18
|
+
<% unless class_name == 'User' -%>
|
19
|
+
import <%= models_package %>.User;
|
20
|
+
<% end -%>
|
21
|
+
<% end -%>
|
13
22
|
import <%= models_package %>.<%= class_name %>;
|
14
23
|
import <%= places_package %>.<%= class_name %>Place;
|
15
24
|
|
@@ -21,7 +30,9 @@ import com.google.gwt.event.dom.client.ClickHandler;
|
|
21
30
|
<% end -%>
|
22
31
|
import com.google.gwt.uibinder.client.UiBinder;
|
23
32
|
import com.google.gwt.uibinder.client.UiField;
|
33
|
+
<% unless options[:read_only] -%>
|
24
34
|
import com.google.gwt.uibinder.client.UiHandler;
|
35
|
+
<% end -%>
|
25
36
|
import com.google.gwt.uibinder.client.UiTemplate;
|
26
37
|
import com.google.gwt.user.client.ui.Button;
|
27
38
|
import com.google.gwt.user.client.ui.Composite;
|
@@ -34,6 +45,10 @@ import com.google.inject.Singleton;
|
|
34
45
|
|
35
46
|
import <%= gwt_rails_package %>.places.RestfulAction;
|
36
47
|
import <%= gwt_rails_package %>.places.RestfulActionEnum;
|
48
|
+
import static <%= gwt_rails_package %>.places.RestfulActionEnum.*;
|
49
|
+
<% unless options[:read_only] -%>
|
50
|
+
import <%= gwt_rails_package %>.session.SessionManager;
|
51
|
+
<% end -%>
|
37
52
|
<% unless options[:singleton] -%>
|
38
53
|
import <%= gwt_rails_package %>.views.ModelButton;
|
39
54
|
<% end -%>
|
@@ -50,15 +65,13 @@ public class <%= class_name %>ViewImpl extends Composite implements <%= class_na
|
|
50
65
|
|
51
66
|
private final EditorDriver editorDriver = GWT.create(EditorDriver.class);
|
52
67
|
|
53
|
-
<% unless options[:
|
68
|
+
<% unless options[:read_only] -%>
|
54
69
|
<% unless options[:singleton] -%>
|
55
70
|
@UiField Button newButton;
|
56
71
|
<% end -%>
|
57
72
|
@UiField Button editButton;
|
58
|
-
<% end -%>
|
59
73
|
@UiField Button showButton;
|
60
74
|
|
61
|
-
<% unless options[:readonly] -%>
|
62
75
|
<% unless options[:singleton] -%>
|
63
76
|
@UiField Button createButton;
|
64
77
|
<% end -%>
|
@@ -76,12 +89,32 @@ public class <%= class_name %>ViewImpl extends Composite implements <%= class_na
|
|
76
89
|
@UiField <%= class_name %>Editor editor;
|
77
90
|
|
78
91
|
private Presenter presenter;
|
92
|
+
<% unless options[:read_only] -%>
|
93
|
+
|
94
|
+
private final SessionManager<User> session;
|
95
|
+
<% end -%>
|
79
96
|
|
80
97
|
public <%= class_name %>ViewImpl() {
|
98
|
+
<% unless options[:read_only] -%>
|
99
|
+
this(null);
|
100
|
+
}
|
101
|
+
|
102
|
+
@Inject
|
103
|
+
public <%= class_name %>ViewImpl(SessionManager<User> session) {
|
104
|
+
<% end -%>
|
81
105
|
initWidget(BINDER.createAndBindUi(this));
|
82
106
|
editorDriver.initialize(editor);
|
107
|
+
<% unless options[:read_only] -%>
|
108
|
+
this.session = session;
|
109
|
+
<% end -%>
|
110
|
+
}
|
111
|
+
<% unless options[:read_only] -%>
|
112
|
+
|
113
|
+
private boolean isAllowed(RestfulActionEnum action){
|
114
|
+
return session == null || session.isAllowed(<%= class_name %>Place.NAME, action);
|
83
115
|
}
|
84
|
-
<%
|
116
|
+
<% end -%>
|
117
|
+
<% unless options[:read_only] -%>
|
85
118
|
<% unless options[:singleton] -%>
|
86
119
|
|
87
120
|
@UiHandler("newButton")
|
@@ -117,56 +150,52 @@ public class <%= class_name %>ViewImpl extends Composite implements <%= class_na
|
|
117
150
|
void onClickDelete(ClickEvent e) {
|
118
151
|
presenter.delete(flush());
|
119
152
|
}
|
120
|
-
|
121
153
|
<% end -%>
|
122
154
|
<% end -%>
|
123
|
-
public void setPresenter(Presenter presenter) {
|
124
|
-
this.presenter = presenter;
|
125
|
-
}
|
126
|
-
|
127
|
-
public void edit(<%= class_name %> model) {
|
128
|
-
this.editorDriver.edit(model);
|
129
|
-
}
|
130
155
|
|
131
|
-
public
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
public void setEnabled(boolean enabled) {
|
136
|
-
editor.setEnabled(enabled);
|
137
|
-
}
|
138
|
-
|
139
|
-
public void reset(RestfulAction action) {
|
156
|
+
public void setup(Presenter presenter, RestfulAction a) {
|
157
|
+
RestfulActionEnum action = RestfulActionEnum.valueOf(a);
|
158
|
+
this.presenter = presenter;
|
140
159
|
<% if options[:singleton] -%>
|
141
|
-
editButton.setVisible(action
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
setEnabled(!action.viewOnly());
|
160
|
+
editButton.setVisible((action == SHOW || action == INDEX) && isAllowed(EDIT));
|
161
|
+
saveButton.setVisible(action == EDIT);
|
162
|
+
showButton.setVisible(action == EDIT);
|
163
|
+
editor.setEnabled(!action.viewOnly());
|
146
164
|
<% else -%>
|
147
|
-
|
148
|
-
|
165
|
+
<% unless options[:read_only] -%>
|
166
|
+
newButton.setVisible(action != NEW && isAllowed(NEW));
|
167
|
+
<% end -%>
|
168
|
+
if(action == INDEX){
|
169
|
+
<% unless options[:read_only] -%>
|
149
170
|
editButton.setVisible(false);
|
150
171
|
showButton.setVisible(false);
|
172
|
+
<% end -%>
|
151
173
|
list.setVisible(true);
|
152
174
|
model.setVisible(false);
|
153
175
|
}
|
154
176
|
else {
|
155
|
-
<%
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
saveButton.setVisible(action.name().equals(RestfulActionEnum.EDIT.name()));
|
162
|
-
deleteButton.setVisible(action.name().equals(RestfulActionEnum.EDIT.name()));
|
177
|
+
<% unless options[:read_only] -%>
|
178
|
+
createButton.setVisible(action == NEW);
|
179
|
+
editButton.setVisible(action == SHOW && isAllowed(EDIT));
|
180
|
+
showButton.setVisible(action == EDIT);
|
181
|
+
saveButton.setVisible(action == EDIT);
|
182
|
+
deleteButton.setVisible(action == EDIT && isAllowed(DESTROY));
|
163
183
|
<% end -%>
|
164
|
-
setEnabled(!action.viewOnly());
|
165
184
|
list.setVisible(false);
|
166
185
|
model.setVisible(true);
|
167
186
|
}
|
187
|
+
editor.setEnabled(!action.viewOnly());
|
168
188
|
<% end -%>
|
169
189
|
}
|
190
|
+
|
191
|
+
public void edit(<%= class_name %> model) {
|
192
|
+
this.editorDriver.edit(model);
|
193
|
+
this.editor.resetVisibility();
|
194
|
+
}
|
195
|
+
|
196
|
+
public <%= class_name %> flush() {
|
197
|
+
return editorDriver.flush();
|
198
|
+
}
|
170
199
|
<% unless options[:singleton] -%>
|
171
200
|
|
172
201
|
private final ClickHandler clickHandler = new ClickHandler() {
|
@@ -175,9 +204,11 @@ public class <%= class_name %>ViewImpl extends Composite implements <%= class_na
|
|
175
204
|
public void onClick(ClickEvent event) {
|
176
205
|
ModelButton<<%= class_name %>> button = (ModelButton<<%= class_name %>>)event.getSource();
|
177
206
|
switch(button.action){
|
207
|
+
<% unless options[:read_only] -%>
|
178
208
|
case DESTROY:
|
179
209
|
presenter.delete(button.model);
|
180
210
|
break;
|
211
|
+
<% end -%>
|
181
212
|
default:
|
182
213
|
presenter.goTo(new <%= class_name %>Place(button.model, button.action));
|
183
214
|
}
|
@@ -193,10 +224,14 @@ public class <%= class_name %>ViewImpl extends Composite implements <%= class_na
|
|
193
224
|
public void reset(List<<%= class_name %>> models) {
|
194
225
|
list.removeAllRows();
|
195
226
|
list.setText(0, 0, "Id");
|
196
|
-
<%
|
197
|
-
|
227
|
+
<% index = 0 -%>
|
228
|
+
<% attributes.each do |attribute| -%>
|
229
|
+
<% if !(attribute.type == :text && options[:read_only]) -%>
|
230
|
+
<% index = index + 1 -%>
|
231
|
+
list.setText(0, <%= index %>, "<%= attribute.name.humanize -%>");
|
232
|
+
<% end -%>
|
198
233
|
<% end -%>
|
199
|
-
list.getRowFormatter().addStyleName(0, "model-list-header");
|
234
|
+
list.getRowFormatter().addStyleName(0, "gwt-rails-model-list-header");
|
200
235
|
int row = 1;
|
201
236
|
for(<%= class_name %> model: models){
|
202
237
|
setRow(row, model);
|
@@ -206,27 +241,24 @@ public class <%= class_name %>ViewImpl extends Composite implements <%= class_na
|
|
206
241
|
|
207
242
|
private void setRow(int row, <%= class_name %> model) {
|
208
243
|
list.setText(row, 0, model.getId() + "");
|
209
|
-
<%
|
244
|
+
<% index = 0 -%>
|
245
|
+
<% attributes.each do |attribute| -%>
|
210
246
|
<% if attribute.type != :has_one && attribute.type != :has_many -%>
|
211
247
|
<% name = attribute.name.camelcase.sub(/^(.)/){ $1.downcase } -%>
|
212
|
-
|
248
|
+
<% if !(attribute.type == :text && options[:read_only]) -%>
|
249
|
+
<% index = index + 1 -%>
|
250
|
+
list.setText(row, <%= index %>, model.get<%= name.camelcase %>()<%= attribute.type == :has_one || attribute.type == :belongs_to ? ' == null ? "-" : model.get' + name.camelcase + '().toDisplay()' : ' + ""' %>);
|
251
|
+
<% end -%>
|
213
252
|
<% end -%>
|
214
|
-
|
215
253
|
<% end -%>
|
216
|
-
list.setWidget(row, <%= attributes.size + 1 %>, newButton(RestfulActionEnum.SHOW, model));
|
217
|
-
list.setWidget(row, <%= attributes.size + 2 %>, newButton(RestfulActionEnum.EDIT, model));
|
218
|
-
list.setWidget(row, <%= attributes.size + 3 %>, newButton(RestfulActionEnum.DESTROY, model));
|
219
|
-
}
|
220
254
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
return;
|
227
|
-
}
|
228
|
-
}
|
255
|
+
list.setWidget(row, <%= index + 1 %>, newButton(RestfulActionEnum.SHOW, model));
|
256
|
+
<% unless options[:read_only] -%>
|
257
|
+
list.setWidget(row, <%= index + 2 %>, newButton(RestfulActionEnum.EDIT, model));
|
258
|
+
list.setWidget(row, <%= index + 3 %>, newButton(RestfulActionEnum.DESTROY, model));
|
259
|
+
<% end -%>
|
229
260
|
}
|
261
|
+
<% unless options[:read_only] -%>
|
230
262
|
|
231
263
|
public void removeFromList(<%= class_name %> model) {
|
232
264
|
String id = model.getId() + "";
|
@@ -237,10 +269,7 @@ public class <%= class_name %>ViewImpl extends Composite implements <%= class_na
|
|
237
269
|
}
|
238
270
|
}
|
239
271
|
}
|
240
|
-
|
241
|
-
public void addToList(<%= class_name %> model) {
|
242
|
-
setRow(list.getRowCount(), model);
|
243
|
-
}
|
272
|
+
<% end -%>
|
244
273
|
<% end -%>
|
245
274
|
<% for attribute in attributes -%>
|
246
275
|
<% if attribute.type == :belongs_to -%>
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: resty-generators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.7.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- mkristian
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-11-04 00:00:00 +05:30
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
requirements:
|
22
22
|
- - ~>
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: 0.1.
|
24
|
+
version: 0.1.3
|
25
25
|
type: :runtime
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/generators/resty/setup/templates/empty.css~
|
151
151
|
- lib/generators/resty/scaffold/scaffold_generator.rb
|
152
152
|
- lib/generators/resty/templates/PlaceTokenizer.java
|
153
|
+
- lib/generators/resty/templates/Cache.java~
|
153
154
|
- lib/generators/resty/templates/ViewImpl.java~
|
154
155
|
- lib/generators/resty/templates/EventHandler.java~
|
155
156
|
- lib/generators/resty/templates/Model.java
|
@@ -164,6 +165,7 @@ files:
|
|
164
165
|
- lib/generators/resty/templates/ActivityPlace.java~
|
165
166
|
- lib/generators/resty/templates/Controller.java~
|
166
167
|
- lib/generators/resty/templates/RestService.java
|
168
|
+
- lib/generators/resty/templates/Cache.java
|
167
169
|
- lib/generators/resty/templates/Activity.java
|
168
170
|
- lib/generators/resty/templates/RestService.java~
|
169
171
|
- lib/generators/resty/templates/Editor.ui.xml~
|