OSDN Git Service

初期インポート
[u6kcommons/weekly-report.git] / weekly-report / src / jp / co / showa_sys_eng / weekly_report / gwt / client / widget / WeeklyReportListPanel.java
1 \r
2 package jp.co.showa_sys_eng.weekly_report.gwt.client.widget;\r
3 \r
4 import java.util.ArrayList;\r
5 import java.util.Date;\r
6 import java.util.List;\r
7 \r
8 import jp.co.showa_sys_eng.weekly_report.gwt.client.EventTypeConst;\r
9 import jp.co.showa_sys_eng.weekly_report.gwt.client.data.ReportStateEnum;\r
10 import jp.co.showa_sys_eng.weekly_report.gwt.client.data.WeeklyReport;\r
11 import jp.co.showa_sys_eng.weekly_report.gwt.client.service.WeeklyReportService;\r
12 import jp.co.showa_sys_eng.weekly_report.gwt.client.service.WeeklyReportServiceAsync;\r
13 \r
14 import com.extjs.gxt.ui.client.GXT;\r
15 import com.extjs.gxt.ui.client.data.BaseModelData;\r
16 import com.extjs.gxt.ui.client.event.ButtonEvent;\r
17 import com.extjs.gxt.ui.client.event.Listener;\r
18 import com.extjs.gxt.ui.client.event.MessageBoxEvent;\r
19 import com.extjs.gxt.ui.client.event.SelectionListener;\r
20 import com.extjs.gxt.ui.client.mvc.Dispatcher;\r
21 import com.extjs.gxt.ui.client.store.ListStore;\r
22 import com.extjs.gxt.ui.client.widget.ContentPanel;\r
23 import com.extjs.gxt.ui.client.widget.MessageBox;\r
24 import com.extjs.gxt.ui.client.widget.Status;\r
25 import com.extjs.gxt.ui.client.widget.button.Button;\r
26 import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;\r
27 import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;\r
28 import com.extjs.gxt.ui.client.widget.grid.ColumnData;\r
29 import com.extjs.gxt.ui.client.widget.grid.ColumnModel;\r
30 import com.extjs.gxt.ui.client.widget.grid.Grid;\r
31 import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;\r
32 import com.extjs.gxt.ui.client.widget.layout.FitLayout;\r
33 import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;\r
34 import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;\r
35 import com.google.gwt.core.client.GWT;\r
36 import com.google.gwt.event.dom.client.ClickEvent;\r
37 import com.google.gwt.event.dom.client.ClickHandler;\r
38 import com.google.gwt.i18n.client.DateTimeFormat;\r
39 import com.google.gwt.user.client.rpc.AsyncCallback;\r
40 import com.google.gwt.user.client.ui.Hyperlink;\r
41 \r
42 public class WeeklyReportListPanel extends ContentPanel {\r
43 \r
44     private WeeklyReportServiceAsync weeklyReportService = GWT.create(WeeklyReportService.class);\r
45 \r
46     private Status loadingStatus;\r
47 \r
48     private Grid<WeeklyReportModel> grid;\r
49 \r
50     private ListStore<WeeklyReportModel> gridStore;\r
51 \r
52     public WeeklyReportListPanel() {\r
53         this.setLayout(new FitLayout());\r
54         this.setHeading("週報一覧");\r
55 \r
56         // ツール・バー\r
57         ToolBar toolBar = new ToolBar();\r
58 \r
59         Button postButton = new Button("部長に提出");\r
60         postButton.addSelectionListener(new SelectionListener<ButtonEvent>() {\r
61 \r
62             @Override\r
63             public void componentSelected(ButtonEvent ce) {\r
64                 WeeklyReportListPanel.this.postReport();\r
65             }\r
66 \r
67         });\r
68         toolBar.add(postButton);\r
69 \r
70         toolBar.add(new SeparatorToolItem());\r
71 \r
72         Button returnButton = new Button("部員に返却");\r
73         returnButton.addSelectionListener(new SelectionListener<ButtonEvent>() {\r
74 \r
75             @Override\r
76             public void componentSelected(ButtonEvent ce) {\r
77                 WeeklyReportListPanel.this.returnReport();\r
78             }\r
79 \r
80         });\r
81         toolBar.add(returnButton);\r
82 \r
83         toolBar.add(new SeparatorToolItem());\r
84 \r
85         Button deleteButton = new Button("ゴミ箱に移動");\r
86         deleteButton.addSelectionListener(new SelectionListener<ButtonEvent>() {\r
87 \r
88             @Override\r
89             public void componentSelected(ButtonEvent event) {\r
90                 WeeklyReportListPanel.this.deleteReport();\r
91             }\r
92 \r
93         });\r
94         toolBar.add(deleteButton);\r
95 \r
96         this.setTopComponent(toolBar);\r
97 \r
98         // グリッド\r
99         this.gridStore = new ListStore<WeeklyReportModel>();\r
100 \r
101         List<ColumnConfig> columnConfigList = new ArrayList<ColumnConfig>();\r
102 \r
103         CheckBoxSelectionModel<WeeklyReportModel> selectionModel = new CheckBoxSelectionModel<WeeklyReportModel>();\r
104         columnConfigList.add(selectionModel.getColumn());\r
105 \r
106         ColumnConfig columnConfig = new ColumnConfig("name", "文書名", 300);\r
107         columnConfig.setRenderer(new GridCellRenderer<WeeklyReportModel>() {\r
108 \r
109             @Override\r
110             public Object render(WeeklyReportModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<WeeklyReportModel> store, Grid<WeeklyReportModel> grid) {\r
111                 final String weeklyReportId = model.getWeeklyReportId();\r
112 \r
113                 Hyperlink link = new Hyperlink("週報 [" + model.getAuthorId() + "]", "");\r
114                 link.addClickHandler(new ClickHandler() {\r
115 \r
116                     @Override\r
117                     public void onClick(ClickEvent event) {\r
118                         Dispatcher.get().dispatch(EventTypeConst.DETAIL, weeklyReportId);\r
119                     }\r
120 \r
121                 });\r
122 \r
123                 return link;\r
124             }\r
125 \r
126         });\r
127         columnConfigList.add(columnConfig);\r
128 \r
129         columnConfig = new ColumnConfig("postDate", "作成日", 100);\r
130         columnConfig.setRenderer(new GridCellRenderer<WeeklyReportModel>() {\r
131 \r
132             @Override\r
133             public Object render(WeeklyReportModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<WeeklyReportModel> store, Grid<WeeklyReportModel> grid) {\r
134                 DateTimeFormat formatter = DateTimeFormat.getFormat("yyyy/MM/dd");\r
135                 String postDateString = formatter.format(model.getPostDate());\r
136 \r
137                 return postDateString;\r
138             }\r
139 \r
140         });\r
141         columnConfigList.add(columnConfig);\r
142 \r
143         columnConfig = new ColumnConfig("authorId", "報告者", 100);\r
144         columnConfigList.add(columnConfig);\r
145 \r
146         columnConfig = new ColumnConfig("reportState", "状態", 100);\r
147         columnConfig.setRenderer(new GridCellRenderer<WeeklyReportModel>() {\r
148 \r
149             @Override\r
150             public Object render(WeeklyReportModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<WeeklyReportModel> store, Grid<WeeklyReportModel> grid) {\r
151                 return model.getReportState().getName();\r
152             }\r
153 \r
154         });\r
155         columnConfigList.add(columnConfig);\r
156 \r
157         ColumnModel columnModel = new ColumnModel(columnConfigList);\r
158 \r
159         this.grid = new Grid<WeeklyReportModel>(this.gridStore, columnModel);\r
160         this.grid.setSelectionModel(selectionModel);\r
161         this.grid.hide();\r
162         this.add(this.grid);\r
163 \r
164         // ローディング\r
165         this.loadingStatus = new Status();\r
166         this.loadingStatus.setBusy("検索中...");\r
167 \r
168         this.add(this.loadingStatus);\r
169 \r
170         // 検索\r
171         this.findReport();\r
172     }\r
173 \r
174     private void findReport() {\r
175         this.grid.hide();\r
176         this.loadingStatus.show();\r
177 \r
178         this.weeklyReportService.findAll(new AsyncCallback<List<WeeklyReport>>() {\r
179 \r
180             @Override\r
181             public void onSuccess(List<WeeklyReport> result) {\r
182                 WeeklyReportListPanel.this.findSuccess(result);\r
183             }\r
184 \r
185             @Override\r
186             public void onFailure(Throwable caught) {\r
187                 Dispatcher.get().dispatch(EventTypeConst.ERROR, caught);\r
188             }\r
189 \r
190         });\r
191     }\r
192 \r
193     private void findSuccess(List<WeeklyReport> l) {\r
194         this.gridStore.removeAll();\r
195 \r
196         for (WeeklyReport original : l) {\r
197             WeeklyReportModel model = new WeeklyReportModel(original);\r
198 \r
199             this.gridStore.add(model);\r
200         }\r
201 \r
202         this.gridStore.commitChanges();\r
203 \r
204         this.loadingStatus.hide();\r
205         this.grid.show();\r
206     }\r
207 \r
208     private void deleteReport() {\r
209         List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();\r
210         if (modelList.size() == 0) {\r
211             MessageBox.alert("ゴミ箱に移動", "週報が選択されていません。", null);\r
212 \r
213             return;\r
214         }\r
215 \r
216         MessageBox.confirm("ゴミ箱に移動", modelList.size() + "個の週報をゴミ箱に移動します。<br>よろしいですか?", new Listener<MessageBoxEvent>() {\r
217 \r
218             @Override\r
219             public void handleEvent(MessageBoxEvent event) {\r
220                 if (event.getButtonClicked().getText().equals(GXT.MESSAGES.messageBox_yes())) {\r
221                     WeeklyReportListPanel.this.updateReportFix(ReportStateEnum.DELETE);\r
222                 }\r
223             }\r
224 \r
225         });\r
226     }\r
227 \r
228     private void postReport() {\r
229         List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();\r
230         if (modelList.size() == 0) {\r
231             MessageBox.alert("部長に提出", "週報が選択されていません。", null);\r
232 \r
233             return;\r
234         }\r
235 \r
236         MessageBox.confirm("部長に提出", modelList.size() + "個の週報を部長に提出します。<br>この操作は取り消せません。<br>よろしいですか?", new Listener<MessageBoxEvent>() {\r
237 \r
238             @Override\r
239             public void handleEvent(MessageBoxEvent event) {\r
240                 if (event.getButtonClicked().getText().equals(GXT.MESSAGES.messageBox_yes())) {\r
241                     WeeklyReportListPanel.this.updateReportFix(ReportStateEnum.POST);\r
242                 }\r
243             }\r
244 \r
245         });\r
246     }\r
247 \r
248     private void returnReport() {\r
249         List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();\r
250         if (modelList.size() == 0) {\r
251             MessageBox.alert("部員に返却", "週報が選択されていません。", null);\r
252 \r
253             return;\r
254         }\r
255 \r
256         MessageBox.confirm("部員に返却", modelList.size() + "個の週報を部員に返却します。<br>この操作は取り消せません。<br>よろしいですか?", new Listener<MessageBoxEvent>() {\r
257 \r
258             @Override\r
259             public void handleEvent(MessageBoxEvent event) {\r
260                 if (event.getButtonClicked().getText().equals(GXT.MESSAGES.messageBox_yes())) {\r
261                     WeeklyReportListPanel.this.updateReportFix(ReportStateEnum.RETURN);\r
262                 }\r
263             }\r
264 \r
265         });\r
266     }\r
267 \r
268     private void updateReportFix(ReportStateEnum reportState) {\r
269         List<WeeklyReportModel> modelList = this.grid.getSelectionModel().getSelectedItems();\r
270 \r
271         List<WeeklyReport> weeklyReportList = new ArrayList<WeeklyReport>();\r
272 \r
273         for (WeeklyReportModel model : modelList) {\r
274             WeeklyReport weeklyReport = model.getOriginal();\r
275             weeklyReport.setReportState(reportState);\r
276 \r
277             weeklyReportList.add(weeklyReport);\r
278         }\r
279 \r
280         this.weeklyReportService.update(weeklyReportList, new AsyncCallback<Void>() {\r
281 \r
282             @Override\r
283             public void onSuccess(Void result) {\r
284                 WeeklyReportListPanel.this.findReport();\r
285             }\r
286 \r
287             @Override\r
288             public void onFailure(Throwable caught) {\r
289                 Dispatcher.get().dispatch(EventTypeConst.ERROR, caught);\r
290             }\r
291 \r
292         });\r
293     }\r
294 \r
295     @SuppressWarnings("serial")\r
296     private class WeeklyReportModel extends BaseModelData {\r
297 \r
298         private WeeklyReport original;\r
299 \r
300         public WeeklyReportModel(WeeklyReport original) {\r
301             this.original = original;\r
302 \r
303             this.setWeeklyReportId(original.getWeeklyReportId());\r
304             this.setPostDate(original.getPostDate());\r
305             this.setAuthorId(original.getAuthorId());\r
306             this.setReportState(original.getReportState());\r
307         }\r
308 \r
309         public String getWeeklyReportId() {\r
310             return this.get("weeklyReportId");\r
311         }\r
312 \r
313         public void setWeeklyReportId(String weeklyReportId) {\r
314             this.set("weeklyReportId", weeklyReportId);\r
315         }\r
316 \r
317         public Date getPostDate() {\r
318             return this.get("postDate");\r
319         }\r
320 \r
321         public void setPostDate(Date postDate) {\r
322             this.set("postDate", postDate);\r
323         }\r
324 \r
325         public String getAuthorId() {\r
326             return this.get("authorId");\r
327         }\r
328 \r
329         public void setAuthorId(String authorId) {\r
330             this.set("authorId", authorId);\r
331         }\r
332 \r
333         public ReportStateEnum getReportState() {\r
334             return this.get("reportState");\r
335         }\r
336 \r
337         public void setReportState(ReportStateEnum reportState) {\r
338             this.set("reportState", reportState);\r
339         }\r
340 \r
341         public WeeklyReport getOriginal() {\r
342             return this.original;\r
343         }\r
344 \r
345     }\r
346 \r
347 }\r