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