View Javadoc

1   /*
2    * EL4J, the Extension Library for the J2EE, adds incremental enhancements to
3    * the spring framework, http://el4j.sf.net
4    * Copyright (C) 2005 by ELCA Informatique SA, Av. de la Harpe 22-24,
5    * 1000 Lausanne, Switzerland, http://www.elca.ch
6    *
7    * EL4J is published under the GNU Lesser General Public License (LGPL)
8    * Version 2.1. See http://www.gnu.org/licenses/
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU Lesser General Public License for more details.
14   *
15   * For alternative licensing, please contact info@elca.ch
16   */
17  package com.silvermindsoftware.hitch.binding.components;
18  
19  import java.util.List;
20  
21  import javax.swing.JList;
22  import javax.swing.ListCellRenderer;
23  
24  import org.slf4j.Logger;
25  import org.slf4j.LoggerFactory;
26  import org.jdesktop.beansbinding.AutoBinding;
27  import org.jdesktop.beansbinding.Property;
28  import org.jdesktop.swingbinding.JListBinding;
29  import org.jdesktop.swingbinding.SwingBindings;
30  
31  import com.silvermindsoftware.hitch.binding.AbstractBindingCreator;
32  import com.silvermindsoftware.hitch.binding.PropertyUtil;
33  
34  import ch.elca.el4j.services.gui.swing.GUIApplication;
35  import ch.elca.el4j.util.config.GenericConfig;
36  
37  /**
38   * This class creates bindings for lists.
39   *
40   * @svnLink $Revision: 3880 $;$Date: 2009-08-04 15:17:52 +0200 (Di, 04. Aug 2009) $;$Author: swismer $;$URL: https://el4j.svn.sourceforge.net/svnroot/el4j/branches/el4j_3_1/el4j/framework/modules/swing/src/main/java/com/silvermindsoftware/hitch/binding/components/ListBinding.java $
41   *
42   * @author Stefan Wismer (SWI)
43   */
44  public class ListBinding extends AbstractBindingCreator<JList> {
45  	/**
46  	 * The logger.
47  	 */
48  	private static Logger s_logger = LoggerFactory.getLogger(ListBinding.class);
49  	
50  	/**
51  	 * Which property to show in the list.
52  	 */
53  	private Property<?, ?> m_property;
54  	
55  	/**
56  	 * @param property    which property to show in the list
57  	 */
58  	public ListBinding(String property) {
59  		this(PropertyUtil.create(property));
60  	}
61  	
62  	/**
63  	 * @param property    which property to show in the list
64  	 */
65  	public ListBinding(Property<?, ?> property) {
66  		m_property = property;
67  	}
68  
69  	/** {@inheritDoc} */
70  	@SuppressWarnings("unchecked")
71  	public AutoBinding createBinding(Object object, JList formComponent) {
72  		if (!List.class.isAssignableFrom(object.getClass())) {
73  			s_logger.error("Cannot bind object " + object.toString()
74  				+ " to list component, because it is not a list.");
75  			return null;
76  		}
77  		List list = (List) object;
78  		JListBinding lb = SwingBindings.createJListBinding(
79  			m_updateStrategy, list, formComponent);
80  		
81  		// show property
82  		lb.setDetailBinding(m_property);
83  		
84  		return lb;
85  	}
86  	
87  	/** {@inheritDoc} */
88  	public void addValidation(JList formComponent) {
89  		GenericConfig config = GUIApplication.getInstance().getConfig();
90  		formComponent.setCellRenderer(
91  			(ListCellRenderer) config.get("cellRenderer"));
92  	}
93  
94  }