001 // Copyright 2004, 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry.form; 016 017 /** 018 * Decorates an underlying {@link IPropertySelectionModel}adding an initial property. The label, 019 * option, and value of the initial property are configurable. 020 * 021 * @author Paul Ferraro 022 * @since 4.0 023 */ 024 public class LabeledPropertySelectionModel implements IPropertySelectionModel 025 { 026 /** 027 * Empty model implementation. Avoids NullPointerExceptions when default constructor is used. 028 */ 029 private static final IPropertySelectionModel EMPTY_MODEL = new IPropertySelectionModel() 030 { 031 /** 032 * @see org.apache.tapestry.form.IPropertySelectionModel#getOptionCount() 033 */ 034 public int getOptionCount() 035 { 036 return 0; 037 } 038 039 /** 040 * @see org.apache.tapestry.form.IPropertySelectionModel#getOption(int) 041 */ 042 public Object getOption(int index) 043 { 044 return null; 045 } 046 047 /** 048 * @see org.apache.tapestry.form.IPropertySelectionModel#getLabel(int) 049 */ 050 public String getLabel(int index) 051 { 052 return null; 053 } 054 055 /** 056 * @see org.apache.tapestry.form.IPropertySelectionModel#getValue(int) 057 */ 058 public String getValue(int index) 059 { 060 return null; 061 } 062 063 public boolean isDisabled(int index) 064 { 065 return false; 066 } 067 068 /** 069 * @see org.apache.tapestry.form.IPropertySelectionModel#translateValue(java.lang.String) 070 */ 071 public Object translateValue(String value) 072 { 073 return null; 074 } 075 }; 076 077 private IPropertySelectionModel _model; 078 079 private String _label = ""; 080 081 private Object _option = null; 082 083 private String _value = ""; 084 085 /** 086 * Constructs a new LabeledPropertySelectionModel using an empty model and default label, 087 * option, and value. Default constructor is made available so that this model may be specified 088 * as a component helper bean. 089 */ 090 public LabeledPropertySelectionModel() 091 { 092 this(EMPTY_MODEL); 093 } 094 095 /** 096 * Constructs a new LabeledPropertySelectionModel using the specified model and default label, 097 * option, and value. 098 * 099 * @param model 100 * the underlying model to decorate 101 */ 102 public LabeledPropertySelectionModel(IPropertySelectionModel model) 103 { 104 _model = model; 105 } 106 107 /** 108 * Constructs a new LabeledPropertySelectionModel using the specified model and label, and 109 * default option and value. 110 * 111 * @param model 112 * the underlying model to decorate 113 * @param label 114 * the label of the initial property 115 */ 116 public LabeledPropertySelectionModel(IPropertySelectionModel model, String label) 117 { 118 this(model); 119 120 _label = label; 121 } 122 123 /** 124 * Constructs a new LabeledPropertySelectionModel using the specified model, label, and option; 125 * and default value. 126 * 127 * @param model 128 * the underlying model to decorate 129 * @param label 130 * the label of the initial property 131 * @param option 132 * the option value of the initial property 133 */ 134 public LabeledPropertySelectionModel(IPropertySelectionModel model, String label, Object option) 135 { 136 this(model, label); 137 138 _option = option; 139 } 140 141 /** 142 * Constructs a new LabeledPropertySelectionModel using the specified model, label, option, and 143 * value. 144 * 145 * @param model 146 * the underlying model to decorate 147 * @param label 148 * the label of the initial property 149 * @param option 150 * the option value of the initial property 151 * @param value 152 * the value of the initial property 153 */ 154 public LabeledPropertySelectionModel(IPropertySelectionModel model, String label, Object option, String value) 155 { 156 this(model, label, option); 157 158 _value = value; 159 } 160 161 /** 162 * Returns the underlying IPropertySelectionModel. 163 * 164 * @return the underlying IPropertySelectionModel 165 */ 166 public IPropertySelectionModel getModel() 167 { 168 return _model; 169 } 170 171 /** 172 * Sets the underlying IPropertySelectionModel. 173 * 174 * @param model 175 * the IPropertySelectionModel to set 176 */ 177 public void setModel(IPropertySelectionModel model) 178 { 179 _model = model; 180 } 181 182 /** 183 * @see org.apache.tapestry.form.IPropertySelectionModel#getOptionCount() 184 */ 185 public int getOptionCount() 186 { 187 return _model.getOptionCount() + 1; 188 } 189 190 /** 191 * @see org.apache.tapestry.form.IPropertySelectionModel#getOption(int) 192 */ 193 public Object getOption(int index) 194 { 195 return (index == 0) ? _option : _model.getOption(index - 1); 196 } 197 198 /** 199 * @see org.apache.tapestry.form.IPropertySelectionModel#getLabel(int) 200 */ 201 public String getLabel(int index) 202 { 203 return (index == 0) ? _label : _model.getLabel(index - 1); 204 } 205 206 /** 207 * @see org.apache.tapestry.form.IPropertySelectionModel#getValue(int) 208 */ 209 public String getValue(int index) 210 { 211 return (index == 0) ? _value : _model.getValue(index - 1); 212 } 213 214 public boolean isDisabled(int index) 215 { 216 return index == 0 && _option == null; 217 } 218 219 /** 220 * @see org.apache.tapestry.form.IPropertySelectionModel#translateValue(java.lang.String) 221 */ 222 public Object translateValue(String value) 223 { 224 if (value == null) 225 return null; 226 227 return value.equals(_value) ? _option : _model.translateValue(value); 228 } 229 230 /** 231 * Returns the label of the initial IPropertySelectionModel option. 232 * 233 * @return a IPropertySelectionModel option label 234 */ 235 public String getLabel() 236 { 237 return _label; 238 } 239 240 /** 241 * Sets the label of the initial IPropertySelectionModel option. 242 * 243 * @param label 244 * a IPropertySelectionModel option label 245 */ 246 public void setLabel(String label) 247 { 248 _label = label; 249 } 250 251 /** 252 * Returns the value of the initial IPropertySelectionModel option. 253 * 254 * @return a IPropertySelectionModel option value 255 */ 256 public String getValue() 257 { 258 return _value; 259 } 260 261 /** 262 * Sets the value of the initial IPropertySelectionModel option. 263 * 264 * @param value 265 * a IPropertySelectionModel option value 266 */ 267 public void setValue(String value) 268 { 269 _value = value; 270 } 271 272 /** 273 * Returns the initial option. 274 * 275 * @return a PropertySelectionModel option 276 */ 277 public Object getOption() 278 { 279 return _option; 280 } 281 282 /** 283 * Sets the initial IPropertySelectionModel option. 284 * 285 * @param option 286 * a IPropertySelectionModel option 287 */ 288 public void setOption(Object option) 289 { 290 _option = option; 291 } 292 }