001 /* 002 * Copyright 2002-2005 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.binding.form; 017 018 import java.util.Map; 019 020 import org.springframework.binding.value.PropertyChangePublisher; 021 022 /** 023 * Encapsulates the state of an individual property of a form model. 024 * 025 * @author Oliver Hutchison 026 */ 027 public interface FieldMetadata extends PropertyChangePublisher { 028 029 /** The name of the bound property <code>enabled</code>. */ 030 public static final String ENABLED_PROPERTY = "enabled"; 031 032 /** The name of the bound property <code>readOnly</code>. */ 033 public static final String READ_ONLY_PROPERTY = "readOnly"; 034 035 /** The name of the bound property <code>dirty</code>. */ 036 public static final String DIRTY_PROPERTY = "dirty"; 037 038 /** 039 * Return the type of this property. 040 */ 041 Class getPropertyType(); 042 043 /** 044 * Returns custom metadata that may be associated with this property. 045 */ 046 Object getUserMetadata(String key); 047 048 /** 049 * Returns all custom metadata associated with this property in the form of 050 * a Map. 051 * 052 * @return Map containing String keys 053 */ 054 Map getAllUserMetadata(); 055 056 /** 057 * Sets whether or not this property is read only. 058 * <p> 059 * It's expected that controls bound to this form property will listen for 060 * changes to this value and if possible modify their display/behaviour to 061 * reflect the new state. e.g. When this property becomes true a text 062 * component would grey its self out and prevent any editing. 063 * <p> 064 * This value will be propagated up to any descendants. 065 * 066 * @param readOnly should this property be read only 067 */ 068 void setReadOnly(boolean readOnly); 069 070 /** 071 * Returns whether or not the property is read only. 072 * <p> 073 * A property is read only if any of the following are true: 074 * <ul> 075 * <li>It is read only at the PropertyAccessStrategy level</li> 076 * <li>It is marked as read only by a call to the setReadOnly method of 077 * this class</li> 078 * <li>It is marked as read only by a call to the setReadOnly method of the 079 * metadata of any ancestor of the form model which contains this property</li> 080 * </ul> 081 */ 082 boolean isReadOnly(); 083 084 /** 085 * Sets the enabled value for this property. 086 * <p> 087 * It's expected that controls bound to this form property will listen for 088 * changes to this value and if possible modify their display/behaviour to 089 * reflect the new state. 090 * <p> 091 * This value will be propagated up to any descendants. 092 * 093 * @param enabled should this property be enabled 094 */ 095 void setEnabled(boolean enabled); 096 097 /** 098 * Returns whether or not the property is enabled. 099 * <p> 100 * A property is enabled if all of the following are true: 101 * <ul> 102 * <li>The owning form model is enabled</li> 103 * <li>It has not been marked as disabled by a call to the setEnabled 104 * method of this class</li> 105 * <li>It has not been marked as disabled by by a call to the setEnabled 106 * method of the metadata of any ancestor of the form model which contains 107 * this property</li> 108 * </ul> 109 */ 110 boolean isEnabled(); 111 112 /** 113 * Returns whether or not the property is dirty. 114 */ 115 boolean isDirty(); 116 }