Revision: 1204
Author:   ge0ffrey
Date:     2006-06-17 07:23:08 -0700 (Sat, 17 Jun 2006)
ViewCVS:  http://svn.sourceforge.net/spring-rich-c/?rev=1204&view=rev

Log Message:
-----------
RCP-349 tiger enum combobox binder

Added Paths:
-----------
    
trunk/spring-richclient/tiger/src/main/java/org/springframework/richclient/form/
    
trunk/spring-richclient/tiger/src/main/java/org/springframework/richclient/form/binding/
    
trunk/spring-richclient/tiger/src/main/java/org/springframework/richclient/form/binding/swing/
    
trunk/spring-richclient/tiger/src/main/java/org/springframework/richclient/form/binding/swing/TigerEnumComboBoxBinder.java
Added: 
trunk/spring-richclient/tiger/src/main/java/org/springframework/richclient/form/binding/swing/TigerEnumComboBoxBinder.java
===================================================================
--- 
trunk/spring-richclient/tiger/src/main/java/org/springframework/richclient/form/binding/swing/TigerEnumComboBoxBinder.java
                          (rev 0)
+++ 
trunk/spring-richclient/tiger/src/main/java/org/springframework/richclient/form/binding/swing/TigerEnumComboBoxBinder.java
  2006-06-17 14:23:08 UTC (rev 1204)
@@ -0,0 +1,134 @@
+package org.springframework.richclient.form.binding.swing;
+
+import org.springframework.binding.form.FormModel;
+import org.springframework.binding.value.ValueModel;
+import org.springframework.binding.value.support.ValueHolder;
+import org.springframework.context.support.MessageSourceAccessor;
+import org.springframework.richclient.application.ApplicationServicesLocator;
+import org.springframework.richclient.form.binding.Binding;
+import org.springframework.richclient.form.binding.swing.ComboBoxBinder;
+import org.springframework.richclient.form.binding.swing.ComboBoxBinding;
+import org.springframework.richclient.list.TextValueListRenderer;
+import org.springframework.util.Assert;
+
+import javax.swing.ComboBoxEditor;
+import javax.swing.JComponent;
+import java.awt.Component;
+import java.awt.event.ActionListener;
+import java.util.Map;
+
+/**
+ * Binds a Tiger enum in a combobox and supports i18n.
+ * The i18n key of an enum is the full classname + "." + enumfield.
+ * For example:
+ * x.y.Season.WINTER = Winter
+ *
+ * configuration happens like this:
+ *
+ *  <bean id="binderSelectionStrategy"
+ *          
class="org.springframework.richclient.form.binding.swing.SwingBinderSelectionStrategy">
+ *      <property name="bindersForPropertyTypes">
+ *          <map>
+ *              <entry>
+ *                  <key>
+ *                      <value 
type="java.lang.Class">java.lang.Enum</value>
+ *                  </key>
+ *                  <bean 
class="be.kahosl.thot.swingui.util.TigerEnumComboBoxBinder" />
+ *              </entry>
+ *          </map>
+ *      </property>
+ *  </bean>
+ *
+ * @author Geoffrey De Smet
+ */
+public class TigerEnumComboBoxBinder extends ComboBoxBinder {
+
+    protected TigerEnumComboBoxBinder() {
+        super();
+    }
+
+    protected Binding doBind(JComponent control, FormModel formModel, String 
formPropertyPath, Map context) {
+        ComboBoxBinding binding = (ComboBoxBinding) super.doBind(control, 
formModel, formPropertyPath, context);
+        
binding.setSelectableItemsHolder(createEnumSelectableItemsHolder(formModel, 
formPropertyPath));
+        MessageSourceAccessor messageSourceAccessor = (MessageSourceAccessor)
+                
ApplicationServicesLocator.services().getService(MessageSourceAccessor.class);
+        binding.setRenderer(new TigerEnumListRenderer(messageSourceAccessor));
+        binding.setEditor(new TigerEnumComboBoxEditor(messageSourceAccessor, 
binding.getEditor()));
+        return binding;
+    }
+
+    private ValueModel createEnumSelectableItemsHolder(FormModel formModel, 
String formPropertyPath) {
+        Class propertyType = getPropertyType(formModel, formPropertyPath);
+        Class<Enum> enumPropertyType = propertyType;
+        Enum[] enumConstants = enumPropertyType.getEnumConstants();
+        return new ValueHolder(enumConstants);
+    }
+
+
+    public class TigerEnumListRenderer extends TextValueListRenderer {
+
+        private MessageSourceAccessor messageSourceAccessor;
+
+        public TigerEnumListRenderer(MessageSourceAccessor 
messageSourceAccessor) {
+            this.messageSourceAccessor = messageSourceAccessor;
+        }
+
+        protected String getTextValue(Object value) {
+            if (value == null) {
+                return "";
+            }
+            Enum valueEnum = (Enum) value;
+            Class<? extends Enum> valueClass = valueEnum.getClass();
+            return messageSourceAccessor.getMessage(valueClass.getName() + "." 
+ valueEnum.name());
+        }
+
+    }
+
+    public class TigerEnumComboBoxEditor implements ComboBoxEditor {
+
+        private Object current;
+
+        private MessageSourceAccessor messageSourceAccessor;
+
+        private ComboBoxEditor inner;
+
+        public TigerEnumComboBoxEditor(MessageSourceAccessor 
messageSourceAccessor, ComboBoxEditor editor) {
+            Assert.notNull(editor, "Editor cannot be null");
+            this.inner = editor;
+            this.messageSourceAccessor = messageSourceAccessor;
+        }
+
+        public void selectAll() {
+            inner.selectAll();
+        }
+
+        public Component getEditorComponent() {
+            return inner.getEditorComponent();
+        }
+
+        public void addActionListener(ActionListener l) {
+            inner.addActionListener(l);
+        }
+
+        public void removeActionListener(ActionListener l) {
+            inner.removeActionListener(l);
+        }
+
+        public Object getItem() {
+            return current;
+        }
+
+        public void setItem(Object value) {
+            current = value;
+            if (value != null) {
+                Enum valueEnum = (Enum) value;
+                Class<? extends Enum> valueClass = valueEnum.getClass();
+                
inner.setItem(messageSourceAccessor.getMessage(valueClass.getName() + "." + 
valueEnum.name()));
+            } else {
+                inner.setItem(null);
+            }
+        }
+    }
+
+}
+


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
spring-rich-c-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spring-rich-c-cvs

Reply via email to