View Javadoc
1   package fr.ifremer.tutti.ui.swing.content.program;
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.TuttiLocation;
28  import fr.ifremer.tutti.ui.swing.TuttiHelpBroker;
29  import fr.ifremer.tutti.ui.swing.util.TuttiUI;
30  import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
31  import java.awt.BorderLayout;
32  import java.awt.Component;
33  import java.awt.Container;
34  import java.awt.GridBagConstraints;
35  import java.awt.GridLayout;
36  import java.awt.Insets;
37  import java.awt.LayoutManager;
38  import java.awt.event.FocusEvent;
39  import java.awt.event.FocusListener;
40  import java.awt.event.KeyEvent;
41  import java.awt.event.KeyListener;
42  import java.util.ArrayList;
43  import java.util.HashMap;
44  import java.util.List;
45  import java.util.Map;
46  import java.util.TreeMap;
47  import javax.swing.BorderFactory;
48  import javax.swing.JButton;
49  import javax.swing.JLabel;
50  import javax.swing.JPanel;
51  import javax.swing.JScrollPane;
52  import javax.swing.JTextArea;
53  import javax.swing.JTextField;
54  import jaxx.runtime.JAXXBinding;
55  import jaxx.runtime.JAXXContext;
56  import jaxx.runtime.JAXXObject;
57  import jaxx.runtime.JAXXObjectDescriptor;
58  import jaxx.runtime.JAXXUtil;
59  import jaxx.runtime.JAXXValidator;
60  import jaxx.runtime.SwingUtil;
61  import jaxx.runtime.binding.DefaultJAXXBinding;
62  import jaxx.runtime.context.DefaultJAXXContext;
63  import jaxx.runtime.swing.Table;
64  import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
65  import jaxx.runtime.swing.help.JAXXHelpUI;
66  import jaxx.runtime.validator.swing.SwingValidator;
67  import jaxx.runtime.validator.swing.SwingValidatorUtil;
68  import jaxx.runtime.validator.swing.meta.Validator;
69  import jaxx.runtime.validator.swing.meta.ValidatorField;
70  import jaxx.runtime.validator.swing.ui.ImageValidationUI;
71  import org.apache.commons.logging.Log;
72  import org.apache.commons.logging.LogFactory;
73  import static jaxx.runtime.SwingUtil.getStringValue;
74  import static org.nuiton.i18n.I18n.t;
75  
76  public class EditProgramUI extends JPanel implements JAXXHelpUI<TuttiHelpBroker>, TuttiUI<EditProgramUIModel, EditProgramUIHandler>, JAXXObject, JAXXValidator {
77  
78      /*-----------------------------------------------------------------------*/
79      /*------------------ Constants for all public bindings ------------------*/
80      /*-----------------------------------------------------------------------*/
81  
82      public static final String BINDING_DESCRIPTION_FIELD_TEXT = "descriptionField.text";
83      public static final String BINDING_NAME_FIELD_TEXT = "nameField.text";
84      public static final String BINDING_RESET_BUTTON_ENABLED = "resetButton.enabled";
85      public static final String BINDING_SAVE_BUTTON_ENABLED = "saveButton.enabled";
86      public static final String BINDING_ZONE_COMBO_BOX_SELECTED_ITEM = "zoneComboBox.selectedItem";
87  
88      /*-----------------------------------------------------------------------*/
89      /*------------------------- Other static fields -------------------------*/
90      /*-----------------------------------------------------------------------*/
91  
92      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAKVXzW8bRRSfuLbz2aZNSFpKkfLRNnah6xZUAUqBJmmtJDikSlxaNYcw3p3EU9a7y+44cbCK+BP4E+DOBYkbJ8SBM4deEFe4IYQEV8R7s+v9iHftTYiUVTLvvd+8937z3pv55g+Sc2wy+4y2WordNARvMGV96cmTzdozpor7zFFtbgnTJu7PQIZkdsio5q87gszvVNC85JmXVsyGZRrMCFkvVsiII4505tQZE4K8GrVQHae07YsXW1bT7qD6TsWhfvXXn5kvtS++zhDSssC7cQhlpp9VEEm2QjJcE2QCdjqgJZ0a++CGzY198Pcsrq3o1HE+pA32KfmcDFZI3qI2gAkylz5kiSHtW5Ygk0zj4qFt7tu0UTWth9RguiBv7dkK37NZg9mKaArBlSZXnEPwRFFNQwCwYrk2yoPA/tGaZUnkvCC5hqkh0t1TIm2geQCXr9nmJ8wWpJiMV8V/V8FqWeoGxsMHVOcahSQI8lqEDl/gQWzj96POYoCQ3TPthiCXIsberrSmSzqGg/0MYKhCaxj/BNLW8nTX5SJqTUWVy5zpQPx0RLnKWkIKjhl8Bsz6QJejwjEUAvs1c9lsCXInxmEkHAKuMWooy/Apc10wG6Po2EUhxzvFxU0Dj4cgFyNubqu2qesoidqdD9l58U11xbdkM4r6877Z0NV1eQhvHc+dXJVbCDJaA65dd/SO4aiqmw5blgI41xFbdxUVi/5GozZzmAgkpah4xKEHrFtqk1ciOYVWoQStIqjlgR2Ss5uwDKdmp7u7bIHI7SuXjvUVBJTSf6cnX3z/63flTjN5CfaeilUN9UIocignCyqF49bjbidpCq6XNqi1uEOGHaZDI5WN8kqMY9ueGJyD/S6guYLmyip16gCRG/zlhx+nP/75DMmUyYhuUq1MUX+NDIs6ZLRu6lrLev+e9GjscAi+5+E3A+cWZIdbmHOoJ2E3IVtZPISCDLZls3jegnRciUmH71Nt+Kd/Jre/vddJyQC4+HKiepCW3FOS54bOoW6ww3rNM7ajjloOa2pm0CTj2iaBxjkdXztez3hHft/tysOAIOd2XQo2jbKpNoGGfBuzAdGjyYoMC/96gLuMBF0gDTLVtMeM79fFI4NDmi+6iVX2mQiWC8W4rSzY7KyOXeUxF3XU67dbvi4hBcncuZUA2FWmPeByu3Vo3YJcbs+5fT00mBQUzcW4HT+/rD6pykKXkaGWcSKMtv0O/BxPJuQbSqPbhz3UUFA3cPZanLOBouc37CFMU69yqyrBZ3raCG7FBRoMlX7hnYG63/UnmzeH5tui0NPXuWIQ/YXg3GBpFFB0spATI/COct8I8jXT1nDgV9rL8i+3zRwpKkwMwapc6ExzJYUekYVm0FwxHMbryWGEbBIIXEhjmsDj8XF6KjZv9GIzEnNAaqENdLrXSbjhNFnB5/h+YFA4fZLigu26A5ysNM+1w9eZFNWJ6qmOKiqetDqlTVJ1+peyFBGOuQOAaWuCNSLV9hRQZLUNeVP8CGJ2gzphSaPRXMq6DSUjLrbInbJfeIOgz2+/bWwYrGEaXBXkZve2UMp4bvCG1Vlq+PoTu9SydK5S1FmSmoJ80E7/jnDR4R4QwLswioozHHIy4qqsoSXJohv+0bqaxtsgqzfjshoTXvxRK6SyhSMHdyRm4DVDQyLd48IdeCPxvaNCceb69ZnOmny8xI74yJX25DQqib7Ke3RKHiun4HErhN+LyJzduVzK5F5L5XBA5UIPKqVFAonFdIk5xuJCLIuzncUVOeUSeAy/XPoRme8i8o1Ef+UDKvQK70dmOQWZHRI3LWasmg0Gr0XGjF405lVqqNjfPB6T83vc34DLUg8uXfjehZncs7pylDAQwq/RfhzhZVqnRyYok3N3ocXTmRo3NEjje13QA/gdSYE4hG+r6pElHza/x+PM9sXB5d96INxI4UmWq+4bOgFDSeXF3z0Qbv9vhDcB4T9kXCP8fBQAAA==";
93      private static final Log log = LogFactory.getLog(EditProgramUI.class);
94      private static final long serialVersionUID = 1L;
95  
96      /*-----------------------------------------------------------------------*/
97      /*--------------------------- Internal states ---------------------------*/
98      /*-----------------------------------------------------------------------*/
99  
100     protected List<Object> $activeBindings = new ArrayList<Object>();
101     protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
102     protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
103     protected Map<String, Object> $objectMap = new HashMap<String, Object>();
104     protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
105     private boolean allComponentsCreated;
106     protected final JAXXContext delegateContext = new DefaultJAXXContext();
107 
108     /*-----------------------------------------------------------------------*/
109     /*------------------------ Protected components  ------------------------*/
110     /*-----------------------------------------------------------------------*/
111 
112     protected TuttiHelpBroker broker;
113     protected JButton closeButton;
114     protected JTextArea descriptionField;
115     @ValidatorField( validatorId = "validator",  propertyName = "description",  editorName = "descriptionPane")
116     protected JScrollPane descriptionPane;
117     protected EditProgramUI editProgramTopPanel = this;
118     protected Table form;
119     protected final EditProgramUIHandler handler = createHandler();
120     protected EditProgramUIModel model;
121     @ValidatorField( validatorId = "validator",  propertyName = "name",  editorName = "nameField")
122     protected JTextField nameField;
123     protected JLabel nameLabel;
124     protected JButton resetButton;
125     protected JButton saveButton;
126     @Validator( validatorId = "validator")
127     protected SwingValidator<EditProgramUIModel> validator;
128     protected List<String> validatorIds = new ArrayList<String>();
129     @ValidatorField( validatorId = "validator",  propertyName = "zone",  editorName = "zoneComboBox")
130     protected BeanFilterableComboBox<TuttiLocation> zoneComboBox;
131     protected JLabel zoneLabel;
132 
133     /*-----------------------------------------------------------------------*/
134     /*------------------------- Private components  -------------------------*/
135     /*-----------------------------------------------------------------------*/
136 
137     private JPanel $JPanel0;
138 
139     /*-----------------------------------------------------------------------*/
140     /*---------------------------- Constructors  ----------------------------*/
141     /*-----------------------------------------------------------------------*/
142 
143     public EditProgramUI(TuttiUI parentUI) {
144         TuttiUIUtil.setParentUI(this, parentUI);
145             $initialize();
146     }
147 
148     public EditProgramUI(LayoutManager param0, boolean param1) {
149         super(param0 ,param1);
150         $initialize();
151     }
152 
153     public EditProgramUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
154         super(param1 ,param2);
155         JAXXUtil.initContext(this, parentContext);
156         $initialize();
157     }
158 
159     public EditProgramUI(LayoutManager param0) {
160         super(param0);
161         $initialize();
162     }
163 
164     public EditProgramUI(JAXXContext parentContext, LayoutManager param1) {
165         super(param1);
166         JAXXUtil.initContext(this, parentContext);
167         $initialize();
168     }
169 
170     public EditProgramUI() {
171         $initialize();
172     }
173 
174     public EditProgramUI(JAXXContext parentContext) {
175         JAXXUtil.initContext(this, parentContext);
176         $initialize();
177     }
178 
179     public EditProgramUI(boolean param0) {
180         super(param0);
181         $initialize();
182     }
183 
184     public EditProgramUI(JAXXContext parentContext, boolean param1) {
185         super(param1);
186         JAXXUtil.initContext(this, parentContext);
187         $initialize();
188     }
189 
190     /*-----------------------------------------------------------------------*/
191     /*--------------------------- Statics methods ---------------------------*/
192     /*-----------------------------------------------------------------------*/
193 
194     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
195         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
196     }
197 
198     /*-----------------------------------------------------------------------*/
199     /*---------------------- JAXXObject implementation ----------------------*/
200     /*-----------------------------------------------------------------------*/
201 
202     @Override
203     public void applyDataBinding(String $binding) {
204         if (allComponentsCreated && $bindings.containsKey($binding)) {
205             getDataBinding($binding).applyDataBinding();
206         }
207         processDataBinding($binding);
208     }
209 
210     @Override
211     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
212         super.firePropertyChange(propertyName, oldValue, newValue);
213     }
214 
215     @Override
216     public Map<String, Object> get$objectMap() {
217         return $objectMap;
218     }
219 
220     @Override
221     public JAXXBinding getDataBinding(String bindingId) {
222         return $bindings.get(bindingId);
223     }
224 
225     @Override
226     public JAXXBinding[] getDataBindings() {
227         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
228     }
229 
230     @Override
231     public Object getObjectById(String id) {
232         return $objectMap.get(id);
233     }
234 
235     @Override
236     public void processDataBinding(String $binding, boolean $force) {
237         if (!$force && $activeBindings.contains($binding)) { 
238             return;
239         }
240         $activeBindings.add($binding);
241         try {
242             if (allComponentsCreated && $bindings.containsKey($binding)) {
243                 getDataBinding($binding).processDataBinding();
244             }
245         } finally {
246             $activeBindings.remove($binding);
247         }
248     }
249 
250     @Override
251     public void processDataBinding(String $binding) {
252         processDataBinding($binding, false);
253     }
254 
255     @Override
256     public void registerDataBinding(JAXXBinding binding) {
257         $bindings.put(binding.getId(), binding);
258     }
259 
260     @Override
261     public void removeDataBinding(String $binding) {
262         if (allComponentsCreated && $bindings.containsKey($binding)) {
263             getDataBinding($binding).removeDataBinding();
264         }
265     }
266 
267     /*-----------------------------------------------------------------------*/
268     /*--------------------- JAXXContext implementation  ---------------------*/
269     /*-----------------------------------------------------------------------*/
270 
271     @Override
272     public <T> T getContextValue(Class<T> clazz) {
273         return delegateContext.getContextValue(clazz, null);
274     }
275 
276     @Override
277     public <T> T getContextValue(Class<T> clazz, String name) {
278         return delegateContext.getContextValue(clazz, name);
279     }
280 
281     @Override
282     public JAXXContext getDelegateContext() {
283         return delegateContext;
284     }
285 
286     @Override
287     public <O extends Container> O getParentContainer(Class<O> clazz) {
288         return SwingUtil.getParentContainer(this, clazz);
289     }
290 
291     @Override
292     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
293         return SwingUtil.getParentContainer(source, clazz);
294     }
295 
296     @Override
297     public <T> void removeContextValue(Class<T> clazz) {
298         delegateContext.removeContextValue(clazz, null);
299     }
300 
301     @Override
302     public <T> void removeContextValue(Class<T> clazz, String name) {
303         delegateContext.removeContextValue(clazz, name);
304     }
305 
306     @Override
307     public <T> void setContextValue(T o) {
308         delegateContext.setContextValue(o, null);
309     }
310 
311     @Override
312     public <T> void setContextValue(T o, String name) {
313         delegateContext.setContextValue(o, name);
314     }
315 
316     /*-----------------------------------------------------------------------*/
317     /*-------------------- JAXXValidator implementation  --------------------*/
318     /*-----------------------------------------------------------------------*/
319 
320     @Override
321     public SwingValidator<?> getValidator(String validatorId) {
322         return (SwingValidator<?>) (validatorIds.contains(validatorId) ? getObjectById(validatorId) : null);
323     }
324 
325     @Override
326     public List<String> getValidatorIds() {
327         return validatorIds;
328     }
329 
330     @Override
331     public void registerValidatorFields() {
332         SwingValidatorUtil.detectValidatorFields(this);
333     }
334 
335     /*-----------------------------------------------------------------------*/
336     /*---------------------------- Event methods ----------------------------*/
337     /*-----------------------------------------------------------------------*/
338 
339     public void doFocusGained__on__descriptionPane(FocusEvent event) {
340         if (log.isDebugEnabled()) {
341             log.debug(event);
342         }
343         descriptionField.requestFocus();
344     }
345 
346     public void doKeyReleased__on__descriptionField(KeyEvent event) {
347         if (log.isDebugEnabled()) {
348             log.debug(event);
349         }
350         handler.setText(event, "description");
351     }
352 
353     public void doKeyReleased__on__nameField(KeyEvent event) {
354         if (log.isDebugEnabled()) {
355             log.debug(event);
356         }
357         handler.setText(event, "name");
358     }
359 
360     /*-----------------------------------------------------------------------*/
361     /*----------------------- Public acessor methods  -----------------------*/
362     /*-----------------------------------------------------------------------*/
363 
364     public TuttiHelpBroker getBroker() {
365         return broker;
366     }
367 
368     public JButton getCloseButton() {
369         return closeButton;
370     }
371 
372     public JTextArea getDescriptionField() {
373         return descriptionField;
374     }
375 
376     public JScrollPane getDescriptionPane() {
377         return descriptionPane;
378     }
379 
380     public Table getForm() {
381         return form;
382     }
383 
384     public EditProgramUIHandler getHandler() {
385         return handler;
386     }
387 
388     public EditProgramUIModel getModel() {
389         return model;
390     }
391 
392     public JTextField getNameField() {
393         return nameField;
394     }
395 
396     public JLabel getNameLabel() {
397         return nameLabel;
398     }
399 
400     public JButton getResetButton() {
401         return resetButton;
402     }
403 
404     public JButton getSaveButton() {
405         return saveButton;
406     }
407 
408     public SwingValidator<EditProgramUIModel> getValidator() {
409         return validator;
410     }
411 
412     public BeanFilterableComboBox<TuttiLocation> getZoneComboBox() {
413         return zoneComboBox;
414     }
415 
416     public JLabel getZoneLabel() {
417         return zoneLabel;
418     }
419 
420     /*-----------------------------------------------------------------------*/
421     /*---------------------------- Other methods ----------------------------*/
422     /*-----------------------------------------------------------------------*/
423 
424     @Override
425     public void registerHelpId(TuttiHelpBroker broker, Component component, String helpId) {
426         broker.installUI(component, helpId);
427     }
428 
429     @Override
430     public void showHelp(String helpId) {
431         getBroker().showHelp(this, helpId);
432     }
433 
434     /*-----------------------------------------------------------------------*/
435     /*--------------------- Protected acessors methods  ---------------------*/
436     /*-----------------------------------------------------------------------*/
437 
438     protected JPanel get$JPanel0() {
439         return $JPanel0;
440     }
441 
442     /*-----------------------------------------------------------------------*/
443     /*--------------------- Components creation methods ---------------------*/
444     /*-----------------------------------------------------------------------*/
445 
446     protected void addChildrenToDescriptionPane() {
447         if (!allComponentsCreated) {
448             return;
449         }
450         descriptionPane.getViewport().add(descriptionField);
451     }
452 
453     protected void addChildrenToEditProgramTopPanel() {
454         if (!allComponentsCreated) {
455             return;
456         }
457         add(form);
458     }
459 
460     protected void addChildrenToForm() {
461         if (!allComponentsCreated) {
462             return;
463         }
464         form.add(nameLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 17, 1, new Insets(3, 3, 3, 3), 0, 0));
465         form.add(SwingUtil.boxComponentWithJxLayer(nameField), new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
466         form.add(zoneLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
467         form.add(SwingUtil.boxComponentWithJxLayer(zoneComboBox), new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
468         form.add(SwingUtil.boxComponentWithJxLayer(descriptionPane), new GridBagConstraints(0, 2, 2, 1, 0.0, 0.8, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
469         form.add($JPanel0, new GridBagConstraints(0, 3, 2, 1, 0.0, 0.0, 15, 1, new Insets(3, 3, 3, 3), 0, 0));
470     }
471 
472     protected void addChildrenToValidator() {
473         if (!allComponentsCreated) {
474             return;
475         }
476         validator.setUiClass(ImageValidationUI.class);
477         validator.setBean(model);
478     }
479 
480     protected void createBroker() {
481         $objectMap.put("broker", broker = new TuttiHelpBroker("tutti.editProgram.help"));
482     }
483 
484     protected void createCloseButton() {
485         $objectMap.put("closeButton", closeButton = new JButton());
486         
487         closeButton.setName("closeButton");
488         closeButton.setText(t("tutti.editProgram.action.closeEditProgram"));
489         closeButton.setToolTipText(t("tutti.editProgram.action.closeEditProgram.tip"));
490         closeButton.putClientProperty("help", "tutti.editProgram.action.cancelProgram.help");
491         closeButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.actions.OpenHomeScreenAction.class);
492     }
493 
494     protected void createDescriptionField() {
495         $objectMap.put("descriptionField", descriptionField = new JTextArea());
496         
497         descriptionField.setName("descriptionField");
498         descriptionField.setColumns(15);
499         descriptionField.setLineWrap(true);
500         descriptionField.setWrapStyleWord(true);
501         descriptionField.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyReleased", this, "doKeyReleased__on__descriptionField"));
502         descriptionField.putClientProperty("help", "tutti.editProgram.field.description.help");
503         descriptionField.putClientProperty("validatorLabel", t("tutti.editProgram.field.description"));
504     }
505 
506     protected void createDescriptionPane() {
507         $objectMap.put("descriptionPane", descriptionPane = new JScrollPane());
508         
509         descriptionPane.setName("descriptionPane");
510         descriptionPane.setToolTipText(t("tutti.editProgram.field.description.tip"));
511         descriptionPane.addFocusListener(JAXXUtil.getEventListener(FocusListener.class, "focusGained", this, "doFocusGained__on__descriptionPane"));
512         descriptionPane.putClientProperty("help", "tutti.editProgram.field.description.help");
513     }
514 
515     protected void createForm() {
516         $objectMap.put("form", form = new Table());
517         
518         form.setName("form");
519     }
520 
521     protected EditProgramUIHandler createHandler() {
522         return new EditProgramUIHandler();
523     }
524 
525     protected void createModel() {
526         $objectMap.put("model", model = getContextValue(EditProgramUIModel.class));
527     }
528 
529     protected void createNameField() {
530         $objectMap.put("nameField", nameField = new JTextField());
531         
532         nameField.setName("nameField");
533         nameField.setColumns(15);
534         nameField.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyReleased", this, "doKeyReleased__on__nameField"));
535         nameField.putClientProperty("help", "tutti.editProgram.field.name.help");
536         nameField.putClientProperty("selectOnFocus", true);
537         nameField.putClientProperty("validatorLabel", t("tutti.editProgram.field.name"));
538     }
539 
540     protected void createNameLabel() {
541         $objectMap.put("nameLabel", nameLabel = new JLabel());
542         
543         nameLabel.setName("nameLabel");
544         nameLabel.setText(t("tutti.editProgram.field.name"));
545         nameLabel.setToolTipText(t("tutti.editProgram.field.name.tip"));
546         nameLabel.putClientProperty("help", "tutti.editProgram.field.name.help");
547     }
548 
549     protected void createResetButton() {
550         $objectMap.put("resetButton", resetButton = new JButton());
551         
552         resetButton.setName("resetButton");
553         resetButton.setText(t("tutti.editProgram.action.resetProgram"));
554         resetButton.setToolTipText(t("tutti.editProgram.action.resetProgram.tip"));
555         resetButton.putClientProperty("help", "tutti.editProgram.action.reset.help");
556         resetButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.program.actions.ResetProgramAction.class);
557     }
558 
559     protected void createSaveButton() {
560         $objectMap.put("saveButton", saveButton = new JButton());
561         
562         saveButton.setName("saveButton");
563         saveButton.setText(t("tutti.editProgram.action.saveProgram"));
564         saveButton.setToolTipText(t("tutti.editProgram.action.saveProgram.tip"));
565         saveButton.putClientProperty("help", "tutti.editProgram.action.saveProgram.help");
566         saveButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.program.actions.SaveProgramAction.class);
567     }
568 
569     protected void createValidator() {
570         $objectMap.put("validator", validator = SwingValidator.newValidator(EditProgramUIModel.class, "edit"));
571     }
572 
573     protected void createZoneComboBox() {
574         $objectMap.put("zoneComboBox", zoneComboBox = new BeanFilterableComboBox<TuttiLocation>(this));
575         
576         zoneComboBox.setName("zoneComboBox");
577         zoneComboBox.setProperty("zone");
578         zoneComboBox.setShowReset(true);
579         zoneComboBox.putClientProperty("help", "tutti.editProgram.field.zone.help");
580         zoneComboBox.putClientProperty("validatorLabel", t("tutti.editProgram.field.zone"));
581     }
582 
583     protected void createZoneLabel() {
584         $objectMap.put("zoneLabel", zoneLabel = new JLabel());
585         
586         zoneLabel.setName("zoneLabel");
587         zoneLabel.setText(t("tutti.editProgram.field.zone"));
588         zoneLabel.setToolTipText(t("tutti.editProgram.field.zone.tip"));
589         zoneLabel.putClientProperty("help", "tutti.editProgram.field.zone.help");
590     }
591 
592     /*-----------------------------------------------------------------------*/
593     /*------------------------ Internal jaxx methods ------------------------*/
594     /*-----------------------------------------------------------------------*/
595 
596     private void $completeSetup() {
597         allComponentsCreated = true;
598         if (log.isDebugEnabled()) {
599             log.debug(this);
600         }
601         addChildrenToEditProgramTopPanel();
602         addChildrenToValidator();
603         addChildrenToForm();
604         addChildrenToDescriptionPane();
605         // inline complete setup of $JPanel0
606         $JPanel0.add(closeButton);
607         $JPanel0.add(resetButton);
608         $JPanel0.add(saveButton);
609         
610         // apply 5 data bindings
611         JAXXUtil.applyDataBinding(this, $bindings.keySet());
612         
613         // apply 13 property setters
614         zoneComboBox.setBeanType(TuttiLocation.class);
615         nameLabel.setLabelFor(nameField);
616         zoneLabel.setLabelFor(zoneComboBox);
617         zoneComboBox.setBean(model);
618         descriptionPane.setBorder(BorderFactory.createTitledBorder(t("tutti.editProgram.field.description")));
619         closeButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.editProgram.action.closeEditProgram.mnemonic"),'Z'));
620         closeButton.setIcon(SwingUtil.createActionIcon("cancel"));
621         resetButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.editProgram.action.resetProgram.mnemonic"),'Z'));
622         resetButton.setIcon(SwingUtil.createActionIcon("reset"));
623         saveButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.editProgram.action.saveProgram.mnemonic"),'Z'));
624         saveButton.setIcon(SwingUtil.createActionIcon("save"));
625         // late initializer
626         // help broker setup
627         TuttiHelpBroker _broker = getBroker();
628         registerHelpId(_broker, editProgramTopPanel, "tutti.editProgram.help");
629         registerHelpId(_broker, nameLabel, "tutti.editProgram.field.name.help");
630         registerHelpId(_broker, nameField, "tutti.editProgram.field.name.help");
631         registerHelpId(_broker, zoneLabel, "tutti.editProgram.field.zone.help");
632         registerHelpId(_broker, zoneComboBox, "tutti.editProgram.field.zone.help");
633         registerHelpId(_broker, descriptionPane, "tutti.editProgram.field.description.help");
634         registerHelpId(_broker, descriptionField, "tutti.editProgram.field.description.help");
635         registerHelpId(_broker, closeButton, "tutti.editProgram.action.cancelProgram.help");
636         registerHelpId(_broker, resetButton, "tutti.editProgram.action.reset.help");
637         registerHelpId(_broker, saveButton, "tutti.editProgram.action.saveProgram.help");
638         _broker.prepareUI(this);
639         // register 1 validator(s)
640         validatorIds = SwingValidatorUtil.detectValidators(this);
641         SwingValidatorUtil.installUI(this);
642     }
643 
644     private void $initialize() {
645         if (allComponentsCreated) {
646             return;
647         }
648         if (log.isDebugEnabled()) {
649             log.debug(this);
650         }
651         handler.beforeInit(this);
652         $objectMap.put("editProgramTopPanel", editProgramTopPanel);
653         createModel();
654         createBroker();
655         createValidator();
656         createForm();
657         createNameLabel();
658         createNameField();
659         createZoneLabel();
660         createZoneComboBox();
661         createDescriptionPane();
662         createDescriptionField();
663         // inline creation of $JPanel0
664         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
665         
666         $JPanel0.setName("$JPanel0");
667         $JPanel0.setLayout(new GridLayout(1, 0));
668         SwingUtil.setComponentHeight($JPanel0,50);
669         createCloseButton();
670         createResetButton();
671         createSaveButton();
672         // inline creation of editProgramTopPanel
673         setName("editProgramTopPanel");
674         setLayout(new BorderLayout());
675         editProgramTopPanel.putClientProperty("help", "tutti.editProgram.help");
676         
677         // registers 5 data bindings
678         $registerDefaultBindings();
679         $completeSetup();
680         handler.afterInit(this);
681     }
682 
683     private void $registerDefaultBindings() {
684         // register 5 data bindings
685         registerDataBinding(new DefaultJAXXBinding(this, BINDING_NAME_FIELD_TEXT, true) {
686         
687             @Override
688             public void applyDataBinding() {
689                 if (model != null) {
690                     model.addPropertyChangeListener("name", this);
691                 }
692             }
693         
694             @Override
695             public void processDataBinding() {
696                 if (model != null) {
697                     SwingUtil.setText(nameField, model.getName());
698                 }
699             }
700         
701             @Override
702             public void removeDataBinding() {
703                 if (model != null) {
704                     model.removePropertyChangeListener("name", this);
705                 }
706             }
707         });
708         registerDataBinding(new DefaultJAXXBinding(this, BINDING_ZONE_COMBO_BOX_SELECTED_ITEM, true) {
709         
710             @Override
711             public void applyDataBinding() {
712                 if (model != null) {
713                     model.addPropertyChangeListener("zone", this);
714                 }
715             }
716         
717             @Override
718             public void processDataBinding() {
719                 if (model != null) {
720                     zoneComboBox.setSelectedItem(model.getZone());
721                 }
722             }
723         
724             @Override
725             public void removeDataBinding() {
726                 if (model != null) {
727                     model.removePropertyChangeListener("zone", this);
728                 }
729             }
730         });
731         registerDataBinding(new DefaultJAXXBinding(this, BINDING_DESCRIPTION_FIELD_TEXT, true) {
732         
733             @Override
734             public void applyDataBinding() {
735                 if (model != null) {
736                     model.addPropertyChangeListener("description", this);
737                 }
738             }
739         
740             @Override
741             public void processDataBinding() {
742                 if (model != null) {
743                     SwingUtil.setText(descriptionField, getStringValue(model.getDescription()));
744                 }
745             }
746         
747             @Override
748             public void removeDataBinding() {
749                 if (model != null) {
750                     model.removePropertyChangeListener("description", this);
751                 }
752             }
753         });
754         registerDataBinding(new DefaultJAXXBinding(this, BINDING_RESET_BUTTON_ENABLED, true, true) {
755         
756             @Override
757             public void applyDataBinding() {
758                 if (model != null) {
759                     model.addPropertyChangeListener("modify", this);
760                 }
761                 if (model != null) {
762                     model.addPropertyChangeListener("create", this);
763                 }
764             }
765         
766             @Override
767             public void processDataBinding() {
768                 if (model != null) {
769                     resetButton.setEnabled(model.isModify() && !model.isCreate());
770                 }
771             }
772         
773             @Override
774             public void removeDataBinding() {
775                 if (model != null) {
776                     model.removePropertyChangeListener("modify", this);
777                 }
778                 if (model != null) {
779                     model.removePropertyChangeListener("create", this);
780                 }
781             }
782         });
783         registerDataBinding(new DefaultJAXXBinding(this, BINDING_SAVE_BUTTON_ENABLED, true, true) {
784         
785             @Override
786             public void applyDataBinding() {
787                 if (model != null) {
788                     model.addPropertyChangeListener("modify", this);
789                 }
790                 if (model != null) {
791                     model.addPropertyChangeListener("valid", this);
792                 }
793             }
794         
795             @Override
796             public void processDataBinding() {
797                 if (model != null) {
798                     saveButton.setEnabled(model.isModify() && model.isValid());
799                 }
800             }
801         
802             @Override
803             public void removeDataBinding() {
804                 if (model != null) {
805                     model.removePropertyChangeListener("modify", this);
806                 }
807                 if (model != null) {
808                     model.removePropertyChangeListener("valid", this);
809                 }
810             }
811         });
812     }
813 
814 }