1
2
3
4
5
6
7 package org.asyrinx.joey.gui.swing;
8
9 import java.awt.Component;
10 import java.awt.Window;
11 import java.awt.event.KeyAdapter;
12 import java.awt.event.KeyEvent;
13 import java.awt.event.KeyListener;
14 import java.awt.event.MouseAdapter;
15 import java.awt.event.MouseEvent;
16 import java.awt.event.MouseListener;
17 import java.io.Serializable;
18 import java.util.Iterator;
19 import java.util.List;
20
21 import javax.swing.JOptionPane;
22 import javax.swing.JTable;
23 import javax.swing.ListSelectionModel;
24 import javax.swing.SwingUtilities;
25
26 import org.asyrinx.brownie.core.lang.ClassUtils;
27 import org.asyrinx.brownie.swing.table.ListViewTable;
28 import org.asyrinx.joey.gui.EntityGuiRuntimeException;
29 import org.asyrinx.joey.gui.EntityListView;
30 import org.asyrinx.joey.gui.EntityPointer;
31 import org.asyrinx.joey.gui.EntityViewManager;
32 import org.asyrinx.joey.gui.swing.listview.DefaultEntityListViewTableActionKit;
33 import org.asyrinx.joey.gui.swing.listview.EntityListViewTableActionKit;
34 import org.asyrinx.joey.om.Entity;
35 import org.asyrinx.joey.om.EntityInitializer;
36 import org.asyrinx.joey.om.EntityService;
37 import org.asyrinx.joey.om.SearchCondition;
38
39 /***
40 * @author akima
41 */
42 public abstract class EntityListViewTable extends ListViewTable implements
43 EntityListView {
44
45 /***
46 *
47 */
48 public EntityListViewTable() {
49 super();
50 }
51
52 /***
53 * @param arg0
54 * @param arg1
55 */
56 public EntityListViewTable(int arg0, int arg1) {
57 super(arg0, arg1);
58 }
59
60 /***
61 * @param arg0
62 */
63 public EntityListViewTable(Component arg0) {
64 super(arg0);
65 }
66
67 /***
68 * @param arg0
69 * @param arg1
70 * @param arg2
71 */
72 public EntityListViewTable(Component arg0, int arg1, int arg2) {
73 super(arg0, arg1, arg2);
74 }
75
76
77
78
79
80
81 protected void initialize() {
82 super.initialize();
83 this.addMouseListener(getMouseListener());
84 this.addKeyListener(getKeyListener());
85 }
86
87
88
89
90
91
92 protected void initTable(JTable table) {
93 super.initTable(table);
94 table.addMouseListener(getMouseListener());
95 table.addKeyListener(getKeyListener());
96 }
97
98 /***
99 * @return
100 */
101 public KeyListener getKeyListener() {
102 if (keyListener == null) {
103 keyListener = new KeyAdapter() {
104 public void keyTyped(KeyEvent e) {
105 switch (e.getKeyCode()) {
106 case KeyEvent.VK_ENTER:
107 notifySelectionToInvoker();
108 break;
109 }
110 }
111 };
112 }
113 return keyListener;
114 }
115
116 /***
117 * @return
118 */
119 public MouseListener getMouseListener() {
120 if (mouseListener == null) {
121 mouseListener = new MouseAdapter() {
122 public void mouseClicked(MouseEvent e) {
123 switch (e.getButton()) {
124 case MouseEvent.BUTTON1:
125 switch (e.getClickCount()) {
126 case 1:
127 break;
128 case 2:
129 if (getInvoker() instanceof EntityPointer) {
130 notifySelectionToInvoker();
131 closeWinfow();
132 } else {
133 showDetail();
134 }
135 break;
136 }
137 break;
138 case MouseEvent.BUTTON3:
139 final int row = getTable().rowAtPoint(e.getPoint());
140 final ListSelectionModel selectionModel = getTable()
141 .getSelectionModel();
142 selectionModel.setLeadSelectionIndex(row);
143 selectionModel.setAnchorSelectionIndex(row);
144 showPopupMenu(e);
145 break;
146 }
147 }
148 };
149 }
150 return mouseListener;
151 }
152
153 private MouseListener mouseListener = null;
154
155 private KeyListener keyListener = null;
156
157 private EntityViewManager entityViewManager = null;
158
159
160
161
162
163
164 public EntityViewManager getEntityViewManager() {
165 return entityViewManager;
166 }
167
168
169
170
171
172
173
174 public void setEntityViewManager(EntityViewManager entityViewManager) {
175 this.entityViewManager = entityViewManager;
176 }
177
178 private Object invoker = null;
179
180 /***
181 * @return
182 */
183 public Object getInvoker() {
184 return invoker;
185 }
186
187 /***
188 * @param object
189 */
190 public void setInvoker(Object object) {
191 invoker = object;
192 }
193
194 private static final int COL_INDEX_INVISIBLE_PRIMARY_KEY = 0;
195
196 protected int getInvisibleColumnIndex() {
197 return COL_INDEX_INVISIBLE_PRIMARY_KEY;
198 }
199
200 protected int getInvisibleColumnCount() {
201 return 1;
202 }
203
204 public Serializable getKey(int tableRow) {
205 final int origianlRow = getSortableModel()
206 .getOriginalRowIndex(tableRow);
207 Object object = getModel().getValueAt(origianlRow,
208 COL_INDEX_INVISIBLE_PRIMARY_KEY);
209 return (Serializable) object;
210 }
211
212
213
214
215
216
217 public Serializable getPointedKey() {
218 int tableRow = getTable().getSelectedRow();
219 return getKey(tableRow);
220 }
221
222
223
224
225
226 public void setPointedEntity(Entity entity) {
227 if (entity == null)
228 setPointedKey(null);
229 else
230 setPointedKey(entity.getPrimaryKey());
231 }
232
233
234
235
236
237 public void setPointedKey(Serializable key) {
238 if (key == null)
239 return;
240 for (int row = 0; row < getTable().getRowCount(); row++) {
241 final Serializable rowKey = getKey(row);
242 if (key.equals(rowKey))
243 getTable().getSelectionModel().setLeadSelectionIndex(row);
244 }
245 }
246
247 /***
248 * @return
249 */
250 public abstract Class getEntityClass();
251
252 private javax.swing.JPopupMenu popupMenu = null;
253
254 public javax.swing.JPopupMenu getPopupMenu() {
255 if (popupMenu == null) {
256 popupMenu = new javax.swing.JPopupMenu();
257 getActionKit().preparePopupMenu(this, popupMenu);
258 }
259 return popupMenu;
260 }
261
262 private EntityListViewTableActionKit actionKit;
263
264 /***
265 * @return
266 */
267 public EntityListViewTableActionKit getActionKit() {
268 if (actionKit == null) {
269 actionKit = new DefaultEntityListViewTableActionKit();
270 }
271 return actionKit;
272 }
273
274 /***
275 * @param kit
276 */
277 public void setActionKit(EntityListViewTableActionKit kit) {
278 if (kit == null) {
279 this.actionKit = EntityListViewTableActionKit.NULL;
280 } else {
281 actionKit = kit;
282 }
283 }
284
285 /***
286 *
287 */
288 protected void showPopupMenu(MouseEvent e) {
289 getPopupMenu().show(e.getComponent(), e.getX(), e.getY());
290 }
291
292 public void notifySelectionToInvoker() {
293 final Serializable key = getPointedKey();
294 if (key == null)
295 return;
296 if (getInvoker() instanceof EntityPointer) {
297 final EntityPointer pointer = (EntityPointer) getInvoker();
298 pointer.setPointedKey(getPointedKey());
299 }
300 }
301
302 public void closeWinfow() {
303 final Window window = SwingUtilities.getWindowAncestor(this);
304 window.setVisible(false);
305 }
306
307 public void showDetail() {
308 final Serializable key = getPointedKey();
309 if (key == null)
310 return;
311 getEntityViewManager().showDetailEditView(this, getEntityClass(),
312 getPointedKey());
313 }
314
315 private EntityInitializer entityInitializer = EntityInitializer.NULL;
316
317 /***
318 * @return
319 */
320 public EntityInitializer getEntityInitializer() {
321 return entityInitializer;
322 }
323
324 /***
325 * @param initializer
326 */
327 public void setEntityInitializer(EntityInitializer initializer) {
328 entityInitializer = initializer;
329 }
330
331 /***
332 *
333 */
334 public void insertNewRow() {
335 final Entity entity;
336 try {
337 entity = (Entity) ClassUtils.newObject(getEntityClass(),
338 Entity.class);
339 } catch (InstantiationException e) {
340 throw new EntityGuiRuntimeException(e);
341 }
342 getEntityInitializer().initialize(entity);
343 getEntityViewManager().showDetailEditView(this, entity);
344 refresh();
345 }
346
347 public void load(List entities) {
348 clearList();
349 for (Iterator iter = entities.iterator(); iter.hasNext();) {
350 final Entity obj = (Entity) iter.next();
351 loadEntity(obj);
352 }
353 }
354
355 public abstract void loadEntity(Entity obj);
356
357 /***
358 *
359 */
360 public void deleteSelections() {
361 if (getPointedKey() == null)
362 return;
363 final int deleteConfirm = JOptionPane.showConfirmDialog(this,
364 "選択した行を削除してもよろしいですか?", "削除確認", JOptionPane.OK_CANCEL_OPTION);
365 if (deleteConfirm != JOptionPane.OK_OPTION)
366 return;
367 try {
368 getEntityViewManager().getEntityServiceManager().deleteEntity(
369 getEntityClass(), getPointedKey());
370 JOptionPane.showMessageDialog(this, "削除しました");
371 refresh();
372 } catch (Throwable e) {
373 e.printStackTrace();
374 JOptionPane.showMessageDialog(this, "削除できませんでした", "エラー",
375 JOptionPane.ERROR);
376 }
377 }
378
379
380
381
382
383
384 public void clearList() {
385 getModel().setRowCount(0);
386 }
387
388 private SearchCondition condition = null;
389
390
391
392
393
394
395 public SearchCondition getCondition() {
396 return condition;
397 }
398
399
400
401
402
403
404 public void setCondition(SearchCondition condition) {
405 this.condition = condition;
406 }
407
408 private EntityService service = null;
409
410
411
412
413
414
415 public EntityService getService() {
416 if (service == null) {
417 service = getEntityViewManager().getEntityServiceManager()
418 .getEntityService(getEntityClass());
419 }
420 return service;
421 }
422
423
424
425
426
427
428 public void setService(EntityService service) {
429 this.service = service;
430 }
431
432
433
434
435
436
437 public void refresh() {
438 final EntityService entityService = getService();
439 if (entityService != null) {
440 this.clearList();
441 final List list = entityService.select(getCondition());
442 load(list);
443 }
444 }
445
446
447
448
449
450
451 public void beforeShow() {
452 }
453
454
455
456
457
458
459 public void afterShow() {
460 }
461
462
463
464
465
466
467 public void beforeHide() {
468 }
469
470
471
472
473
474
475 public void afterHide() {
476 }
477 }