View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.home.operation;
2   
3   /*-
4    * #%L
5    * Reef DB :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2022 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (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 Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  
27  import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
28  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
29  import fr.ifremer.quadrige3.ui.swing.plaf.WaitBlockingLayerUI;
30  import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
31  import fr.ifremer.reefdb.ui.swing.ReefDbHelpBroker;
32  import fr.ifremer.reefdb.ui.swing.ReefDbUIContext;
33  import fr.ifremer.reefdb.ui.swing.util.ReefDbUI;
34  import java.awt.BorderLayout;
35  import java.awt.Component;
36  import java.awt.Container;
37  import java.awt.FlowLayout;
38  import java.awt.LayoutManager;
39  import java.awt.event.ActionEvent;
40  import java.awt.event.ActionListener;
41  import java.awt.event.MouseEvent;
42  import java.awt.event.MouseListener;
43  import java.util.ArrayList;
44  import java.util.HashMap;
45  import java.util.List;
46  import java.util.Map;
47  import java.util.TreeMap;
48  import javax.swing.BorderFactory;
49  import javax.swing.JButton;
50  import javax.swing.JComboBox;
51  import javax.swing.JMenuItem;
52  import javax.swing.JPanel;
53  import javax.swing.JPopupMenu;
54  import javax.swing.JScrollPane;
55  import jaxx.runtime.JAXXBinding;
56  import jaxx.runtime.JAXXContext;
57  import jaxx.runtime.JAXXObject;
58  import jaxx.runtime.JAXXObjectDescriptor;
59  import jaxx.runtime.JAXXUtil;
60  import jaxx.runtime.SwingUtil;
61  import jaxx.runtime.binding.DefaultJAXXBinding;
62  import jaxx.runtime.context.DefaultJAXXContext;
63  import jaxx.runtime.swing.help.JAXXHelpUI;
64  import org.apache.commons.logging.Log;
65  import org.apache.commons.logging.LogFactory;
66  import static org.nuiton.i18n.I18n.t;
67  
68  public class OperationsTableUI extends JPanel implements JAXXHelpUI<ReefDbHelpBroker>, ReefDbUI<OperationsTableUIModel, OperationsTableUIHandler>, JAXXObject {
69  
70      /*-----------------------------------------------------------------------*/
71      /*------------------ Constants for all public bindings ------------------*/
72      /*-----------------------------------------------------------------------*/
73  
74      public static final String BINDING_EDIT_MESURE_PRELEVEMENT_ENABLED = "editMesurePrelevement.enabled";
75      public static final String BINDING_NEXT_BUTTON_ENABLED = "nextButton.enabled";
76      public static final String BINDING_PRELEVEMENTS_PANEL_DUPLIQUER_BOUTON_ENABLED = "prelevementsPanelDupliquerBouton.enabled";
77      public static final String BINDING_PRELEVEMENTS_PANEL_EDITER_COMBOBOX_ENABLED = "prelevementsPanelEditerCombobox.enabled";
78      public static final String BINDING_PRELEVEMENTS_PANEL_NOUVEAU_BOUTON_ENABLED = "prelevementsPanelNouveauBouton.enabled";
79      public static final String BINDING_PRELEVEMENTS_PANEL_SUPPRIMER_BOUTON_ENABLED = "prelevementsPanelSupprimerBouton.enabled";
80      public static final String BINDING_TABLE_BLOCK_LAYER_BLOCK = "tableBlockLayer.block";
81  
82      /*-----------------------------------------------------------------------*/
83      /*------------------------- Other static fields -------------------------*/
84      /*-----------------------------------------------------------------------*/
85  
86      private static final String $jaxxObjectDescriptor = "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";
87      private static final Log log = LogFactory.getLog(OperationsTableUI.class);
88      private static final long serialVersionUID = 1L;
89  
90      /*-----------------------------------------------------------------------*/
91      /*--------------------------- Internal states ---------------------------*/
92      /*-----------------------------------------------------------------------*/
93  
94      protected List<Object> $activeBindings = new ArrayList<Object>();
95      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
96      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
97      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
98      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
99      private boolean allComponentsCreated;
100     protected final JAXXContext delegateContext = new DefaultJAXXContext();
101 
102     /*-----------------------------------------------------------------------*/
103     /*------------------------ Protected components  ------------------------*/
104     /*-----------------------------------------------------------------------*/
105 
106     protected ReefDbHelpBroker broker;
107     protected JMenuItem editMesurePrelevement;
108     protected final OperationsTableUIHandler handler = createHandler();
109     protected JScrollPane homePrelevementsScrollPane;
110     protected OperationsTableUIModel model;
111     protected JButton nextButton;
112     protected SwingTable operationTable;
113     protected JButton prelevementEditerBouton;
114     protected JButton prelevementEditerMesuresBouton;
115     protected JButton prelevementEditerPhotosBouton;
116     protected OperationsTableUI prelevementsPanel = this;
117     protected JPanel prelevementsPanelButtons;
118     protected JButton prelevementsPanelDupliquerBouton;
119     protected JComboBox prelevementsPanelEditerCombobox;
120     protected JButton prelevementsPanelNouveauBouton;
121     protected JButton prelevementsPanelSupprimerBouton;
122     protected WaitBlockingLayerUI tableBlockLayer;
123     protected JPopupMenu tablePopup;
124 
125     /*-----------------------------------------------------------------------*/
126     /*------------------------- Private components  -------------------------*/
127     /*-----------------------------------------------------------------------*/
128 
129     private JPanel $JPanel0;
130     private JPanel $JPanel1;
131 
132     /*-----------------------------------------------------------------------*/
133     /*---------------------------- Constructors  ----------------------------*/
134     /*-----------------------------------------------------------------------*/
135 
136     public OperationsTableUI(ApplicationUI parentUI) {
137         ApplicationUIUtil.setParentUI(this, parentUI);
138             $initialize();
139     }
140 
141     public OperationsTableUI(LayoutManager param0, boolean param1) {
142         super(param0 ,param1);
143         $initialize();
144     }
145 
146     public OperationsTableUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
147         super(param1 ,param2);
148         JAXXUtil.initContext(this, parentContext);
149         $initialize();
150     }
151 
152     public OperationsTableUI(boolean param0) {
153         super(param0);
154         $initialize();
155     }
156 
157     public OperationsTableUI(JAXXContext parentContext, boolean param1) {
158         super(param1);
159         JAXXUtil.initContext(this, parentContext);
160         $initialize();
161     }
162 
163     public OperationsTableUI() {
164         $initialize();
165     }
166 
167     public OperationsTableUI(JAXXContext parentContext) {
168         JAXXUtil.initContext(this, parentContext);
169         $initialize();
170     }
171 
172     public OperationsTableUI(LayoutManager param0) {
173         super(param0);
174         $initialize();
175     }
176 
177     public OperationsTableUI(JAXXContext parentContext, LayoutManager param1) {
178         super(param1);
179         JAXXUtil.initContext(this, parentContext);
180         $initialize();
181     }
182 
183     /*-----------------------------------------------------------------------*/
184     /*--------------------------- Statics methods ---------------------------*/
185     /*-----------------------------------------------------------------------*/
186 
187     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
188         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
189     }
190 
191     /*-----------------------------------------------------------------------*/
192     /*---------------------- JAXXObject implementation ----------------------*/
193     /*-----------------------------------------------------------------------*/
194 
195     @Override
196     public void applyDataBinding(String $binding) {
197         if (allComponentsCreated && $bindings.containsKey($binding)) {
198             getDataBinding($binding).applyDataBinding();
199         }
200         processDataBinding($binding);
201     }
202 
203     @Override
204     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
205         super.firePropertyChange(propertyName, oldValue, newValue);
206     }
207 
208     @Override
209     public Map<String, Object> get$objectMap() {
210         return $objectMap;
211     }
212 
213     @Override
214     public JAXXBinding getDataBinding(String bindingId) {
215         return $bindings.get(bindingId);
216     }
217 
218     @Override
219     public JAXXBinding[] getDataBindings() {
220         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
221     }
222 
223     @Override
224     public Object getObjectById(String id) {
225         return $objectMap.get(id);
226     }
227 
228     @Override
229     public void processDataBinding(String $binding, boolean $force) {
230         if (!$force && $activeBindings.contains($binding)) { 
231             return;
232         }
233         $activeBindings.add($binding);
234         try {
235             if (allComponentsCreated && $bindings.containsKey($binding)) {
236                 getDataBinding($binding).processDataBinding();
237             }
238         } finally {
239             $activeBindings.remove($binding);
240         }
241     }
242 
243     @Override
244     public void processDataBinding(String $binding) {
245         processDataBinding($binding, false);
246     }
247 
248     @Override
249     public void registerDataBinding(JAXXBinding binding) {
250         $bindings.put(binding.getId(), binding);
251     }
252 
253     @Override
254     public void removeDataBinding(String $binding) {
255         if (allComponentsCreated && $bindings.containsKey($binding)) {
256             getDataBinding($binding).removeDataBinding();
257         }
258     }
259 
260     /*-----------------------------------------------------------------------*/
261     /*--------------------- JAXXContext implementation  ---------------------*/
262     /*-----------------------------------------------------------------------*/
263 
264     @Override
265     public <T> T getContextValue(Class<T> clazz) {
266         return delegateContext.getContextValue(clazz, null);
267     }
268 
269     @Override
270     public <T> T getContextValue(Class<T> clazz, String name) {
271         return delegateContext.getContextValue(clazz, name);
272     }
273 
274     @Override
275     public JAXXContext getDelegateContext() {
276         return delegateContext;
277     }
278 
279     @Override
280     public <O extends Container> O getParentContainer(Class<O> clazz) {
281         return SwingUtil.getParentContainer(this, clazz);
282     }
283 
284     @Override
285     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
286         return SwingUtil.getParentContainer(source, clazz);
287     }
288 
289     @Override
290     public <T> void removeContextValue(Class<T> clazz) {
291         delegateContext.removeContextValue(clazz, null);
292     }
293 
294     @Override
295     public <T> void removeContextValue(Class<T> clazz, String name) {
296         delegateContext.removeContextValue(clazz, name);
297     }
298 
299     @Override
300     public <T> void setContextValue(T o) {
301         delegateContext.setContextValue(o, null);
302     }
303 
304     @Override
305     public <T> void setContextValue(T o, String name) {
306         delegateContext.setContextValue(o, name);
307     }
308 
309     /*-----------------------------------------------------------------------*/
310     /*---------------------------- Event methods ----------------------------*/
311     /*-----------------------------------------------------------------------*/
312 
313     public void doActionPerformed__on__nextButton(ActionEvent event) {
314         if (log.isDebugEnabled()) {
315             log.debug(event);
316         }
317         handler.onNext();
318     }
319 
320     public void doActionPerformed__on__prelevementsPanelNouveauBouton(ActionEvent event) {
321         if (log.isDebugEnabled()) {
322             log.debug(event);
323         }
324         handler.addSamplingOperations();
325     }
326 
327     public void doActionPerformed__on__prelevementsPanelSupprimerBouton(ActionEvent event) {
328         if (log.isDebugEnabled()) {
329             log.debug(event);
330         }
331         handler.removeSamplingOperations();
332     }
333 
334     public void doMouseClicked__on__operationTable(MouseEvent event) {
335         if (log.isDebugEnabled()) {
336             log.debug(event);
337         }
338         handler.autoSelectRowInTable(event, tablePopup);
339     }
340 
341     /*-----------------------------------------------------------------------*/
342     /*----------------------- Public acessor methods  -----------------------*/
343     /*-----------------------------------------------------------------------*/
344 
345     public ReefDbHelpBroker getBroker() {
346         return broker;
347     }
348 
349     public JMenuItem getEditMesurePrelevement() {
350         return editMesurePrelevement;
351     }
352 
353     public OperationsTableUIHandler getHandler() {
354         return handler;
355     }
356 
357     public JScrollPane getHomePrelevementsScrollPane() {
358         return homePrelevementsScrollPane;
359     }
360 
361     public OperationsTableUIModel getModel() {
362         return model;
363     }
364 
365     public JButton getNextButton() {
366         return nextButton;
367     }
368 
369     public SwingTable getOperationTable() {
370         return operationTable;
371     }
372 
373     public JButton getPrelevementEditerBouton() {
374         return prelevementEditerBouton;
375     }
376 
377     public JButton getPrelevementEditerMesuresBouton() {
378         return prelevementEditerMesuresBouton;
379     }
380 
381     public JButton getPrelevementEditerPhotosBouton() {
382         return prelevementEditerPhotosBouton;
383     }
384 
385     public JPanel getPrelevementsPanelButtons() {
386         return prelevementsPanelButtons;
387     }
388 
389     public JButton getPrelevementsPanelDupliquerBouton() {
390         return prelevementsPanelDupliquerBouton;
391     }
392 
393     public JComboBox getPrelevementsPanelEditerCombobox() {
394         return prelevementsPanelEditerCombobox;
395     }
396 
397     public JButton getPrelevementsPanelNouveauBouton() {
398         return prelevementsPanelNouveauBouton;
399     }
400 
401     public JButton getPrelevementsPanelSupprimerBouton() {
402         return prelevementsPanelSupprimerBouton;
403     }
404 
405     public WaitBlockingLayerUI getTableBlockLayer() {
406         return tableBlockLayer;
407     }
408 
409     public JPopupMenu getTablePopup() {
410         return tablePopup;
411     }
412 
413     /*-----------------------------------------------------------------------*/
414     /*---------------------------- Other methods ----------------------------*/
415     /*-----------------------------------------------------------------------*/
416 
417     @Override
418     public void registerHelpId(ReefDbHelpBroker broker, Component component, String helpId) {
419         broker.installUI(component, helpId);
420     }
421 
422     @Override
423     public void showHelp(String helpId) {
424         getBroker().showHelp(this, helpId);
425     }
426 
427     /*-----------------------------------------------------------------------*/
428     /*--------------------- Protected acessors methods  ---------------------*/
429     /*-----------------------------------------------------------------------*/
430 
431     protected JPanel get$JPanel0() {
432         return $JPanel0;
433     }
434 
435     protected JPanel get$JPanel1() {
436         return $JPanel1;
437     }
438 
439     /*-----------------------------------------------------------------------*/
440     /*--------------------- Components creation methods ---------------------*/
441     /*-----------------------------------------------------------------------*/
442 
443     protected void addChildrenToHomePrelevementsScrollPane() {
444         if (!allComponentsCreated) {
445             return;
446         }
447         homePrelevementsScrollPane.getViewport().add(operationTable);
448     }
449 
450     protected void addChildrenToPrelevementsPanel() {
451         if (!allComponentsCreated) {
452             return;
453         }
454         add(SwingUtil.boxComponentWithJxLayer(homePrelevementsScrollPane));
455         add(prelevementsPanelButtons, BorderLayout.PAGE_END);
456     }
457 
458     protected void addChildrenToPrelevementsPanelButtons() {
459         if (!allComponentsCreated) {
460             return;
461         }
462         prelevementsPanelButtons.add($JPanel0, BorderLayout.LINE_START);
463         prelevementsPanelButtons.add($JPanel1, BorderLayout.LINE_END);
464     }
465 
466     protected void addChildrenToTablePopup() {
467         if (!allComponentsCreated) {
468             return;
469         }
470         tablePopup.add(editMesurePrelevement);
471     }
472 
473     protected void createBroker() {
474         $objectMap.put("broker", broker = new ReefDbHelpBroker("reefdb.home.help"));
475     }
476 
477     protected void createEditMesurePrelevement() {
478         $objectMap.put("editMesurePrelevement", editMesurePrelevement = new JMenuItem());
479         
480         editMesurePrelevement.setName("editMesurePrelevement");
481         editMesurePrelevement.setText(t("reefdb.home.samplingOperation.menu.edit.measurement"));
482         editMesurePrelevement.setToolTipText(t("reefdb.home.samplingOperation.menu.edit.measurement.tip"));
483         editMesurePrelevement.putClientProperty("help", "reefdb.main.menu.action.home.help");
484         editMesurePrelevement.putClientProperty("applicationAction", EditOperationMeasurementsAction.class);
485     }
486 
487     protected OperationsTableUIHandler createHandler() {
488         return new OperationsTableUIHandler();
489     }
490 
491     protected void createHomePrelevementsScrollPane() {
492         $objectMap.put("homePrelevementsScrollPane", homePrelevementsScrollPane = new JScrollPane());
493         
494         homePrelevementsScrollPane.setName("homePrelevementsScrollPane");
495     }
496 
497     protected void createModel() {
498         $objectMap.put("model", model = getContextValue(OperationsTableUIModel.class));
499     }
500 
501     protected void createNextButton() {
502         $objectMap.put("nextButton", nextButton = new JButton());
503         
504         nextButton.setName("nextButton");
505         nextButton.setText(t("reefdb.common.next"));
506         nextButton.setToolTipText(t("reefdb.home.samplingOperation.next.tip"));
507         nextButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__nextButton"));
508         nextButton.putClientProperty("help", "reefdb.main.menu.action.home.help");
509     }
510 
511     protected void createOperationTable() {
512         $objectMap.put("operationTable", operationTable = new SwingTable());
513         
514         operationTable.setName("operationTable");
515         operationTable.addMouseListener(JAXXUtil.getEventListener(MouseListener.class, "mouseClicked", this, "doMouseClicked__on__operationTable"));
516     }
517 
518     protected void createPrelevementEditerBouton() {
519         $objectMap.put("prelevementEditerBouton", prelevementEditerBouton = new JButton());
520         
521         prelevementEditerBouton.setName("prelevementEditerBouton");
522         prelevementEditerBouton.setVisible(false);
523         prelevementEditerBouton.setText(t("reefdb.common.edit"));
524     }
525 
526     protected void createPrelevementEditerMesuresBouton() {
527         $objectMap.put("prelevementEditerMesuresBouton", prelevementEditerMesuresBouton = new JButton());
528         
529         prelevementEditerMesuresBouton.setName("prelevementEditerMesuresBouton");
530         prelevementEditerMesuresBouton.setVisible(false);
531         prelevementEditerMesuresBouton.setText(t("reefdb.home.samplingOperation.edit.measurement"));
532         prelevementEditerMesuresBouton.setToolTipText(t("reefdb.home.samplingOperation.edit.measurement.tip"));
533         prelevementEditerMesuresBouton.putClientProperty("applicationAction", EditOperationMeasurementsAction.class);
534     }
535 
536     protected void createPrelevementEditerPhotosBouton() {
537         $objectMap.put("prelevementEditerPhotosBouton", prelevementEditerPhotosBouton = new JButton());
538         
539         prelevementEditerPhotosBouton.setName("prelevementEditerPhotosBouton");
540         prelevementEditerPhotosBouton.setVisible(false);
541         prelevementEditerPhotosBouton.setText(t("reefdb.home.samplingOperation.edit.photo"));
542         prelevementEditerPhotosBouton.setToolTipText(t("reefdb.home.samplingOperation.edit.photo.tip"));
543         prelevementEditerPhotosBouton.putClientProperty("applicationAction", EditOperationPhotosAction.class);
544     }
545 
546     protected void createPrelevementsPanelButtons() {
547         $objectMap.put("prelevementsPanelButtons", prelevementsPanelButtons = new JPanel());
548         
549         prelevementsPanelButtons.setName("prelevementsPanelButtons");
550         prelevementsPanelButtons.setLayout(new BorderLayout());
551     }
552 
553     protected void createPrelevementsPanelDupliquerBouton() {
554         $objectMap.put("prelevementsPanelDupliquerBouton", prelevementsPanelDupliquerBouton = new JButton());
555         
556         prelevementsPanelDupliquerBouton.setName("prelevementsPanelDupliquerBouton");
557         prelevementsPanelDupliquerBouton.setText(t("reefdb.action.duplicate.label"));
558         prelevementsPanelDupliquerBouton.setToolTipText(t("reefdb.action.duplicate.tip"));
559         prelevementsPanelDupliquerBouton.putClientProperty("applicationAction", DuplicateOperationAction.class);
560     }
561 
562     protected void createPrelevementsPanelEditerCombobox() {
563         $objectMap.put("prelevementsPanelEditerCombobox", prelevementsPanelEditerCombobox = new JComboBox());
564         
565         prelevementsPanelEditerCombobox.setName("prelevementsPanelEditerCombobox");
566     }
567 
568     protected void createPrelevementsPanelNouveauBouton() {
569         $objectMap.put("prelevementsPanelNouveauBouton", prelevementsPanelNouveauBouton = new JButton());
570         
571         prelevementsPanelNouveauBouton.setName("prelevementsPanelNouveauBouton");
572         prelevementsPanelNouveauBouton.setText(t("reefdb.common.new"));
573         prelevementsPanelNouveauBouton.setToolTipText(t("reefdb.home.samplingOperation.new.tip"));
574         prelevementsPanelNouveauBouton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__prelevementsPanelNouveauBouton"));
575     }
576 
577     protected void createPrelevementsPanelSupprimerBouton() {
578         $objectMap.put("prelevementsPanelSupprimerBouton", prelevementsPanelSupprimerBouton = new JButton());
579         
580         prelevementsPanelSupprimerBouton.setName("prelevementsPanelSupprimerBouton");
581         prelevementsPanelSupprimerBouton.setText(t("reefdb.common.delete"));
582         prelevementsPanelSupprimerBouton.setToolTipText(t("reefdb.common.delete"));
583         prelevementsPanelSupprimerBouton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__prelevementsPanelSupprimerBouton"));
584     }
585 
586     protected void createTableBlockLayer() {
587         $objectMap.put("tableBlockLayer", tableBlockLayer = new WaitBlockingLayerUI());
588     }
589 
590     protected void createTablePopup() {
591         $objectMap.put("tablePopup", tablePopup = new JPopupMenu());
592         
593         tablePopup.setName("tablePopup");
594     }
595 
596     /*-----------------------------------------------------------------------*/
597     /*------------------------ Internal jaxx methods ------------------------*/
598     /*-----------------------------------------------------------------------*/
599 
600     private void $completeSetup() {
601         allComponentsCreated = true;
602         if (log.isDebugEnabled()) {
603             log.debug(this);
604         }
605         addChildrenToPrelevementsPanel();
606         addChildrenToHomePrelevementsScrollPane();
607         addChildrenToTablePopup();
608         addChildrenToPrelevementsPanelButtons();
609         // inline complete setup of $JPanel0
610         $JPanel0.add(prelevementsPanelNouveauBouton);
611         $JPanel0.add(prelevementsPanelDupliquerBouton);
612         $JPanel0.add(prelevementsPanelEditerCombobox);
613         $JPanel0.add(prelevementEditerBouton);
614         $JPanel0.add(prelevementEditerMesuresBouton);
615         $JPanel0.add(prelevementEditerPhotosBouton);
616         $JPanel0.add(prelevementsPanelSupprimerBouton);
617         // inline complete setup of $JPanel1
618         $JPanel1.add(nextButton);
619         
620         // apply 7 data bindings
621         JAXXUtil.applyDataBinding(this, $bindings.keySet());
622         
623         // apply 20 property setters
624         prelevementsPanelNouveauBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
625         prelevementsPanelDupliquerBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
626         prelevementsPanelEditerCombobox.setAlignmentX(Component.CENTER_ALIGNMENT);
627         prelevementsPanelSupprimerBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
628         nextButton.setAlignmentX(Component.CENTER_ALIGNMENT);
629         setBorder(BorderFactory.createTitledBorder(t("reefdb.home.samplingOperation.title")));
630         tableBlockLayer.setBlockingColor(handler.getConfig().getColorBlockingLayer());
631         editMesurePrelevement.setIcon(SwingUtil.createActionIcon("edit"));
632         prelevementsPanelNouveauBouton.setIcon(SwingUtil.createActionIcon("add"));
633         prelevementsPanelDupliquerBouton.setIcon(SwingUtil.createActionIcon("copy"));
634         prelevementsPanelEditerCombobox.setModel(handler.newActionComboBoxModel(prelevementEditerBouton, prelevementEditerMesuresBouton, prelevementEditerPhotosBouton));
635         prelevementEditerBouton.setIcon(SwingUtil.createActionIcon("edit"));
636         prelevementEditerMesuresBouton.setIcon(SwingUtil.createActionIcon("edit"));
637         prelevementEditerPhotosBouton.setIcon(SwingUtil.createActionIcon("edit"));
638         prelevementsPanelSupprimerBouton.setIcon(SwingUtil.createActionIcon("delete"));
639         nextButton.setIcon(SwingUtil.createActionIcon("next"));
640         // late initializer
641         // help broker setup
642         ReefDbHelpBroker _broker = getBroker();
643         registerHelpId(_broker, editMesurePrelevement, "reefdb.main.menu.action.home.help");
644         registerHelpId(_broker, nextButton, "reefdb.main.menu.action.home.help");
645         _broker.prepareUI(this);
646     }
647 
648     private void $initialize() {
649         if (allComponentsCreated) {
650             return;
651         }
652         if (log.isDebugEnabled()) {
653             log.debug(this);
654         }
655         handler.beforeInit(this);
656         $objectMap.put("prelevementsPanel", prelevementsPanel);
657         createModel();
658         createBroker();
659         createTableBlockLayer();
660         createHomePrelevementsScrollPane();
661         createTablePopup();
662         createEditMesurePrelevement();
663         createOperationTable();
664         createPrelevementsPanelButtons();
665         // inline creation of $JPanel0
666         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
667         
668         $JPanel0.setName("$JPanel0");
669         $JPanel0.setLayout(new FlowLayout());
670         createPrelevementsPanelNouveauBouton();
671         createPrelevementsPanelDupliquerBouton();
672         createPrelevementsPanelEditerCombobox();
673         createPrelevementEditerBouton();
674         createPrelevementEditerMesuresBouton();
675         createPrelevementEditerPhotosBouton();
676         createPrelevementsPanelSupprimerBouton();
677         // inline creation of $JPanel1
678         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
679         
680         $JPanel1.setName("$JPanel1");
681         $JPanel1.setLayout(new FlowLayout());
682         createNextButton();
683         // inline creation of prelevementsPanel
684         setName("prelevementsPanel");
685         setLayout(new BorderLayout());
686         prelevementsPanel.putClientProperty("panelType", ReefDbUI.EDITION_PANEL_TYPE);
687         
688         // registers 7 data bindings
689         $registerDefaultBindings();
690         $completeSetup();
691         handler.afterInit(this);
692     }
693 
694     private void $registerDefaultBindings() {
695         // register 7 data bindings
696         registerDataBinding(new DefaultJAXXBinding(this, BINDING_TABLE_BLOCK_LAYER_BLOCK, true) {
697         
698             @Override
699             public void applyDataBinding() {
700                 if (model != null) {
701                     model.addPropertyChangeListener("loading", this);
702                 }
703             }
704         
705             @Override
706             public void processDataBinding() {
707                 if (model != null) {
708                     tableBlockLayer.setBlock(model.isLoading());
709                 }
710             }
711         
712             @Override
713             public void removeDataBinding() {
714                 if (model != null) {
715                     model.removePropertyChangeListener("loading", this);
716                 }
717             }
718         });
719         registerDataBinding(new DefaultJAXXBinding(this, BINDING_EDIT_MESURE_PRELEVEMENT_ENABLED, true) {
720         
721             @Override
722             public void applyDataBinding() {
723                 if (model != null) {
724                     model.addPropertyChangeListener("singleSelectedRow", this);
725                 }
726             }
727         
728             @Override
729             public void processDataBinding() {
730                 if (model != null) {
731                     editMesurePrelevement.setEnabled(model.getSingleSelectedRow() != null);
732                 }
733             }
734         
735             @Override
736             public void removeDataBinding() {
737                 if (model != null) {
738                     model.removePropertyChangeListener("singleSelectedRow", this);
739                 }
740             }
741         });
742         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PRELEVEMENTS_PANEL_NOUVEAU_BOUTON_ENABLED, true) {
743         
744             @Override
745             public void applyDataBinding() {
746                 if (model != null) {
747                     model.addPropertyChangeListener("surveyEditable", this);
748                 }
749             }
750         
751             @Override
752             public void processDataBinding() {
753                 if (model != null) {
754                     prelevementsPanelNouveauBouton.setEnabled(model.isSurveyEditable());
755                 }
756             }
757         
758             @Override
759             public void removeDataBinding() {
760                 if (model != null) {
761                     model.removePropertyChangeListener("surveyEditable", this);
762                 }
763             }
764         });
765         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PRELEVEMENTS_PANEL_DUPLIQUER_BOUTON_ENABLED, true, true) {
766         
767             @Override
768             public void applyDataBinding() {
769                 if (model != null) {
770                     model.addPropertyChangeListener("selectedRows", this);
771                 }
772                 if (model != null) {
773                     model.addPropertyChangeListener("surveyEditable", this);
774                 }
775             }
776         
777             @Override
778             public void processDataBinding() {
779                 if (model != null && model.getSelectedRows() != null) {
780                     prelevementsPanelDupliquerBouton.setEnabled(model.getSelectedRows().size() == 1 && model.isSurveyEditable());
781                 }
782             }
783         
784             @Override
785             public void removeDataBinding() {
786                 if (model != null) {
787                     model.removePropertyChangeListener("selectedRows", this);
788                 }
789                 if (model != null) {
790                     model.removePropertyChangeListener("surveyEditable", this);
791                 }
792             }
793         });
794         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PRELEVEMENTS_PANEL_EDITER_COMBOBOX_ENABLED, true) {
795         
796             @Override
797             public void applyDataBinding() {
798                 if (model != null) {
799                     model.addPropertyChangeListener("selectedRows", this);
800                 }
801             }
802         
803             @Override
804             public void processDataBinding() {
805                 if (model != null && model.getSelectedRows() != null) {
806                     prelevementsPanelEditerCombobox.setEnabled(model.getSelectedRows().size() == 1);
807                 }
808             }
809         
810             @Override
811             public void removeDataBinding() {
812                 if (model != null) {
813                     model.removePropertyChangeListener("selectedRows", this);
814                 }
815             }
816         });
817         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PRELEVEMENTS_PANEL_SUPPRIMER_BOUTON_ENABLED, true, true) {
818         
819             @Override
820             public void applyDataBinding() {
821                 if (model != null) {
822                     model.addPropertyChangeListener("selectedRows", this);
823                 }
824                 if (model != null) {
825                     model.addPropertyChangeListener("surveyEditable", this);
826                 }
827             }
828         
829             @Override
830             public void processDataBinding() {
831                 if (model != null && model.getSelectedRows() != null) {
832                     prelevementsPanelSupprimerBouton.setEnabled(!model.getSelectedRows().isEmpty() && model.isSurveyEditable());
833                 }
834             }
835         
836             @Override
837             public void removeDataBinding() {
838                 if (model != null) {
839                     model.removePropertyChangeListener("selectedRows", this);
840                 }
841                 if (model != null) {
842                     model.removePropertyChangeListener("surveyEditable", this);
843                 }
844             }
845         });
846         registerDataBinding(new DefaultJAXXBinding(this, BINDING_NEXT_BUTTON_ENABLED, true) {
847         
848             @Override
849             public void applyDataBinding() {
850                 if (model != null) {
851                     model.addPropertyChangeListener("survey", this);
852                 }
853             }
854         
855             @Override
856             public void processDataBinding() {
857                 if (model != null) {
858                     nextButton.setEnabled(model.getSurvey() != null);
859                 }
860             }
861         
862             @Override
863             public void removeDataBinding() {
864                 if (model != null) {
865                     model.removePropertyChangeListener("survey", this);
866                 }
867             }
868         });
869     }
870 
871 }