View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.filter.element.menu;
2   
3   import fr.ifremer.dali.dto.configuration.filter.FilterDTO;
4   import fr.ifremer.dali.ui.swing.DaliHelpBroker;
5   import fr.ifremer.dali.ui.swing.DaliUIContext;
6   import fr.ifremer.dali.ui.swing.content.manage.filter.element.AbstractFilterElementUIHandler;
7   import fr.ifremer.dali.ui.swing.content.manage.filter.element.FilterElementUIModel;
8   import fr.ifremer.dali.ui.swing.util.AbstractDaliUIHandler;
9   import fr.ifremer.dali.ui.swing.util.DaliUI;
10  import fr.ifremer.quadrige3.ui.core.dto.QuadrigeBean;
11  import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
12  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
13  import fr.ifremer.quadrige3.ui.swing.component.bean.ExtendedComboBox;
14  import java.awt.BorderLayout;
15  import java.awt.Component;
16  import java.awt.Container;
17  import java.awt.LayoutManager;
18  import java.util.ArrayList;
19  import java.util.HashMap;
20  import java.util.List;
21  import java.util.Map;
22  import java.util.TreeMap;
23  import javax.swing.BorderFactory;
24  import javax.swing.Box;
25  import javax.swing.BoxLayout;
26  import javax.swing.JButton;
27  import javax.swing.JLabel;
28  import javax.swing.JPanel;
29  import javax.swing.SwingConstants;
30  import jaxx.runtime.JAXXBinding;
31  import jaxx.runtime.JAXXContext;
32  import jaxx.runtime.JAXXObject;
33  import jaxx.runtime.JAXXObjectDescriptor;
34  import jaxx.runtime.JAXXUtil;
35  import jaxx.runtime.SwingUtil;
36  import jaxx.runtime.binding.DefaultJAXXBinding;
37  import jaxx.runtime.context.DefaultJAXXContext;
38  import org.apache.commons.logging.Log;
39  import org.apache.commons.logging.LogFactory;
40  import static org.nuiton.i18n.I18n.t;
41  
42  public class ApplyFilterUI extends JPanel implements DaliUI<ApplyFilterUIModel, ApplyFilterUIHandler>, JAXXObject {
43  
44      /*-----------------------------------------------------------------------*/
45      /*------------------ Constants for all public bindings ------------------*/
46      /*-----------------------------------------------------------------------*/
47  
48      public static final String BINDING_APPLY_FILTER_COMBO_SELECTED_ITEM = "applyFilterCombo.selectedItem";
49  
50      /*-----------------------------------------------------------------------*/
51      /*------------------------- Other static fields -------------------------*/
52      /*-----------------------------------------------------------------------*/
53  
54      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1UTW8jRRAtGzuxnQ2EREQbCFIICJJLG4lj+Nhks9Z65Q3SJkgrjATtmbbTS3u6t6eGjBUt4ifwE+DOBYkbJ8SBMwcuiL+AEAeuiOqeie0kYzkHLHnGrq569ar6VX33J1RjC6894WnKbBKhHAr2YP/x4w97T0SAhyIOrDSoLWSfUhnKXVgKx/YY4fVux4U38/DmXT00OhLRVPReBxoxjpSIT4VAhFcvRwRx3DweH++lJrEXqGNSRajf/P1X+evwq2/LAKkhdgtUyta8qEkllQ6UZYiwSpm+4E3FowHRsDIaEN9lZ7ureBwf8aF4Cl/CYgcWDLcEhrB985I9ho9PDcIyN0aNWlKhsB+1Edp9y2TfiqGwLORKskSy+IwosEBHSIhsyCM+EKzvQ5hQ5OqsIkrY/jSWMT7LAkJ1qEOhEI7+N+yHDnCSYKFn9efCIrw1M8Mh/btPMQfecxK6MlV/h/cczVXX6TSPe+CNzrleGEOd7mmE96YSP014aOVAvDNdX34frCd4xO6lVG0oQh98oNPL8Ese/iBBpK7A2iU2mTX3t/DKJXGRbNlEthNdlbpQtQmZEW53ryv9ER1lGr99ReMO0J/+u772249//NC6EHaNcr9U6Do1lyQ4Y7Whe5Eu9QuZqhOUqvmQm70u1GO64SAb2s0CYsf5MZGjfC+6cObC2X0enxJEdfH3n35e/+zX56DcgobSPGxx59+GOp5a6oJWYWo+uOMZ3Tqr0XOFvhWERqYw3lPUpwrahF7L5H92KAJtOWGQavtcxWSvO/sjEbs9kbtW3C0iLJ57YT9LqXWbBa0b8+/Vf/ln7fj7OxftK1E5GzPdJy2sfgwLMlIyEn4z5ENfuAmWTCySUE+Gu2jcgQZ+5ar48lnY8s83rnWr5MZL29CN19H5gf+VtXnEAis4ihOJSoTZyQ7ubPvBy0c4e93LB9kLm6Hz397dpb65lMw3xP16G67uIzOHXBmhptyAttyNrZ5fHcxn7spESjf35mxWudHjFFG6tiJuwOpWJm0RtlEMaYgzpbCBwAxnZ5eo1fLxGFGLMxLz0vui5qUnfa9+6oJkwFHqaD9wT4SN86kdmhlZ4NRBVBrc/2+7RQyVvozCcec2fefooC8H2SrOrlFl23IJtVYn0px455dnOKM0RbVNr7p5ZTkhKj7S5AzPvxty5Fs94klr8f1r0CX3bNwAseYm+WRk/Bh9UoyzfgOcigyytTwDY4Mw/gOfXPfv3AgAAA==";
55      private static final Log log = LogFactory.getLog(ApplyFilterUI.class);
56      private static final long serialVersionUID = 1L;
57  
58      /*-----------------------------------------------------------------------*/
59      /*--------------------------- Internal states ---------------------------*/
60      /*-----------------------------------------------------------------------*/
61  
62      protected List<Object> $activeBindings = new ArrayList<Object>();
63      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
64      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
65      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
66      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
67      private boolean allComponentsCreated;
68      protected final JAXXContext delegateContext = new DefaultJAXXContext();
69  
70      /*-----------------------------------------------------------------------*/
71      /*------------------------ Protected components  ------------------------*/
72      /*-----------------------------------------------------------------------*/
73  
74      protected JButton applyButton;
75      protected ExtendedComboBox<FilterDTO> applyFilterCombo;
76      protected JLabel applyFilterLabel;
77      protected ApplyFilterUI applyFilterUI = this;
78      protected DaliHelpBroker broker;
79      protected final ApplyFilterUIHandler handler = createHandler();
80      protected ApplyFilterUIModel model;
81  
82      /*-----------------------------------------------------------------------*/
83      /*---------------------- Raw body code from script ----------------------*/
84      /*-----------------------------------------------------------------------*/
85  
86      
87      
88      		@Override
89      		public void setEnabled(boolean enabled) {
90      		  handler.setEnabled(enabled);
91      		}
92  
93      /*-----------------------------------------------------------------------*/
94      /*---------------------------- Constructors  ----------------------------*/
95      /*-----------------------------------------------------------------------*/
96  
97      public ApplyFilterUI(ApplicationUI parentUI) {
98          ApplicationUIUtil.setParentUI(this, parentUI);
99              $initialize();
100     }
101 
102     public ApplyFilterUI() {
103         $initialize();
104     }
105 
106     public ApplyFilterUI(JAXXContext parentContext) {
107         JAXXUtil.initContext(this, parentContext);
108         $initialize();
109     }
110 
111     public ApplyFilterUI(boolean param0) {
112         super(param0);
113         $initialize();
114     }
115 
116     public ApplyFilterUI(JAXXContext parentContext, boolean param1) {
117         super(param1);
118         JAXXUtil.initContext(this, parentContext);
119         $initialize();
120     }
121 
122     public ApplyFilterUI(LayoutManager param0) {
123         super(param0);
124         $initialize();
125     }
126 
127     public ApplyFilterUI(JAXXContext parentContext, LayoutManager param1) {
128         super(param1);
129         JAXXUtil.initContext(this, parentContext);
130         $initialize();
131     }
132 
133     public ApplyFilterUI(LayoutManager param0, boolean param1) {
134         super(param0 ,param1);
135         $initialize();
136     }
137 
138     public ApplyFilterUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
139         super(param1 ,param2);
140         JAXXUtil.initContext(this, parentContext);
141         $initialize();
142     }
143 
144     /*-----------------------------------------------------------------------*/
145     /*--------------------------- Statics methods ---------------------------*/
146     /*-----------------------------------------------------------------------*/
147 
148     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
149         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
150     }
151 
152     /*-----------------------------------------------------------------------*/
153     /*---------------------- JAXXObject implementation ----------------------*/
154     /*-----------------------------------------------------------------------*/
155 
156     @Override
157     public void applyDataBinding(String $binding) {
158         if (allComponentsCreated && $bindings.containsKey($binding)) {
159             getDataBinding($binding).applyDataBinding();
160         }
161         processDataBinding($binding);
162     }
163 
164     @Override
165     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
166         super.firePropertyChange(propertyName, oldValue, newValue);
167     }
168 
169     @Override
170     public Map<String, Object> get$objectMap() {
171         return $objectMap;
172     }
173 
174     @Override
175     public JAXXBinding getDataBinding(String bindingId) {
176         return $bindings.get(bindingId);
177     }
178 
179     @Override
180     public JAXXBinding[] getDataBindings() {
181         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
182     }
183 
184     @Override
185     public Object getObjectById(String id) {
186         return $objectMap.get(id);
187     }
188 
189     @Override
190     public void processDataBinding(String $binding, boolean $force) {
191         if (!$force && $activeBindings.contains($binding)) { 
192             return;
193         }
194         $activeBindings.add($binding);
195         try {
196             if (allComponentsCreated && $bindings.containsKey($binding)) {
197                 getDataBinding($binding).processDataBinding();
198             }
199         } finally {
200             $activeBindings.remove($binding);
201         }
202     }
203 
204     @Override
205     public void processDataBinding(String $binding) {
206         processDataBinding($binding, false);
207     }
208 
209     @Override
210     public void registerDataBinding(JAXXBinding binding) {
211         $bindings.put(binding.getId(), binding);
212     }
213 
214     @Override
215     public void removeDataBinding(String $binding) {
216         if (allComponentsCreated && $bindings.containsKey($binding)) {
217             getDataBinding($binding).removeDataBinding();
218         }
219     }
220 
221     /*-----------------------------------------------------------------------*/
222     /*--------------------- JAXXContext implementation  ---------------------*/
223     /*-----------------------------------------------------------------------*/
224 
225     @Override
226     public <T> T getContextValue(Class<T> clazz) {
227         return delegateContext.getContextValue(clazz, null);
228     }
229 
230     @Override
231     public <T> T getContextValue(Class<T> clazz, String name) {
232         return delegateContext.getContextValue(clazz, name);
233     }
234 
235     @Override
236     public JAXXContext getDelegateContext() {
237         return delegateContext;
238     }
239 
240     @Override
241     public <O extends Container> O getParentContainer(Class<O> clazz) {
242         return SwingUtil.getParentContainer(this, clazz);
243     }
244 
245     @Override
246     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
247         return SwingUtil.getParentContainer(source, clazz);
248     }
249 
250     @Override
251     public <T> void removeContextValue(Class<T> clazz) {
252         delegateContext.removeContextValue(clazz, null);
253     }
254 
255     @Override
256     public <T> void removeContextValue(Class<T> clazz, String name) {
257         delegateContext.removeContextValue(clazz, name);
258     }
259 
260     @Override
261     public <T> void setContextValue(T o) {
262         delegateContext.setContextValue(o, null);
263     }
264 
265     @Override
266     public <T> void setContextValue(T o, String name) {
267         delegateContext.setContextValue(o, name);
268     }
269 
270     /*-----------------------------------------------------------------------*/
271     /*----------------------- Public acessor methods  -----------------------*/
272     /*-----------------------------------------------------------------------*/
273 
274     public JButton getApplyButton() {
275         return applyButton;
276     }
277 
278     public ExtendedComboBox<FilterDTO> getApplyFilterCombo() {
279         return applyFilterCombo;
280     }
281 
282     public JLabel getApplyFilterLabel() {
283         return applyFilterLabel;
284     }
285 
286     public DaliHelpBroker getBroker() {
287         return broker;
288     }
289 
290     public ApplyFilterUIHandler getHandler() {
291         return handler;
292     }
293 
294     public ApplyFilterUIModel getModel() {
295         return model;
296     }
297 
298     /*-----------------------------------------------------------------------*/
299     /*--------------------- Components creation methods ---------------------*/
300     /*-----------------------------------------------------------------------*/
301 
302     protected void addChildrenToApplyFilterUI() {
303         if (!allComponentsCreated) {
304             return;
305         }
306         add(applyFilterLabel, BorderLayout.PAGE_START);
307         add(applyFilterCombo, BorderLayout.CENTER);
308         add(applyButton, BorderLayout.PAGE_END);
309     }
310 
311     protected void createApplyButton() {
312         $objectMap.put("applyButton", applyButton = new JButton());
313         
314         applyButton.setName("applyButton");
315         applyButton.setText(t("dali.config.menu.apply.label"));
316         applyButton.setToolTipText(t("dali.config.menu.apply.tip"));
317         applyButton.putClientProperty("applicationAction", ApplyFilterAction.class);
318     }
319 
320     protected void createApplyFilterCombo() {
321         $objectMap.put("applyFilterCombo", applyFilterCombo = new ExtendedComboBox<FilterDTO>(this));
322         
323         applyFilterCombo.setName("applyFilterCombo");
324         applyFilterCombo.setFilterable(true);
325         applyFilterCombo.setShowDecorator(false);
326         applyFilterCombo.setProperty("filter");
327         applyFilterCombo.setShowReset(true);
328     }
329 
330     protected void createApplyFilterLabel() {
331         $objectMap.put("applyFilterLabel", applyFilterLabel = new JLabel());
332         
333         applyFilterLabel.setName("applyFilterLabel");
334         applyFilterLabel.setText(t("dali.filter.filterElement.filter.label"));
335     }
336 
337     protected void createBroker() {
338         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
339     }
340 
341     protected ApplyFilterUIHandler createHandler() {
342         return new ApplyFilterUIHandler();
343     }
344 
345     protected void createModel() {
346         $objectMap.put("model", model = getContextValue(ApplyFilterUIModel.class));
347     }
348 
349     /*-----------------------------------------------------------------------*/
350     /*------------------------ Internal jaxx methods ------------------------*/
351     /*-----------------------------------------------------------------------*/
352 
353     private void $completeSetup() {
354         allComponentsCreated = true;
355         if (log.isDebugEnabled()) {
356             log.debug(this);
357         }
358         addChildrenToApplyFilterUI();
359         
360         // apply 1 data bindings
361         JAXXUtil.applyDataBinding(this, $bindings.keySet());
362         
363         // apply 6 property setters
364         applyFilterCombo.setBeanType(FilterDTO.class);
365         setBorder(BorderFactory.createTitledBorder(t("dali.filter.filterElement.apply.title")));
366         applyFilterLabel.setLabelFor(applyFilterCombo);
367         applyFilterCombo.setBean(model);
368         applyButton.setIcon(SwingUtil.createActionIcon("find"));
369     }
370 
371     private void $initialize() {
372         if (allComponentsCreated) {
373             return;
374         }
375         if (log.isDebugEnabled()) {
376             log.debug(this);
377         }
378         handler.beforeInit(this);
379         $objectMap.put("applyFilterUI", applyFilterUI);
380         createModel();
381         createBroker();
382         createApplyFilterLabel();
383         createApplyFilterCombo();
384         createApplyButton();
385         // inline creation of applyFilterUI
386         setName("applyFilterUI");
387         setLayout(new BorderLayout());
388         
389         // registers 1 data bindings
390         $registerDefaultBindings();
391         $completeSetup();
392         handler.afterInit(this);
393     }
394 
395     private void $registerDefaultBindings() {
396         // register 1 data bindings
397         registerDataBinding(new DefaultJAXXBinding(this, BINDING_APPLY_FILTER_COMBO_SELECTED_ITEM, true) {
398         
399             @Override
400             public void applyDataBinding() {
401                 if (model != null) {
402                     model.addPropertyChangeListener("filter", this);
403                 }
404             }
405         
406             @Override
407             public void processDataBinding() {
408                 if (model != null) {
409                     applyFilterCombo.setSelectedItem(model.getFilter());
410                 }
411             }
412         
413             @Override
414             public void removeDataBinding() {
415                 if (model != null) {
416                     model.removePropertyChangeListener("filter", this);
417                 }
418             }
419         });
420     }
421 
422 }