View Javadoc
1   package fr.ifremer.dali.ui.swing.content.extraction.config;
2   
3   import fr.ifremer.dali.ui.swing.DaliHelpBroker;
4   import fr.ifremer.dali.ui.swing.DaliUIContext;
5   import fr.ifremer.dali.ui.swing.util.DaliUI;
6   import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
7   import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
8   import java.awt.BorderLayout;
9   import java.awt.Component;
10  import java.awt.Container;
11  import java.awt.GridBagConstraints;
12  import java.awt.Insets;
13  import java.awt.event.ActionEvent;
14  import java.awt.event.ActionListener;
15  import java.awt.event.ItemEvent;
16  import java.awt.event.ItemListener;
17  import java.util.ArrayList;
18  import java.util.HashMap;
19  import java.util.List;
20  import java.util.Map;
21  import java.util.TreeMap;
22  import javax.swing.BorderFactory;
23  import javax.swing.JButton;
24  import javax.swing.JCheckBox;
25  import javax.swing.JLabel;
26  import javax.swing.JTextField;
27  import jaxx.runtime.JAXXBinding;
28  import jaxx.runtime.JAXXContext;
29  import jaxx.runtime.JAXXObject;
30  import jaxx.runtime.JAXXObjectDescriptor;
31  import jaxx.runtime.JAXXUtil;
32  import jaxx.runtime.SwingUtil;
33  import jaxx.runtime.binding.DefaultJAXXBinding;
34  import jaxx.runtime.context.DefaultJAXXContext;
35  import jaxx.runtime.swing.Table;
36  import jaxx.runtime.swing.help.JAXXHelpUI;
37  import org.apache.commons.logging.Log;
38  import org.apache.commons.logging.LogFactory;
39  import static org.nuiton.i18n.I18n.t;
40  
41  public class ExtractionConfigUI extends Table implements JAXXHelpUI<DaliHelpBroker>, DaliUI<ExtractionConfigUIModel, ExtractionConfigUIHandler>, JAXXObject {
42  
43      /*-----------------------------------------------------------------------*/
44      /*------------------ Constants for all public bindings ------------------*/
45      /*-----------------------------------------------------------------------*/
46  
47      public static final String BINDING_FILL_ZERO_CHECK_BOX_ENABLED = "fillZeroCheckBox.enabled";
48      public static final String BINDING_FILL_ZERO_CHECK_BOX_SELECTED = "fillZeroCheckBox.selected";
49      public static final String BINDING_PMFM_PRESET_BUTTON_ENABLED = "pmfmPresetButton.enabled";
50  
51      /*-----------------------------------------------------------------------*/
52      /*------------------------- Other static fields -------------------------*/
53      /*-----------------------------------------------------------------------*/
54  
55      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1UyW4TQRCtmNjZWBMSBQECAojkwPgDgiBksUhkFpEgRVhCtD3tuKE93fSUyUQRiE/gE+DOBYkbJ8SBMwcuiF9AiANXRHWP7YnjCbEQPozG1f1evaqpem++QzY0cO4RiyLPNAIUde6tXF9fv11+xCu4yMOKERqVgfjXl4FMCUb8djxEOF8qWni+Cc8vqLpWAQ92oGeLMBziluRhjXNEON2JqIRhfrV9PBvphmmxtkWlsb76+SPz0n/xOgMQaVI3SKWc3Q+VVNJfhIzwEUYp01OWlyzYIBlGBBuk95CNLUgWhrdYnT+B5zBQhJxmhsgQpnov2XE4fKQpF4/QsAoKFSyooCo27i0jLFWNJ6qG17nxfCaF1xBeuEk6vIoKkGi9BGVDBPOWuni0dmlyCNm68rlEWPkvvDctWUKeKxv1mBuES3uyL9K/G4SZdzcT6BFdr9bvGB5yLLKyVThquxw1YSsuaO8OtSFjCWSNxBYEl/TFJjpg7YNO6NEEOt9ApIphrAMXRztBh6pCyvvcqLaW47tYWxcWarzyeF5FCOMdrK14E2bgZMdE0qx7yawnw9hXgqxpUBhhstS9HnfpKF6MyV2LYQnd6e+JsS/vv70r7NyG8dSrO5aZplQbpel7Cpv6SLwKDRQyf5Pp2RIMhVySE7hNP5UibLV5TOIo3zEL9yzcu8HCGlFkB75++Djx8PMByBRgWCrmF5i9vwxDWKOPU1PSj/S1Oafo4OYgPY9abXbQlPHtoC1tz7u3GLjlVQxnyNcESu7HJ9M4PeVGsHue0V6bmpl5FlHvTqX0rl1AeejTr7HVt3Ot/vVRPSf2vJ70MHsfciKQIuDOT5pWkeofIzrkDV8llpBmEpDqErq5RhfdcyatYf1IMISTe3TCrkPUsOjLrjr7lofurewh0wAPWJm6T1ZTZTLkabRpm7sf9QGE4Vj0snUo6Oe+oIpGUCm5JvSaq+/CX+rzLIC+ud6pcXJ7g6NzsekZT4RLcXzajkS37C7X6L3xZ/YQ1nKMtHSdfrNfrgzSVrsBtHUd33Y+TyUVmiRU078XvtvYeig8J9mWoi7B4Ss+Q3a2LAKfTPBqF3+ffQ730kpRiS35QTrHCeL4AxKwV021CAAA";
56      private static final Log log = LogFactory.getLog(ExtractionConfigUI.class);
57      private static final long serialVersionUID = 1L;
58  
59      /*-----------------------------------------------------------------------*/
60      /*--------------------------- Internal states ---------------------------*/
61      /*-----------------------------------------------------------------------*/
62  
63      protected List<Object> $activeBindings = new ArrayList<Object>();
64      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
65      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
66      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
67      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
68      private boolean allComponentsCreated;
69      protected final JAXXContext delegateContext = new DefaultJAXXContext();
70  
71      /*-----------------------------------------------------------------------*/
72      /*------------------------ Protected components  ------------------------*/
73      /*-----------------------------------------------------------------------*/
74  
75      protected DaliHelpBroker broker;
76      protected ExtractionConfigUI extractionConfigUI = this;
77      protected JCheckBox fillZeroCheckBox;
78      protected JLabel fillZeroLabel;
79      protected final ExtractionConfigUIHandler handler = createHandler();
80      protected ExtractionConfigUIModel model;
81      protected JButton pmfmPresetButton;
82      protected JLabel pmfmPresetLabel;
83      protected JTextField pmfmPresetTextField;
84  
85      /*-----------------------------------------------------------------------*/
86      /*---------------------------- Constructors  ----------------------------*/
87      /*-----------------------------------------------------------------------*/
88  
89      public ExtractionConfigUI(ApplicationUI parentUI) {
90          ApplicationUIUtil.setParentUI(this, parentUI);
91              $initialize();
92      }
93  
94      public ExtractionConfigUI() {
95          $initialize();
96      }
97  
98      public ExtractionConfigUI(JAXXContext parentContext) {
99          JAXXUtil.initContext(this, parentContext);
100         $initialize();
101     }
102 
103     /*-----------------------------------------------------------------------*/
104     /*--------------------------- Statics methods ---------------------------*/
105     /*-----------------------------------------------------------------------*/
106 
107     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
108         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
109     }
110 
111     /*-----------------------------------------------------------------------*/
112     /*---------------------- JAXXObject implementation ----------------------*/
113     /*-----------------------------------------------------------------------*/
114 
115     @Override
116     public void applyDataBinding(String $binding) {
117         if (allComponentsCreated && $bindings.containsKey($binding)) {
118             getDataBinding($binding).applyDataBinding();
119         }
120         processDataBinding($binding);
121     }
122 
123     @Override
124     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
125         super.firePropertyChange(propertyName, oldValue, newValue);
126     }
127 
128     @Override
129     public Map<String, Object> get$objectMap() {
130         return $objectMap;
131     }
132 
133     @Override
134     public JAXXBinding getDataBinding(String bindingId) {
135         return $bindings.get(bindingId);
136     }
137 
138     @Override
139     public JAXXBinding[] getDataBindings() {
140         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
141     }
142 
143     @Override
144     public Object getObjectById(String id) {
145         return $objectMap.get(id);
146     }
147 
148     @Override
149     public void processDataBinding(String $binding, boolean $force) {
150         if (!$force && $activeBindings.contains($binding)) { 
151             return;
152         }
153         $activeBindings.add($binding);
154         try {
155             if (allComponentsCreated && $bindings.containsKey($binding)) {
156                 getDataBinding($binding).processDataBinding();
157             }
158         } finally {
159             $activeBindings.remove($binding);
160         }
161     }
162 
163     @Override
164     public void processDataBinding(String $binding) {
165         processDataBinding($binding, false);
166     }
167 
168     @Override
169     public void registerDataBinding(JAXXBinding binding) {
170         $bindings.put(binding.getId(), binding);
171     }
172 
173     @Override
174     public void removeDataBinding(String $binding) {
175         if (allComponentsCreated && $bindings.containsKey($binding)) {
176             getDataBinding($binding).removeDataBinding();
177         }
178     }
179 
180     /*-----------------------------------------------------------------------*/
181     /*--------------------- JAXXContext implementation  ---------------------*/
182     /*-----------------------------------------------------------------------*/
183 
184     @Override
185     public <T> T getContextValue(Class<T> clazz) {
186         return delegateContext.getContextValue(clazz, null);
187     }
188 
189     @Override
190     public <T> T getContextValue(Class<T> clazz, String name) {
191         return delegateContext.getContextValue(clazz, name);
192     }
193 
194     @Override
195     public JAXXContext getDelegateContext() {
196         return delegateContext;
197     }
198 
199     @Override
200     public <O extends Container> O getParentContainer(Class<O> clazz) {
201         return SwingUtil.getParentContainer(this, clazz);
202     }
203 
204     @Override
205     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
206         return SwingUtil.getParentContainer(source, clazz);
207     }
208 
209     @Override
210     public <T> void removeContextValue(Class<T> clazz) {
211         delegateContext.removeContextValue(clazz, null);
212     }
213 
214     @Override
215     public <T> void removeContextValue(Class<T> clazz, String name) {
216         delegateContext.removeContextValue(clazz, name);
217     }
218 
219     @Override
220     public <T> void setContextValue(T o) {
221         delegateContext.setContextValue(o, null);
222     }
223 
224     @Override
225     public <T> void setContextValue(T o, String name) {
226         delegateContext.setContextValue(o, name);
227     }
228 
229     /*-----------------------------------------------------------------------*/
230     /*---------------------------- Event methods ----------------------------*/
231     /*-----------------------------------------------------------------------*/
232 
233     public void doActionPerformed__on__pmfmPresetButton(ActionEvent event) {
234         if (log.isDebugEnabled()) {
235             log.debug(event);
236         }
237         handler.openConfig();
238     }
239 
240     public void doItemStateChanged__on__fillZeroCheckBox(ItemEvent event) {
241         if (log.isDebugEnabled()) {
242             log.debug(event);
243         }
244         handler.setBoolean(event, ExtractionConfigUIModel.PROPERTY_FILL_ZERO);
245     }
246 
247     /*-----------------------------------------------------------------------*/
248     /*----------------------- Public acessor methods  -----------------------*/
249     /*-----------------------------------------------------------------------*/
250 
251     public DaliHelpBroker getBroker() {
252         return broker;
253     }
254 
255     public JCheckBox getFillZeroCheckBox() {
256         return fillZeroCheckBox;
257     }
258 
259     public JLabel getFillZeroLabel() {
260         return fillZeroLabel;
261     }
262 
263     public ExtractionConfigUIHandler getHandler() {
264         return handler;
265     }
266 
267     public ExtractionConfigUIModel getModel() {
268         return model;
269     }
270 
271     public JButton getPmfmPresetButton() {
272         return pmfmPresetButton;
273     }
274 
275     public JLabel getPmfmPresetLabel() {
276         return pmfmPresetLabel;
277     }
278 
279     public JTextField getPmfmPresetTextField() {
280         return pmfmPresetTextField;
281     }
282 
283     /*-----------------------------------------------------------------------*/
284     /*---------------------------- Other methods ----------------------------*/
285     /*-----------------------------------------------------------------------*/
286 
287     @Override
288     public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
289         broker.installUI(component, helpId);
290     }
291 
292     @Override
293     public void showHelp(String helpId) {
294         getBroker().showHelp(this, helpId);
295     }
296 
297     /*-----------------------------------------------------------------------*/
298     /*--------------------- Components creation methods ---------------------*/
299     /*-----------------------------------------------------------------------*/
300 
301     protected void addChildrenToExtractionConfigUI() {
302         if (!allComponentsCreated) {
303             return;
304         }
305         add(pmfmPresetLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
306         add(pmfmPresetTextField, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
307         add(pmfmPresetButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
308         add(fillZeroLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
309         add(fillZeroCheckBox, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
310     }
311 
312     protected void createBroker() {
313         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
314     }
315 
316     protected void createFillZeroCheckBox() {
317         $objectMap.put("fillZeroCheckBox", fillZeroCheckBox = new JCheckBox());
318         
319         fillZeroCheckBox.setName("fillZeroCheckBox");
320         fillZeroCheckBox.addItemListener(JAXXUtil.getEventListener(ItemListener.class, "itemStateChanged", this, "doItemStateChanged__on__fillZeroCheckBox"));
321     }
322 
323     protected void createFillZeroLabel() {
324         $objectMap.put("fillZeroLabel", fillZeroLabel = new JLabel());
325         
326         fillZeroLabel.setName("fillZeroLabel");
327         fillZeroLabel.setText(t("dali.extraction.config.fillZero"));
328     }
329 
330     protected ExtractionConfigUIHandler createHandler() {
331         return new ExtractionConfigUIHandler();
332     }
333 
334     protected void createModel() {
335         $objectMap.put("model", model = getContextValue(ExtractionConfigUIModel.class));
336     }
337 
338     protected void createPmfmPresetButton() {
339         $objectMap.put("pmfmPresetButton", pmfmPresetButton = new JButton());
340         
341         pmfmPresetButton.setName("pmfmPresetButton");
342         pmfmPresetButton.setToolTipText(t("dali.extraction.config.pmfm.edit.tip"));
343         pmfmPresetButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__pmfmPresetButton"));
344     }
345 
346     protected void createPmfmPresetLabel() {
347         $objectMap.put("pmfmPresetLabel", pmfmPresetLabel = new JLabel());
348         
349         pmfmPresetLabel.setName("pmfmPresetLabel");
350         pmfmPresetLabel.setText(t("dali.extraction.config.pmfm"));
351     }
352 
353     protected void createPmfmPresetTextField() {
354         $objectMap.put("pmfmPresetTextField", pmfmPresetTextField = new JTextField());
355         
356         pmfmPresetTextField.setName("pmfmPresetTextField");
357         pmfmPresetTextField.setColumns(15);
358         pmfmPresetTextField.setEnabled(false);
359     }
360 
361     /*-----------------------------------------------------------------------*/
362     /*------------------------ Internal jaxx methods ------------------------*/
363     /*-----------------------------------------------------------------------*/
364 
365     private void $completeSetup() {
366         allComponentsCreated = true;
367         if (log.isDebugEnabled()) {
368             log.debug(this);
369         }
370         addChildrenToExtractionConfigUI();
371         
372         // apply 3 data bindings
373         JAXXUtil.applyDataBinding(this, $bindings.keySet());
374         
375         // apply 3 property setters
376         setBorder(BorderFactory.createTitledBorder(t("dali.extraction.config.title")));
377         pmfmPresetButton.setIcon(SwingUtil.createActionIcon("edit"));
378     }
379 
380     private void $initialize() {
381         if (allComponentsCreated) {
382             return;
383         }
384         if (log.isDebugEnabled()) {
385             log.debug(this);
386         }
387         handler.beforeInit(this);
388         $objectMap.put("extractionConfigUI", extractionConfigUI);
389         createModel();
390         createBroker();
391         createPmfmPresetLabel();
392         createPmfmPresetTextField();
393         createPmfmPresetButton();
394         createFillZeroLabel();
395         createFillZeroCheckBox();
396         // inline creation of extractionConfigUI
397         setName("extractionConfigUI");
398         setLayout(new BorderLayout());
399         
400         // registers 3 data bindings
401         $registerDefaultBindings();
402         $completeSetup();
403         handler.afterInit(this);
404     }
405 
406     private void $registerDefaultBindings() {
407         // register 3 data bindings
408         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PMFM_PRESET_BUTTON_ENABLED, true) {
409         
410             @Override
411             public void applyDataBinding() {
412                 if (getModel() != null) {
413                     getModel().addPropertyChangeListener("enabled", this);
414                 }
415             }
416         
417             @Override
418             public void processDataBinding() {
419                 if (getModel() != null) {
420                     pmfmPresetButton.setEnabled(getModel().isEnabled());
421                 }
422             }
423         
424             @Override
425             public void removeDataBinding() {
426                 if (getModel() != null) {
427                     getModel().removePropertyChangeListener("enabled", this);
428                 }
429             }
430         });
431         registerDataBinding(new DefaultJAXXBinding(this, BINDING_FILL_ZERO_CHECK_BOX_SELECTED, true) {
432         
433             @Override
434             public void applyDataBinding() {
435                 if (model != null) {
436                     model.addPropertyChangeListener("fillZero", this);
437                 }
438             }
439         
440             @Override
441             public void processDataBinding() {
442                 if (model != null) {
443                     fillZeroCheckBox.setSelected(model.isFillZero());
444                 }
445             }
446         
447             @Override
448             public void removeDataBinding() {
449                 if (model != null) {
450                     model.removePropertyChangeListener("fillZero", this);
451                 }
452             }
453         });
454         registerDataBinding(new DefaultJAXXBinding(this, BINDING_FILL_ZERO_CHECK_BOX_ENABLED, true) {
455         
456             @Override
457             public void applyDataBinding() {
458                 if (getModel() != null) {
459                     getModel().addPropertyChangeListener("enabled", this);
460                 }
461             }
462         
463             @Override
464             public void processDataBinding() {
465                 if (getModel() != null) {
466                     fillZeroCheckBox.setEnabled(getModel().isEnabled());
467                 }
468             }
469         
470             @Override
471             public void removeDataBinding() {
472                 if (getModel() != null) {
473                     getModel().removePropertyChangeListener("enabled", this);
474                 }
475             }
476         });
477     }
478 
479 }