1 package fr.improve.struts.taglib.layout.field; 2 3 import java.util.Collection ; 4 import java.util.Iterator ; 5 6 import javax.servlet.jsp.JspException ; 7 8 import org.apache.struts.util.ResponseUtils; 9 10 import fr.improve.struts.taglib.layout.FormTag; 11 import fr.improve.struts.taglib.layout.LabelledTag; 12 import fr.improve.struts.taglib.layout.el.Expression; 13 import fr.improve.struts.taglib.layout.event.EndLayoutEvent; 14 import fr.improve.struts.taglib.layout.event.StartLayoutEvent; 15 import fr.improve.struts.taglib.layout.policy.AbstractPolicy; 16 import fr.improve.struts.taglib.layout.util.LayoutUtils; 17 import fr.improve.struts.taglib.layout.util.NestedHelper; 18 import fr.improve.struts.taglib.layout.util.TagUtils; 19 20 33 public abstract class AbstractModeFieldTag extends LabelledTag { 34 38 private String mode = "E,E,I"; 39 42 private short fieldDisplayMode = MODE_EDIT; 43 44 47 private String jspStyleClass = null; 48 49 52 private String jspStyle = null; 53 54 57 private String jspProperty = null; 58 59 62 private String jspMode = null; 63 64 67 private String jspStyleId = null; 68 69 protected boolean disabledAsBoolean = false; 70 protected String disabled = "false"; 71 protected boolean readonly = false; 72 73 protected Boolean jspReadonly; 74 75 76 79 public static final short MODE_NODISPLAY = 0; 80 81 84 public static final short MODE_INSPECT = 1; 85 86 89 public static final short MODE_EDIT = 2; 90 91 94 public static final short MODE_HIDDEN = 3; 95 96 99 public static final short MODE_INSPECT_ONLY = 4; 100 101 104 public static final short MODE_INSPECT_PRESENT = 5; 105 106 109 public static final short MODE_READONLY = 6; 110 111 114 public static final short MODE_DISABLED = 7; 115 116 119 public static final short MODE_CELL = 8; 120 121 124 private String policy = null; 125 protected String styleId; 126 127 130 protected void computeDisplayMode(Integer in_overrideFieldDisplayMode) { 131 if (in_overrideFieldDisplayMode == null) { 132 fieldDisplayMode = getSkin().getFormUtils().computeFieldDisplayMode(this); 134 } else { 135 fieldDisplayMode = in_overrideFieldDisplayMode.shortValue(); 137 } 138 139 switch (fieldDisplayMode) { 141 case MODE_EDIT : 142 case MODE_READONLY : 143 case MODE_DISABLED : 144 fieldDisplayMode = getEditAuthorizedMode(); 146 break; 147 case MODE_INSPECT : 148 case MODE_INSPECT_ONLY: 149 case MODE_INSPECT_PRESENT: 150 case MODE_CELL : 151 fieldDisplayMode = getInspectAuthorizedMode(fieldDisplayMode); 153 break; 154 } 155 156 switch (fieldDisplayMode) { 158 case MODE_READONLY: 159 fieldDisplayMode = MODE_EDIT; 160 jspReadonly = readonly ? Boolean.TRUE : Boolean.FALSE; 161 readonly = true; 162 break; 163 case MODE_DISABLED: 164 fieldDisplayMode = MODE_EDIT; 165 disabledAsBoolean = true; 166 break; 167 } 168 } 169 172 protected abstract int doEndEditMode() throws JspException ; 173 176 protected abstract int doEndInspectMode() throws JspException ; 177 180 public int doEndLayoutTag() throws JspException { 181 int lc_ret = EVAL_PAGE; 182 switch (fieldDisplayMode) { 183 case MODE_NODISPLAY : 184 case MODE_HIDDEN : 185 case MODE_CELL : 186 break; 187 case MODE_INSPECT_ONLY: 188 case MODE_INSPECT : 189 case MODE_INSPECT_PRESENT: 190 lc_ret = doEndInspectMode(); 191 break; 192 case MODE_EDIT : 193 lc_ret = doEndEditMode(); 194 break; 195 } 196 return lc_ret; 197 } 198 199 202 protected int doCellMode() throws JspException { 203 new StartLayoutEvent(this, null).send(); 204 TagUtils.write(pageContext, "<th colspan=\""); 205 TagUtils.write(pageContext, String.valueOf(getSkin().getFieldInterface().getColumnNumber())); 206 if (styleClass!=null) { 207 TagUtils.write(pageContext, "\" class=\""); 208 TagUtils.write(pageContext, styleClass); 209 } 210 TagUtils.write(pageContext, "\"> </th>"); 211 new EndLayoutEvent(this, null).send(); 212 return SKIP_BODY; 213 } 214 215 216 219 protected abstract int doStartEditMode() throws JspException ; 220 223 protected abstract int doStartInspectMode() throws JspException ; 224 227 public int doStartLayoutTag() throws JspException { 228 Object lc_value = getFieldValue(); 230 231 if (fieldDisplayMode == MODE_HIDDEN) { 233 printHiddenValue(lc_value); 234 } 235 236 if (!isFill(lc_value) 238 && 239 (fieldDisplayMode == MODE_INSPECT && !getSkin().getDisplayNullFields() 240 || 241 fieldDisplayMode == MODE_INSPECT_PRESENT 242 )) { 243 fieldDisplayMode = MODE_NODISPLAY; 244 } 245 246 switch (fieldDisplayMode) { 248 case MODE_INSPECT : 249 case MODE_INSPECT_ONLY : 250 case MODE_INSPECT_PRESENT : 251 return doStartInspectMode(); 252 case MODE_EDIT : 253 return doStartEditMode(); 254 case MODE_NODISPLAY : 255 case MODE_HIDDEN : 256 return SKIP_BODY; 257 case MODE_CELL : 258 return doCellMode(); 259 } 260 261 return EVAL_BODY_INCLUDE; 262 } 263 264 protected void initDynamicValues() { 265 jspProperty = property; 267 property = Expression.evaluate(property, pageContext); 268 property = NestedHelper.getAdjustedProperty(property, pageContext); 269 270 disabledAsBoolean = "true".equalsIgnoreCase(Expression.evaluate(disabled, pageContext)) ? true : false; 273 274 jspMode = mode; 276 mode = Expression.evaluate(mode, pageContext); 277 278 Integer lc_userModeDisplay = getSkin().getFormUtils().getFieldDisplayMode(pageContext, property); 280 computeDisplayMode(lc_userModeDisplay); 281 282 jspStyle = style; 284 jspStyleClass = styleClass; 285 if (styleClass==null) { 287 styleClass = getSkin().getProperty("styleclass.label", null); 288 } 289 290 String lc_userStyleClass = getSkin().getFormUtils().getFieldStyleClass(this); 292 if (lc_userStyleClass!=null) { 293 styleClass = lc_userStyleClass; 294 } 295 296 String lc_userStyle = getSkin().getFormUtils().getFieldStyle(pageContext, property); 298 if (lc_userStyle!=null) { 299 style = lc_userStyle; 300 } 301 302 jspStyleId = styleId; 304 styleId = Expression.evaluate(styleId, pageContext); 305 } 306 307 public boolean isFill(Object lc_value) throws JspException { 308 return lc_value != null && lc_value.toString().length()!=0; 309 } 310 public short getFieldDisplayMode() { 311 return fieldDisplayMode; 312 } 313 316 protected abstract Object getFieldValue() throws JspException ; 317 318 321 protected int getFormMode() { 322 FormTag form = (FormTag) findAncestorWithClass(this, FormTag.class); 323 return form.getDisplayMode(); 324 } 325 326 331 public java.lang.String getPolicy() { 332 return policy; 333 } 334 337 protected final void printHiddenValue(Object in_value) throws JspException { 338 Collection lc_collection = LayoutUtils.getCollection(in_value, false); 339 if (lc_collection != null) { 340 printIndexedHiddenValue(lc_collection); 341 } else { 342 printSimpleHiddenValue(in_value); 343 } 344 } 345 protected void printSimpleHiddenValue(Object in_value) throws JspException { 346 StringBuffer lc_buffer = new StringBuffer (); 347 lc_buffer.append("<input type=\"hidden\" name=\""); 348 lc_buffer.append(property); 349 lc_buffer.append("\" value=\""); 350 lc_buffer.append(in_value == null ? "" : ResponseUtils.filter(in_value.toString())); 351 if (styleId!=null) { 352 lc_buffer.append("\" id=\""); 353 lc_buffer.append(styleId); 354 } 355 lc_buffer.append("\">"); 356 TagUtils.write(pageContext, lc_buffer.toString()); 357 } 358 359 protected void printIndexedHiddenValue(Collection lc_collection) throws JspException { 360 Iterator lc_iterator = lc_collection.iterator(); 362 int i = 0; 363 StringBuffer lc_buffer = new StringBuffer (); 364 while (lc_iterator.hasNext()) { 365 Object lc_bean = lc_iterator.next(); 366 lc_buffer.append("<input type=\"hidden\" name=\""); 367 lc_buffer.append(property); 368 lc_buffer.append("["); 369 lc_buffer.append(i); 370 lc_buffer.append("]"); 371 lc_buffer.append("\" value=\""); 372 lc_buffer.append(lc_bean == null ? "" : lc_bean.toString()); 373 lc_buffer.append("\">"); 374 i++; 375 } 376 TagUtils.write(pageContext, lc_buffer.toString()); 377 } 378 379 383 protected void reset() { 384 fieldDisplayMode = MODE_EDIT; 385 disabledAsBoolean = false; 386 if (jspReadonly!=null) { 387 readonly = jspReadonly.booleanValue(); 388 jspReadonly = null; 389 } 390 styleClass = jspStyleClass; 391 style = jspStyle; 392 property = jspProperty; 393 mode = jspMode; 394 styleId = jspStyleId; 395 396 jspStyleClass = null; 397 jspStyle = null; 398 jspProperty = null; 399 jspMode = null; 400 jspStyleId = null; 401 } 402 403 406 public void release() { 407 super.release(); 408 policy = null; 409 mode = "E,E,I"; 410 styleId = null; 411 disabledAsBoolean = false; 412 disabled = "false"; 413 readonly = false; 414 } 415 protected short getEditAuthorizedMode() { 416 if (policy == null) 417 return getFieldDisplayMode(); 418 419 AbstractPolicy lc_policy = getSkin().getPolicy(); 420 return lc_policy.getAuthorizedDisplayMode(policy, name, property, pageContext); 421 } 422 423 protected short getInspectAuthorizedMode(short in_inspectOnly) { 424 if (policy == null) { 425 return in_inspectOnly; 426 } 427 AbstractPolicy lc_policy = getSkin().getPolicy(); 428 return lc_policy.getAuthorizedDisplayMode(policy, name, property, pageContext); 429 } 430 431 435 public void setMode(String in_mode) { 436 mode = in_mode; 437 } 438 public String getMode() { 439 return mode; 440 } 441 446 public void setPolicy(java.lang.String newPolicy) { 447 policy = newPolicy; 448 } 449 public void setProperty(String property) { 450 if (LayoutUtils.getNoErrorMode()) { 451 this.property = "property"; 452 } else { 453 this.property = property; 454 } 455 } 456 457 461 public String getStyleId() { 462 return styleId; 463 } 464 465 469 public void setStyleId(String styleId) { 470 this.styleId = styleId; 471 } 472 473 476 public boolean isDisabledAsBoolean() { 477 return disabledAsBoolean; 478 } 479 482 public void setDisabledAsBoolean(boolean b) { 483 disabledAsBoolean = b; 484 } 485 486 489 public boolean isReadonly() { 490 return readonly; 491 } 492 493 496 public void setReadonly(boolean b) { 497 readonly = b; 498 } 499 500 503 public String getDisabled() { 504 return disabled; 505 } 506 509 public void setDisabled(String disabled) { 510 this.disabled = disabled; 511 } 512 } | Popular Tags |