View Javadoc
1   package fr.ifremer.quadrige3.ui.swing.content.login;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: UI Swing Common
6    * %%
7    * Copyright (C) 2017 - 2024 Ifremer
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU Affero General Public License as published by
11   * the Free Software Foundation, either version 3 of the License, or
12   * (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU Affero General Public License
20   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21   * #L%
22   */
23  
24  
25  import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
26  import fr.ifremer.quadrige3.ui.swing.ApplicationUIContext;
27  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
28  import java.awt.BorderLayout;
29  import java.awt.Container;
30  import java.awt.Dialog;
31  import java.awt.Dialog.ModalityType;
32  import java.awt.Frame;
33  import java.awt.GraphicsConfiguration;
34  import java.awt.GridBagConstraints;
35  import java.awt.GridLayout;
36  import java.awt.Insets;
37  import java.awt.Window;
38  import java.awt.event.ActionEvent;
39  import java.awt.event.ActionListener;
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.JButton;
48  import javax.swing.JDialog;
49  import javax.swing.JLabel;
50  import javax.swing.JPanel;
51  import javax.swing.JPasswordField;
52  import javax.swing.JTextField;
53  import javax.swing.event.DocumentEvent;
54  import javax.swing.event.DocumentListener;
55  import javax.swing.text.Document;
56  import jaxx.runtime.JAXXBinding;
57  import jaxx.runtime.JAXXContext;
58  import jaxx.runtime.JAXXObject;
59  import jaxx.runtime.JAXXObjectDescriptor;
60  import jaxx.runtime.JAXXUtil;
61  import jaxx.runtime.SwingUtil;
62  import jaxx.runtime.binding.DefaultJAXXBinding;
63  import jaxx.runtime.context.DefaultJAXXContext;
64  import jaxx.runtime.swing.Table;
65  import org.apache.commons.lang3.StringUtils;
66  import org.apache.commons.logging.Log;
67  import org.apache.commons.logging.LogFactory;
68  import static org.nuiton.i18n.I18n.t;
69  
70  public class LoginUI extends JDialog implements ApplicationUI<LoginUIModel, LoginUIHandler>, JAXXObject {
71  
72      /*-----------------------------------------------------------------------*/
73      /*------------------ Constants for all public bindings ------------------*/
74      /*-----------------------------------------------------------------------*/
75  
76      public static final String BINDING_ACCEPT_BUTTON_ENABLED = "acceptButton.enabled";
77      public static final String BINDING_LOGIN_FIELD_TEXT = "loginField.text";
78      public static final String BINDING_PASSWORD_FIELD_TEXT = "passwordField.text";
79  
80      /*-----------------------------------------------------------------------*/
81      /*------------------------- Other static fields -------------------------*/
82      /*-----------------------------------------------------------------------*/
83  
84      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAKVWQW8bRRQem9iJ44ZAQ0JLC4S2QqmE1kWVUKQgKG1lkcgpFUmlCl8Y746dKbMz05nZZktUVK6c+Alw54LEjRPiwJkDF8RfQIgDV8SbWXs3E69jA5Y8tue998373rz3rb/5HdW0Qq89wGkaqIQbGpNg57379z/oPSChuU10qKg0QqHsVamiahc1o3xfG3S527HhrWF465aIpeCEH4ve6qBFbR4zog8IMQa97EeEWrf2cvNWKhM1Qs2TKkP96s8/ql9GT7+uIpRKyK4JVNanRRVM5jqoSiODzsJJj3CLYT6ANBTlA8h3ye7dYljrOzgmD9FnaL6D6hIrADPo0uyUHYaLT6VBTSYGlN+mGD4Nut5XAe0rEhMVPExwpOiAXA8SGuhDyCIIBTcAGriYoGPXe9tSOrS6QbVYRIQZtPkfUHZtaAHViDHldzG3cOe8CmYY+7jHXBEaeUiT8r7YJVrjAYEa2nKlQ++dDu4RZv2Wc/dFd3xueKHM2qaEwX2seVj7JDXO4EcsSSjroVDRJMjcYYj6kod697jRD1y4suMqce0kK7fr+54JMQ8Ju5kYA1VGK55/tms9Xy0CcBgSaQrTlaFdoQte3WEmgmImiqatdFFNJbANF9UdH6MPwZQN0LkTA2QBnfXvtZVfvv/tu/Zoapbg7NVS12NDD90slZBEGWqPXs5GJjGUtXax3OqihiYMFMMpwsWSxPaGZkgOznvehgc2PHgf6wOAqM3/+sOPax///Ayqtm074KiNrf82apgDBVUQLErluzdcRmcOF2B9Dt5V6F2w0k9tg8JI9DHT9tNQY3+vFvOQtb/bT6E8F0vKk+fYa/z018retzdGJapAyucnuhdlqn2E6pQzyomTlqFqlEpJU2qSRKJQhzK9QL5gyOHAvuHWa2PFqMAgQdGo4Nt26LMRVTG2O2liY95yZOy3TeSP8DRsKPQCs6PWFgra+KgY2CcGzRkYUoMunKx239qz72XnH9OEGagNDzl75GQvANVxWrZx9clkbJfgv6O2fOQJR8HulXJ2I++yJHyRmp3jasFxJFQTaPoqN+2EObg5+uYm3+UkFpyGBq0XpEIRw2aQKVoQ5y5eS9Uzc57pixPiobmMEGyfyv1T/co4eaI6jVJtjNKlsaMeYUYjbMhEUpko56TOT0Q4Ses0z3nCrSjBoyc4yv5W3AO90wHVd4S5Cf82PtkoetRetYXcuFp+z95zY4ZGqjP8WIAzevZtyAav9yiPIIN3xrArdl2cimi3n9rl83KE9Vmam4bZM28CxspMWXxxCsLl/43wOiD8A4UPFoQVCwAA";
85      private static final Log log = LogFactory.getLog(LoginUI.class);
86      private static final long serialVersionUID = 1L;
87  
88      /*-----------------------------------------------------------------------*/
89      /*--------------------------- Internal states ---------------------------*/
90      /*-----------------------------------------------------------------------*/
91  
92      protected List<Object> $activeBindings = new ArrayList<Object>();
93      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
94      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
95      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
96      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
97      private boolean allComponentsCreated;
98      protected final JAXXContext delegateContext = new DefaultJAXXContext();
99  
100     /*-----------------------------------------------------------------------*/
101     /*------------------------ Protected components  ------------------------*/
102     /*-----------------------------------------------------------------------*/
103 
104     protected JButton acceptButton;
105     protected JButton cancelButton;
106     protected final LoginUIHandler handler = createHandler();
107     protected JLabel infoMessage;
108     protected LoginUI loginDialog = this;
109     protected JTextField loginField;
110     protected JLabel loginLabel;
111     protected Table mainPanel;
112     protected LoginUIModel model;
113     protected JPasswordField passwordField;
114     protected JLabel passwordLabel;
115 
116     /*-----------------------------------------------------------------------*/
117     /*------------------------- Private components  -------------------------*/
118     /*-----------------------------------------------------------------------*/
119 
120     private JPanel $JPanel0;
121 
122     /*-----------------------------------------------------------------------*/
123     /*---------------------------- Constructors  ----------------------------*/
124     /*-----------------------------------------------------------------------*/
125 
126     public LoginUI(ApplicationUIContext context) {
127         super(context.getMainUI());
128         			ApplicationUIUtil.setApplicationContext(this, context);
129             $initialize();
130     }
131 
132     public LoginUI(Window param0) {
133         super(param0);
134         $initialize();
135     }
136 
137     public LoginUI(JAXXContext parentContext, Window param1) {
138         super(param1);
139         JAXXUtil.initContext(this, parentContext);
140         $initialize();
141     }
142 
143     public LoginUI(Dialog param0, String param1, boolean param2, GraphicsConfiguration param3) {
144         super(param0 ,param1 ,param2 ,param3);
145         $initialize();
146     }
147 
148     public LoginUI(JAXXContext parentContext, Dialog param1, String param2, boolean param3, GraphicsConfiguration param4) {
149         super(param1 ,param2 ,param3 ,param4);
150         JAXXUtil.initContext(this, parentContext);
151         $initialize();
152     }
153 
154     public LoginUI(Dialog param0, String param1, boolean param2) {
155         super(param0 ,param1 ,param2);
156         $initialize();
157     }
158 
159     public LoginUI(JAXXContext parentContext, Dialog param1, String param2, boolean param3) {
160         super(param1 ,param2 ,param3);
161         JAXXUtil.initContext(this, parentContext);
162         $initialize();
163     }
164 
165     public LoginUI(Dialog param0, String param1) {
166         super(param0 ,param1);
167         $initialize();
168     }
169 
170     public LoginUI(JAXXContext parentContext, Dialog param1, String param2) {
171         super(param1 ,param2);
172         JAXXUtil.initContext(this, parentContext);
173         $initialize();
174     }
175 
176     public LoginUI(Window param0, String param1, ModalityType param2, GraphicsConfiguration param3) {
177         super(param0 ,param1 ,param2 ,param3);
178         $initialize();
179     }
180 
181     public LoginUI(JAXXContext parentContext, Window param1, String param2, ModalityType param3, GraphicsConfiguration param4) {
182         super(param1 ,param2 ,param3 ,param4);
183         JAXXUtil.initContext(this, parentContext);
184         $initialize();
185     }
186 
187     public LoginUI(Window param0, String param1, ModalityType param2) {
188         super(param0 ,param1 ,param2);
189         $initialize();
190     }
191 
192     public LoginUI(JAXXContext parentContext, Window param1, String param2, ModalityType param3) {
193         super(param1 ,param2 ,param3);
194         JAXXUtil.initContext(this, parentContext);
195         $initialize();
196     }
197 
198     public LoginUI(Window param0, String param1) {
199         super(param0 ,param1);
200         $initialize();
201     }
202 
203     public LoginUI(JAXXContext parentContext, Window param1, String param2) {
204         super(param1 ,param2);
205         JAXXUtil.initContext(this, parentContext);
206         $initialize();
207     }
208 
209     public LoginUI(Window param0, ModalityType param1) {
210         super(param0 ,param1);
211         $initialize();
212     }
213 
214     public LoginUI(JAXXContext parentContext, Window param1, ModalityType param2) {
215         super(param1 ,param2);
216         JAXXUtil.initContext(this, parentContext);
217         $initialize();
218     }
219 
220     public LoginUI(Frame param0, String param1) {
221         super(param0 ,param1);
222         $initialize();
223     }
224 
225     public LoginUI(JAXXContext parentContext, Frame param1, String param2) {
226         super(param1 ,param2);
227         JAXXUtil.initContext(this, parentContext);
228         $initialize();
229     }
230 
231     public LoginUI(Frame param0, boolean param1) {
232         super(param0 ,param1);
233         $initialize();
234     }
235 
236     public LoginUI(JAXXContext parentContext, Frame param1, boolean param2) {
237         super(param1 ,param2);
238         JAXXUtil.initContext(this, parentContext);
239         $initialize();
240     }
241 
242     public LoginUI(Frame param0) {
243         super(param0);
244         $initialize();
245     }
246 
247     public LoginUI(JAXXContext parentContext, Frame param1) {
248         super(param1);
249         JAXXUtil.initContext(this, parentContext);
250         $initialize();
251     }
252 
253     public LoginUI() {
254         $initialize();
255     }
256 
257     public LoginUI(JAXXContext parentContext) {
258         JAXXUtil.initContext(this, parentContext);
259         $initialize();
260     }
261 
262     public LoginUI(Dialog param0, boolean param1) {
263         super(param0 ,param1);
264         $initialize();
265     }
266 
267     public LoginUI(JAXXContext parentContext, Dialog param1, boolean param2) {
268         super(param1 ,param2);
269         JAXXUtil.initContext(this, parentContext);
270         $initialize();
271     }
272 
273     public LoginUI(Dialog param0) {
274         super(param0);
275         $initialize();
276     }
277 
278     public LoginUI(JAXXContext parentContext, Dialog param1) {
279         super(param1);
280         JAXXUtil.initContext(this, parentContext);
281         $initialize();
282     }
283 
284     public LoginUI(Frame param0, String param1, boolean param2, GraphicsConfiguration param3) {
285         super(param0 ,param1 ,param2 ,param3);
286         $initialize();
287     }
288 
289     public LoginUI(JAXXContext parentContext, Frame param1, String param2, boolean param3, GraphicsConfiguration param4) {
290         super(param1 ,param2 ,param3 ,param4);
291         JAXXUtil.initContext(this, parentContext);
292         $initialize();
293     }
294 
295     public LoginUI(Frame param0, String param1, boolean param2) {
296         super(param0 ,param1 ,param2);
297         $initialize();
298     }
299 
300     public LoginUI(JAXXContext parentContext, Frame param1, String param2, boolean param3) {
301         super(param1 ,param2 ,param3);
302         JAXXUtil.initContext(this, parentContext);
303         $initialize();
304     }
305 
306     /*-----------------------------------------------------------------------*/
307     /*--------------------------- Statics methods ---------------------------*/
308     /*-----------------------------------------------------------------------*/
309 
310     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
311         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
312     }
313 
314     /*-----------------------------------------------------------------------*/
315     /*---------------------- JAXXObject implementation ----------------------*/
316     /*-----------------------------------------------------------------------*/
317 
318     @Override
319     public void applyDataBinding(String $binding) {
320         if (allComponentsCreated && $bindings.containsKey($binding)) {
321             getDataBinding($binding).applyDataBinding();
322         }
323         processDataBinding($binding);
324     }
325 
326     @Override
327     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
328         super.firePropertyChange(propertyName, oldValue, newValue);
329     }
330 
331     @Override
332     public Map<String, Object> get$objectMap() {
333         return $objectMap;
334     }
335 
336     @Override
337     public JAXXBinding getDataBinding(String bindingId) {
338         return $bindings.get(bindingId);
339     }
340 
341     @Override
342     public JAXXBinding[] getDataBindings() {
343         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
344     }
345 
346     @Override
347     public Object getObjectById(String id) {
348         return $objectMap.get(id);
349     }
350 
351     @Override
352     public void processDataBinding(String $binding, boolean $force) {
353         if (!$force && $activeBindings.contains($binding)) { 
354             return;
355         }
356         $activeBindings.add($binding);
357         try {
358             if (allComponentsCreated && $bindings.containsKey($binding)) {
359                 getDataBinding($binding).processDataBinding();
360             }
361         } finally {
362             $activeBindings.remove($binding);
363         }
364     }
365 
366     @Override
367     public void processDataBinding(String $binding) {
368         processDataBinding($binding, false);
369     }
370 
371     @Override
372     public void registerDataBinding(JAXXBinding binding) {
373         $bindings.put(binding.getId(), binding);
374     }
375 
376     @Override
377     public void removeDataBinding(String $binding) {
378         if (allComponentsCreated && $bindings.containsKey($binding)) {
379             getDataBinding($binding).removeDataBinding();
380         }
381     }
382 
383     /*-----------------------------------------------------------------------*/
384     /*--------------------- JAXXContext implementation  ---------------------*/
385     /*-----------------------------------------------------------------------*/
386 
387     @Override
388     public <T> T getContextValue(Class<T> clazz) {
389         return delegateContext.getContextValue(clazz, null);
390     }
391 
392     @Override
393     public <T> T getContextValue(Class<T> clazz, String name) {
394         return delegateContext.getContextValue(clazz, name);
395     }
396 
397     @Override
398     public JAXXContext getDelegateContext() {
399         return delegateContext;
400     }
401 
402     @Override
403     public <O extends Container> O getParentContainer(Class<O> clazz) {
404         return SwingUtil.getParentContainer(this, clazz);
405     }
406 
407     @Override
408     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
409         return SwingUtil.getParentContainer(source, clazz);
410     }
411 
412     @Override
413     public <T> void removeContextValue(Class<T> clazz) {
414         delegateContext.removeContextValue(clazz, null);
415     }
416 
417     @Override
418     public <T> void removeContextValue(Class<T> clazz, String name) {
419         delegateContext.removeContextValue(clazz, name);
420     }
421 
422     @Override
423     public <T> void setContextValue(T o) {
424         delegateContext.setContextValue(o, null);
425     }
426 
427     @Override
428     public <T> void setContextValue(T o, String name) {
429         delegateContext.setContextValue(o, name);
430     }
431 
432     /*-----------------------------------------------------------------------*/
433     /*---------------------------- Event methods ----------------------------*/
434     /*-----------------------------------------------------------------------*/
435 
436     public void doActionPerformed__on__acceptButton(ActionEvent event) {
437         if (log.isDebugEnabled()) {
438             log.debug(event);
439         }
440         handler.accept();
441     }
442 
443     public void doActionPerformed__on__cancelButton(ActionEvent event) {
444         if (log.isDebugEnabled()) {
445             log.debug(event);
446         }
447         handler.cancel();
448     }
449 
450     public void doKeyReleased__on__loginField(KeyEvent event) {
451         if (log.isDebugEnabled()) {
452             log.debug(event);
453         }
454         handler.setText(event, LoginUIModel.PROPERTY_LOGIN);
455     }
456 
457     public void doKeyReleased__on__passwordField(KeyEvent event) {
458         if (log.isDebugEnabled()) {
459             log.debug(event);
460         }
461         handler.setText(event, LoginUIModel.PROPERTY_PASSWORD);
462     }
463 
464     /*-----------------------------------------------------------------------*/
465     /*----------------------- Public acessor methods  -----------------------*/
466     /*-----------------------------------------------------------------------*/
467 
468     public JButton getAcceptButton() {
469         return acceptButton;
470     }
471 
472     public JButton getCancelButton() {
473         return cancelButton;
474     }
475 
476     public LoginUIHandler getHandler() {
477         return handler;
478     }
479 
480     public JLabel getInfoMessage() {
481         return infoMessage;
482     }
483 
484     public JTextField getLoginField() {
485         return loginField;
486     }
487 
488     public JLabel getLoginLabel() {
489         return loginLabel;
490     }
491 
492     public Table getMainPanel() {
493         return mainPanel;
494     }
495 
496     public LoginUIModel getModel() {
497         return model;
498     }
499 
500     public JPasswordField getPasswordField() {
501         return passwordField;
502     }
503 
504     public JLabel getPasswordLabel() {
505         return passwordLabel;
506     }
507 
508     /*-----------------------------------------------------------------------*/
509     /*--------------------- Protected acessors methods  ---------------------*/
510     /*-----------------------------------------------------------------------*/
511 
512     protected JPanel get$JPanel0() {
513         return $JPanel0;
514     }
515 
516     /*-----------------------------------------------------------------------*/
517     /*--------------------- Components creation methods ---------------------*/
518     /*-----------------------------------------------------------------------*/
519 
520     protected void addChildrenToLoginDialog() {
521         if (!allComponentsCreated) {
522             return;
523         }
524         add(mainPanel);
525     }
526 
527     protected void addChildrenToMainPanel() {
528         if (!allComponentsCreated) {
529             return;
530         }
531         mainPanel.add(infoMessage, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
532         mainPanel.add(loginLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
533         mainPanel.add(loginField, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
534         mainPanel.add(passwordLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
535         mainPanel.add(passwordField, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
536         mainPanel.add($JPanel0, new GridBagConstraints(0, 3, 2, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
537     }
538 
539     protected void createAcceptButton() {
540         $objectMap.put("acceptButton", acceptButton = new JButton());
541         
542         acceptButton.setName("acceptButton");
543         acceptButton.setText(t("quadrige3.common.validate"));
544         acceptButton.setToolTipText(t("quadrige3.common.validate"));
545         acceptButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__acceptButton"));
546     }
547 
548     protected void createCancelButton() {
549         $objectMap.put("cancelButton", cancelButton = new JButton());
550         
551         cancelButton.setName("cancelButton");
552         cancelButton.setText(t("quadrige3.common.cancel"));
553         cancelButton.setToolTipText(t("quadrige3.common.cancel"));
554         cancelButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__cancelButton"));
555     }
556 
557     protected LoginUIHandler createHandler() {
558         return new LoginUIHandler();
559     }
560 
561     protected void createInfoMessage() {
562         $objectMap.put("infoMessage", infoMessage = new JLabel());
563         
564         infoMessage.setName("infoMessage");
565     }
566 
567     protected void createLoginField() {
568         $objectMap.put("loginField", loginField = new JTextField());
569         
570         loginField.setName("loginField");
571         loginField.setColumns(15);
572         loginField.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyReleased", this, "doKeyReleased__on__loginField"));
573     }
574 
575     protected void createLoginLabel() {
576         $objectMap.put("loginLabel", loginLabel = new JLabel());
577         
578         loginLabel.setName("loginLabel");
579         loginLabel.setText(t("quadrige3.login.field.login"));
580     }
581 
582     protected void createMainPanel() {
583         $objectMap.put("mainPanel", mainPanel = new Table());
584         
585         mainPanel.setName("mainPanel");
586     }
587 
588     protected void createModel() {
589         $objectMap.put("model", model = getContextValue(LoginUIModel.class));
590     }
591 
592     protected void createPasswordField() {
593         $objectMap.put("passwordField", passwordField = new JPasswordField());
594         
595         passwordField.setName("passwordField");
596         passwordField.setColumns(15);
597         passwordField.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyReleased", this, "doKeyReleased__on__passwordField"));
598     }
599 
600     protected void createPasswordLabel() {
601         $objectMap.put("passwordLabel", passwordLabel = new JLabel());
602         
603         passwordLabel.setName("passwordLabel");
604         passwordLabel.setText(t("quadrige3.login.field.password"));
605     }
606 
607     /*-----------------------------------------------------------------------*/
608     /*------------------------ Internal jaxx methods ------------------------*/
609     /*-----------------------------------------------------------------------*/
610 
611     private void $completeSetup() {
612         allComponentsCreated = true;
613         if (log.isDebugEnabled()) {
614             log.debug(this);
615         }
616         addChildrenToLoginDialog();
617         addChildrenToMainPanel();
618         // inline complete setup of $JPanel0
619         $JPanel0.add(cancelButton);
620         $JPanel0.add(acceptButton);
621         
622         // apply 3 data bindings
623         JAXXUtil.applyDataBinding(this, $bindings.keySet());
624         
625         // apply 9 property setters
626         infoMessage.setIcon(SwingUtil.createActionIcon("information"));
627         loginLabel.setLabelFor(loginField);
628         passwordLabel.setLabelFor(passwordField);
629         cancelButton.setMnemonic(SwingUtil.getFirstCharAt(t("quadrige3.common.cancel.mnemonic"),'Z'));
630         cancelButton.setIcon(SwingUtil.createActionIcon("cancel"));
631         acceptButton.setMnemonic(SwingUtil.getFirstCharAt(t("quadrige3.common.validate.mnemonic"),'Z'));
632         acceptButton.setIcon(SwingUtil.createActionIcon("accept"));
633         // late initializer
634         loginDialog.pack();
635     }
636 
637     private void $initialize() {
638         if (allComponentsCreated) {
639             return;
640         }
641         if (log.isDebugEnabled()) {
642             log.debug(this);
643         }
644         handler.beforeInit(this);
645         $objectMap.put("loginDialog", loginDialog);
646         createModel();
647         createMainPanel();
648         createInfoMessage();
649         createLoginLabel();
650         createLoginField();
651         createPasswordLabel();
652         createPasswordField();
653         // inline creation of $JPanel0
654         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
655         
656         $JPanel0.setName("$JPanel0");
657         $JPanel0.setLayout(new GridLayout(1,0));
658         createCancelButton();
659         createAcceptButton();
660         // inline creation of loginDialog
661         setName("loginDialog");
662         loginDialog.getContentPane().setLayout(new BorderLayout());
663         setResizable(false);
664         setTitle(t("quadrige3.login.title"));
665         
666         // registers 3 data bindings
667         $registerDefaultBindings();
668         $completeSetup();
669         handler.afterInit(this);
670     }
671 
672     private void $registerDefaultBindings() {
673         // register 3 data bindings
674         registerDataBinding(new DefaultJAXXBinding(this, BINDING_LOGIN_FIELD_TEXT, true) {
675         
676             @Override
677             public void applyDataBinding() {
678                 if (model != null) {
679                     model.addPropertyChangeListener("login", this);
680                 }
681             }
682         
683             @Override
684             public void processDataBinding() {
685                 if (model != null) {
686                     SwingUtil.setText(loginField, model.getLogin());
687                 }
688             }
689         
690             @Override
691             public void removeDataBinding() {
692                 if (model != null) {
693                     model.removePropertyChangeListener("login", this);
694                 }
695             }
696         });
697         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PASSWORD_FIELD_TEXT, true) {
698         
699             @Override
700             public void applyDataBinding() {
701                 if (model != null) {
702                     model.addPropertyChangeListener("password", this);
703                 }
704             }
705         
706             @Override
707             public void processDataBinding() {
708                 if (model != null) {
709                     SwingUtil.setText(passwordField, model.getPassword());
710                 }
711             }
712         
713             @Override
714             public void removeDataBinding() {
715                 if (model != null) {
716                     model.removePropertyChangeListener("password", this);
717                 }
718             }
719         });
720         registerDataBinding(new DefaultJAXXBinding(this, BINDING_ACCEPT_BUTTON_ENABLED, true) {
721         
722             @Override
723             public void applyDataBinding() {
724                 if (loginField != null) {
725                     $bindingSources.put("loginField.getDocument()", loginField.getDocument());
726                     loginField.getDocument().addDocumentListener( JAXXUtil.getEventListener(DocumentListener.class, this, "$pr$u0"));
727                     loginField.addPropertyChangeListener("document", JAXXUtil.getDataBindingUpdateListener(fr.ifremer.quadrige3.ui.swing.content.login.LoginUI.this, BINDING_ACCEPT_BUTTON_ENABLED));
728                 }
729             }
730         
731             @Override
732             public void processDataBinding() {
733                 if (loginField != null) {
734                     acceptButton.setEnabled(StringUtils.isNotBlank(loginField.getText()));
735                 }
736             }
737         
738             @Override
739             public void removeDataBinding() {
740                 if (loginField != null) {
741                     Document $target = (Document) $bindingSources.remove("loginField.getDocument()");
742                     if ($target != null) {
743                         $target.removeDocumentListener( JAXXUtil.getEventListener(DocumentListener.class, this, "$pr$u0"));
744                     }
745                     loginField.removePropertyChangeListener("document", JAXXUtil.getDataBindingUpdateListener(fr.ifremer.quadrige3.ui.swing.content.login.LoginUI.this, BINDING_ACCEPT_BUTTON_ENABLED));
746                 }
747             }
748         
749             public void $pr$u0(DocumentEvent event) {
750                 if (log.isDebugEnabled()) {
751                     log.debug(event);
752                 }
753                 propertyChange(null);
754             }
755         });
756     }
757 
758 }