001 package org.springframework.binding.form.support; 002 003 import org.springframework.binding.form.FieldMetadata; 004 import org.springframework.binding.form.FormModel; 005 import org.springframework.binding.value.support.AbstractPropertyChangePublisher; 006 007 import java.beans.PropertyChangeEvent; 008 import java.beans.PropertyChangeListener; 009 import java.util.HashMap; 010 import java.util.Map; 011 012 /** 013 * FieldMetadata implementation for read-only properties 014 */ 015 public class ReadOnlyFieldMetadata extends AbstractPropertyChangePublisher implements FieldMetadata { 016 017 private Class propertyType; 018 019 private boolean enabled = true; 020 021 private boolean oldEnabled; 022 023 private FormModel formModel; 024 025 private final PropertyChangeListener formChangeHandler = new FormModelChangeHandler(); 026 027 private final Map userMetadata = new HashMap(); 028 029 public ReadOnlyFieldMetadata(FormModel formModel, Class propertyType) { 030 this(formModel, propertyType, null); 031 } 032 033 public ReadOnlyFieldMetadata(FormModel formModel, Class propertyType, Map userMetadata) { 034 this.propertyType = propertyType; 035 this.formModel = formModel; 036 this.formModel.addPropertyChangeListener(ENABLED_PROPERTY, formChangeHandler); 037 if(userMetadata != null) { 038 this.userMetadata.putAll(userMetadata); 039 } 040 } 041 042 public Map getAllUserMetadata() { 043 return userMetadata; 044 } 045 046 public Class getPropertyType() { 047 return propertyType; 048 } 049 050 public Object getUserMetadata(String key) { 051 return userMetadata.get(key); 052 } 053 054 public boolean isDirty() { 055 return false; 056 } 057 058 public boolean isEnabled() { 059 return enabled && formModel.isEnabled(); 060 } 061 062 public boolean isReadOnly() { 063 return true; 064 } 065 066 public void setEnabled(boolean enabled) { 067 this.enabled = enabled; 068 firePropertyChange(ENABLED_PROPERTY, oldEnabled, isEnabled()); 069 oldEnabled = isEnabled(); 070 } 071 072 public void setReadOnly(boolean readOnly) { 073 } 074 075 /** 076 * Responsible for listening for changes to the enabled 077 * property of the FormModel 078 */ 079 private class FormModelChangeHandler implements PropertyChangeListener { 080 public void propertyChange(PropertyChangeEvent evt) { 081 if (FormModel.ENABLED_PROPERTY.equals(evt.getPropertyName())) { 082 firePropertyChange(ENABLED_PROPERTY, Boolean.valueOf(oldEnabled), Boolean.valueOf(isEnabled())); 083 oldEnabled = isEnabled(); 084 } 085 } 086 } 087 }