View Javadoc
1   package fr.ifremer.tutti.ui.swing.content.operation.fishing;
2   
3   /*
4    * #%L
5    * Tutti :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2012 - 2017 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU General Public License as
13   * published by the Free Software Foundation, either version 3 of the
14   * License, or (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU General Public
22   * License along with this program.  If not, see
23   * <http://www.gnu.org/licenses/gpl-3.0.html>.
24   * #L%
25   */
26  
27  import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
28  import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI;
29  import fr.ifremer.tutti.ui.swing.util.TuttiUI;
30  import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
31  import java.awt.Color;
32  import java.awt.Container;
33  import java.awt.GridBagConstraints;
34  import java.awt.Insets;
35  import java.awt.event.KeyEvent;
36  import java.awt.event.KeyListener;
37  import java.awt.event.MouseEvent;
38  import java.awt.event.MouseListener;
39  import java.util.ArrayList;
40  import java.util.HashMap;
41  import java.util.List;
42  import java.util.Map;
43  import java.util.TreeMap;
44  import javax.swing.JButton;
45  import javax.swing.JMenuItem;
46  import javax.swing.JPopupMenu;
47  import javax.swing.JScrollPane;
48  import javax.swing.ListSelectionModel;
49  import jaxx.runtime.JAXXBinding;
50  import jaxx.runtime.JAXXContext;
51  import jaxx.runtime.JAXXObject;
52  import jaxx.runtime.JAXXObjectDescriptor;
53  import jaxx.runtime.JAXXUtil;
54  import jaxx.runtime.SwingUtil;
55  import jaxx.runtime.binding.DefaultJAXXBinding;
56  import jaxx.runtime.context.DefaultJAXXContext;
57  import jaxx.runtime.swing.Table;
58  import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
59  import org.apache.commons.logging.Log;
60  import org.apache.commons.logging.LogFactory;
61  import org.jdesktop.swingx.JXTable;
62  import static org.nuiton.i18n.I18n.t;
63  
64  public class GearUseFeatureTabUI extends Table implements TuttiUI<GearUseFeatureTabUIModel, GearUseFeatureTabUIHandler>, JAXXObject {
65  
66      /*-----------------------------------------------------------------------*/
67      /*------------------ Constants for all public bindings ------------------*/
68      /*-----------------------------------------------------------------------*/
69  
70      public static final String BINDING_ADD_ROW_ENABLED = "addRow.enabled";
71      public static final String BINDING_NEW_ROW_KEY_ENABLED = "newRowKey.enabled";
72      public static final String BINDING_REMOVE_CARACTERISTIC_MENU_ENABLED = "removeCaracteristicMenu.enabled";
73  
74      /*-----------------------------------------------------------------------*/
75      /*------------------------- Other static fields -------------------------*/
76      /*-----------------------------------------------------------------------*/
77  
78      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1Wz28bRRSeOLHz0y0QJWmVIiVQqhaJSZCoVCkUmpg4OHXSKk7UiEiE8e7EnnS8M8y+TTayivgT+BPgzgWJGyfEgTMHLoh/ASEOXBFvdjdeO9nUUdQcVtG89773Y973jb//i+R9Q+YPWRhSE3ggWpyuL+/uPqkfcgc+4b5jhAZlSPw3kCO5PTLuds59IG/vVW34QhK+UFItrTzudUUvVcmYDyeS+03OAcibvRGO7y/UOualUAfmFLVTVBbqt//8nfvG/fq7HCGhxupGsJW5flFpJ0NVkhMukDcw0xFbkMxrYBlGeA2st2jPSpL5/iZr8S/JV2S4SgqaGQQD8tblW44wovhQAxm+vc3qki8CWTswVBwY3uKGQgAgaCCof4zZqaM8QDCqNDcMhPLogfCb1rLGmdnxeZkzCAxHqJ2K1hF6AUi+pVwugVRfEfKGhUvhx8BW/lTpAPuYtuMJE9T16HCDe0HqPYP51REvMcMc4Eb4IBzrAWSqJ9SeVYC3bNj1TvSox4+31PFjfgLkfs+NxmHcFThjWufMoyv4KQuJSWx9eBV1taJCCzTawSsw10U8IJM9yVdwOsrrdS3eXq85Rkn5lHn2nmZ6IlJTb9Rk4+z8JAcyq0yDHiJbnoPSMURI13cjqw2c1bixsz39IRdoyoV0WQf2SN4EeAzkxt55+myhKSbOjTPEsYCR9b/pyd9/+vPH8ilbxjD3VKZrF9lxi7Wx2wLCpr4eUyUAIRc2mF7aI6M+l6gUkRLcyiislpixOMz3ug2nNpx+yvwmQuSH//j5l+kvfhskuTIZk4q5ZWb9K2QUmganoKQb6o8fRRVNHI/g9zVbG+4I2o63uG8FZQhMwEPs/lZG950S6qO//jtZ++HR6QQGsKKbF7qnU8h/RgrCk8LjkWIkYpCpEOPa54GrUtJnyQCxBMpe24RAd6Lvu1ltX9vHXX7GRaMJO57A3mfaEe9pg0N6fPfeizCwGDTq0/63SLTGxEXJ6lw+E9C0fv2yFZoRJJDc/cULAMfrEYssJ+RL4XJARpJlQlpPxYvD3R6JQIXknh0I6vJ0e74jA1T4qy0NJ5l9deuF7jPBQRQyTIfSV7FiSAZxmt1J32mnOXGitaRIK1F3783NP5zzAilf4Bj3fdHSki9HWEA+b19FdeNK/DPquxyJVYxMHbs4mU0notav4yFUp3jWCLfCnOcNowIPWy20k15Sc1kZfmoutktKosiuVJdLj9FrxFcGYl3LHzCJvCPFTqB9K+zwqniLte5DSWuVzbXq6n5ttbpa2q482czsJUs/+zWGsjsh3n/gbXj41Hh2dx7Gg8/ASiZNM14l2urE92zGRJ2B03wPW+DArcTwEHnwwVVSIElAKbkt9HYE8uBKdYLQ3Zt6J+G98LfOO6/GXkiX86vKXuGqxqkvs60X/SDod8soQiP2nd8+0XgL1z50GbC5uvBcLOqjc4kG7Hf6EphDwolf/qNsjMm+GPa4/RKEm4jwP78ty+NgCwAA";
79      private static final Log log = LogFactory.getLog(GearUseFeatureTabUI.class);
80      private static final long serialVersionUID = 1L;
81  
82      /*-----------------------------------------------------------------------*/
83      /*--------------------------- Internal states ---------------------------*/
84      /*-----------------------------------------------------------------------*/
85  
86      protected List<Object> $activeBindings = new ArrayList<Object>();
87      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
88      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
89      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
90      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
91      private boolean allComponentsCreated;
92      protected final JAXXContext delegateContext = new DefaultJAXXContext();
93  
94      /*-----------------------------------------------------------------------*/
95      /*------------------------ Protected components  ------------------------*/
96      /*-----------------------------------------------------------------------*/
97  
98      protected JButton addRow;
99      protected JXTable gearUseFeatureTable;
100     protected final GearUseFeatureTabUIHandler handler = createHandler();
101     protected GearUseFeatureTabUIModel model;
102     protected BeanFilterableComboBox<Caracteristic> newRowKey;
103     protected JMenuItem removeCaracteristicMenu;
104     protected JPopupMenu tablePopup;
105 
106     /*-----------------------------------------------------------------------*/
107     /*------------------------- Private components  -------------------------*/
108     /*-----------------------------------------------------------------------*/
109 
110     private JScrollPane $JScrollPane0;
111     private GearUseFeatureTabUI $Table0 = this;
112 
113     /*-----------------------------------------------------------------------*/
114     /*---------------------------- Constructors  ----------------------------*/
115     /*-----------------------------------------------------------------------*/
116 
117     public GearUseFeatureTabUI(EditFishingOperationUI parentUI) {
118         TuttiUIUtil.setParentUI(this, parentUI);
119             $initialize();
120     }
121 
122     public GearUseFeatureTabUI() {
123         $initialize();
124     }
125 
126     public GearUseFeatureTabUI(JAXXContext parentContext) {
127         JAXXUtil.initContext(this, parentContext);
128         $initialize();
129     }
130 
131     /*-----------------------------------------------------------------------*/
132     /*--------------------------- Statics methods ---------------------------*/
133     /*-----------------------------------------------------------------------*/
134 
135     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
136         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
137     }
138 
139     /*-----------------------------------------------------------------------*/
140     /*---------------------- JAXXObject implementation ----------------------*/
141     /*-----------------------------------------------------------------------*/
142 
143     @Override
144     public void applyDataBinding(String $binding) {
145         if (allComponentsCreated && $bindings.containsKey($binding)) {
146             getDataBinding($binding).applyDataBinding();
147         }
148         processDataBinding($binding);
149     }
150 
151     @Override
152     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
153         super.firePropertyChange(propertyName, oldValue, newValue);
154     }
155 
156     @Override
157     public Map<String, Object> get$objectMap() {
158         return $objectMap;
159     }
160 
161     @Override
162     public JAXXBinding getDataBinding(String bindingId) {
163         return $bindings.get(bindingId);
164     }
165 
166     @Override
167     public JAXXBinding[] getDataBindings() {
168         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
169     }
170 
171     @Override
172     public Object getObjectById(String id) {
173         return $objectMap.get(id);
174     }
175 
176     @Override
177     public void processDataBinding(String $binding, boolean $force) {
178         if (!$force && $activeBindings.contains($binding)) { 
179             return;
180         }
181         $activeBindings.add($binding);
182         try {
183             if (allComponentsCreated && $bindings.containsKey($binding)) {
184                 getDataBinding($binding).processDataBinding();
185             }
186         } finally {
187             $activeBindings.remove($binding);
188         }
189     }
190 
191     @Override
192     public void processDataBinding(String $binding) {
193         processDataBinding($binding, false);
194     }
195 
196     @Override
197     public void registerDataBinding(JAXXBinding binding) {
198         $bindings.put(binding.getId(), binding);
199     }
200 
201     @Override
202     public void removeDataBinding(String $binding) {
203         if (allComponentsCreated && $bindings.containsKey($binding)) {
204             getDataBinding($binding).removeDataBinding();
205         }
206     }
207 
208     /*-----------------------------------------------------------------------*/
209     /*--------------------- JAXXContext implementation  ---------------------*/
210     /*-----------------------------------------------------------------------*/
211 
212     @Override
213     public <T> T getContextValue(Class<T> clazz) {
214         return delegateContext.getContextValue(clazz, null);
215     }
216 
217     @Override
218     public <T> T getContextValue(Class<T> clazz, String name) {
219         return delegateContext.getContextValue(clazz, name);
220     }
221 
222     @Override
223     public JAXXContext getDelegateContext() {
224         return delegateContext;
225     }
226 
227     @Override
228     public <O extends Container> O getParentContainer(Class<O> clazz) {
229         return SwingUtil.getParentContainer(this, clazz);
230     }
231 
232     @Override
233     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
234         return SwingUtil.getParentContainer(source, clazz);
235     }
236 
237     @Override
238     public <T> void removeContextValue(Class<T> clazz) {
239         delegateContext.removeContextValue(clazz, null);
240     }
241 
242     @Override
243     public <T> void removeContextValue(Class<T> clazz, String name) {
244         delegateContext.removeContextValue(clazz, name);
245     }
246 
247     @Override
248     public <T> void setContextValue(T o) {
249         delegateContext.setContextValue(o, null);
250     }
251 
252     @Override
253     public <T> void setContextValue(T o, String name) {
254         delegateContext.setContextValue(o, name);
255     }
256 
257     /*-----------------------------------------------------------------------*/
258     /*---------------------------- Event methods ----------------------------*/
259     /*-----------------------------------------------------------------------*/
260 
261     public void doKeyPressed__on__gearUseFeatureTable(KeyEvent event) {
262         if (log.isDebugEnabled()) {
263             log.debug(event);
264         }
265         handler.openRowMenu(event, tablePopup);
266     }
267 
268     public void doMouseClicked__on__gearUseFeatureTable(MouseEvent event) {
269         if (log.isDebugEnabled()) {
270             log.debug(event);
271         }
272         handler.autoSelectRowInTable(event, tablePopup);
273     }
274 
275     /*-----------------------------------------------------------------------*/
276     /*----------------------- Public acessor methods  -----------------------*/
277     /*-----------------------------------------------------------------------*/
278 
279     public JButton getAddRow() {
280         return addRow;
281     }
282 
283     public JXTable getGearUseFeatureTable() {
284         return gearUseFeatureTable;
285     }
286 
287     public GearUseFeatureTabUIHandler getHandler() {
288         return handler;
289     }
290 
291     public GearUseFeatureTabUIModel getModel() {
292         return model;
293     }
294 
295     public BeanFilterableComboBox<Caracteristic> getNewRowKey() {
296         return newRowKey;
297     }
298 
299     public JMenuItem getRemoveCaracteristicMenu() {
300         return removeCaracteristicMenu;
301     }
302 
303     public JPopupMenu getTablePopup() {
304         return tablePopup;
305     }
306 
307     /*-----------------------------------------------------------------------*/
308     /*--------------------- Protected acessors methods  ---------------------*/
309     /*-----------------------------------------------------------------------*/
310 
311     protected JScrollPane get$JScrollPane0() {
312         return $JScrollPane0;
313     }
314 
315     /*-----------------------------------------------------------------------*/
316     /*--------------------- Components creation methods ---------------------*/
317     /*-----------------------------------------------------------------------*/
318 
319     protected void addChildrenToTablePopup() {
320         if (!allComponentsCreated) {
321             return;
322         }
323         tablePopup.add(removeCaracteristicMenu);
324     }
325 
326     protected void createAddRow() {
327         $objectMap.put("addRow", addRow = new JButton());
328         
329         addRow.setName("addRow");
330         addRow.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.GearUseFeatureAddRowAction.class);
331     }
332 
333     protected void createGearUseFeatureTable() {
334         $objectMap.put("gearUseFeatureTable", gearUseFeatureTable = new JXTable());
335         
336         gearUseFeatureTable.setName("gearUseFeatureTable");
337         gearUseFeatureTable.setSortable(false);
338         gearUseFeatureTable.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyPressed", this, "doKeyPressed__on__gearUseFeatureTable"));
339         gearUseFeatureTable.addMouseListener(JAXXUtil.getEventListener(MouseListener.class, "mouseClicked", this, "doMouseClicked__on__gearUseFeatureTable"));
340     }
341 
342     protected GearUseFeatureTabUIHandler createHandler() {
343         return new GearUseFeatureTabUIHandler();
344     }
345 
346     protected void createModel() {
347         $objectMap.put("model", model = getContextValue(GearUseFeatureTabUIModel.class));
348     }
349 
350     protected void createNewRowKey() {
351         $objectMap.put("newRowKey", newRowKey = new BeanFilterableComboBox<Caracteristic>(this));
352         
353         newRowKey.setName("newRowKey");
354         newRowKey.setProperty("selectedCaracteristic");
355         newRowKey.setShowReset(true);
356     }
357 
358     protected void createRemoveCaracteristicMenu() {
359         $objectMap.put("removeCaracteristicMenu", removeCaracteristicMenu = new JMenuItem());
360         
361         removeCaracteristicMenu.setName("removeCaracteristicMenu");
362         removeCaracteristicMenu.setText(t("tutti.gearUseFeatureTable.action.removeCaracteristic"));
363         removeCaracteristicMenu.setToolTipText(t("tutti.gearUseFeatureTable.action.removeCaracteristic.tip"));
364         removeCaracteristicMenu.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.GearUseFeatureRemoveRowAction.class);
365     }
366 
367     protected void createTablePopup() {
368         $objectMap.put("tablePopup", tablePopup = new JPopupMenu());
369         
370         tablePopup.setName("tablePopup");
371     }
372 
373     /*-----------------------------------------------------------------------*/
374     /*------------------------ Internal jaxx methods ------------------------*/
375     /*-----------------------------------------------------------------------*/
376 
377     private void $completeSetup() {
378         allComponentsCreated = true;
379         if (log.isDebugEnabled()) {
380             log.debug(this);
381         }
382         // inline complete setup of $Table0
383         add(newRowKey, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
384         add(addRow, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
385         add($JScrollPane0, new GridBagConstraints(0, 1, 2, 1, 0.0, 1.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
386         addChildrenToTablePopup();
387         // inline complete setup of $JScrollPane0
388         $JScrollPane0.getViewport().add(gearUseFeatureTable);
389         
390         // apply 3 data bindings
391         JAXXUtil.applyDataBinding(this, $bindings.keySet());
392         
393         // apply 7 property setters
394         newRowKey.setBeanType(Caracteristic.class);
395         removeCaracteristicMenu.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.gearUseFeatureTable.action.removeCaracteristic.mnemonic"),'Z'));
396         removeCaracteristicMenu.setIcon(SwingUtil.createActionIcon("batch-delete"));
397         addRow.setIcon(SwingUtil.createActionIcon("add"));
398         gearUseFeatureTable.setSelectionBackground(null);
399         gearUseFeatureTable.setSelectionForeground(Color.BLACK);
400         gearUseFeatureTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
401     }
402 
403     private void $initialize() {
404         if (allComponentsCreated) {
405             return;
406         }
407         if (log.isDebugEnabled()) {
408             log.debug(this);
409         }
410         handler.beforeInit(this);
411         $objectMap.put("$Table0", $Table0);
412         createModel();
413         createTablePopup();
414         createRemoveCaracteristicMenu();
415         createNewRowKey();
416         createAddRow();
417         // inline creation of $JScrollPane0
418         $objectMap.put("$JScrollPane0", $JScrollPane0 = new JScrollPane());
419         
420         $JScrollPane0.setName("$JScrollPane0");
421         createGearUseFeatureTable();
422         // inline creation of $Table0
423         setName("$Table0");
424         
425         // registers 3 data bindings
426         $registerDefaultBindings();
427         $completeSetup();
428         handler.afterInit(this);
429     }
430 
431     private void $registerDefaultBindings() {
432         // register 3 data bindings
433         registerDataBinding(new DefaultJAXXBinding(this, BINDING_REMOVE_CARACTERISTIC_MENU_ENABLED, true) {
434         
435             @Override
436             public void applyDataBinding() {
437                 if (model != null) {
438                     model.addPropertyChangeListener("removeCaracteristicEnabled", this);
439                 }
440             }
441         
442             @Override
443             public void processDataBinding() {
444                 if (model != null) {
445                     removeCaracteristicMenu.setEnabled(model.isRemoveCaracteristicEnabled());
446                 }
447             }
448         
449             @Override
450             public void removeDataBinding() {
451                 if (model != null) {
452                     model.removePropertyChangeListener("removeCaracteristicEnabled", this);
453                 }
454             }
455         });
456         registerDataBinding(new DefaultJAXXBinding(this, BINDING_NEW_ROW_KEY_ENABLED, true) {
457         
458             @Override
459             public void applyDataBinding() {
460                 if (newRowKey != null) {
461                     newRowKey.addPropertyChangeListener("empty", this);
462                 }
463             }
464         
465             @Override
466             public void processDataBinding() {
467                 if (newRowKey != null) {
468                     newRowKey.setEnabled(!newRowKey.isEmpty());
469                 }
470             }
471         
472             @Override
473             public void removeDataBinding() {
474                 if (newRowKey != null) {
475                     newRowKey.removePropertyChangeListener("empty", this);
476                 }
477             }
478         });
479         registerDataBinding(new DefaultJAXXBinding(this, BINDING_ADD_ROW_ENABLED, true) {
480         
481             @Override
482             public void applyDataBinding() {
483                 if (newRowKey != null) {
484                     newRowKey.addPropertyChangeListener("selectedItem", this);
485                 }
486             }
487         
488             @Override
489             public void processDataBinding() {
490                 if (newRowKey != null) {
491                     addRow.setEnabled(newRowKey.getSelectedItem() != null);
492                 }
493             }
494         
495             @Override
496             public void removeDataBinding() {
497                 if (newRowKey != null) {
498                     newRowKey.removePropertyChangeListener("selectedItem", this);
499                 }
500             }
501         });
502     }
503 
504 }