1 64 65 package com.jcorporate.expresso.ext.taglib; 66 67 import com.jcorporate.expresso.core.controller.Input; 68 import com.jcorporate.expresso.core.dbobj.ValidValue; 69 import com.jcorporate.expresso.core.misc.StringUtil; 70 import com.jcorporate.expresso.kernel.util.FastStringBuffer; 71 import org.apache.log4j.Logger; 72 73 import javax.servlet.jsp.JspTagException ; 74 import javax.servlet.jsp.JspWriter ; 75 import javax.servlet.jsp.tagext.Tag ; 76 import java.util.Vector ; 77 78 79 85 public class InputTag extends ExpressoTagSupport { 86 87 public static final String TYPE_CHECKBOX = "checkbox"; 88 public static final String TYPE_CHECKBOX_VERT = "checkbox-vertical"; 89 public static final String TYPE_HIDDEN = "hidden"; 91 public static final String TYPE_READONLY = "readonly"; 92 public static final String TYPE_RADIO = "radio"; 94 public static final String TYPE_RADIO_VERT = "radio-vertical"; 95 public static final String TYPE_DROPDOWN = "dropdown"; 97 public static final String TYPE_LISTBOX = "listbox"; 98 public static final String TYPE_TEXTAREA = "textarea"; 100 101 public static final String TYPE_FILE = "file"; 104 public static final String TYPE_PASSWORD = "password"; 105 public static final String TYPE_TEXT = "text"; 106 107 public static final String STYLE_SHEET_MEDIUM_BOLD = "mediumbold"; 110 public static final String STYLE_SHEET_MEDIUM_TEXT = "mediumtext"; 111 112 113 private java.lang.String name = null; private java.lang.String value = null; private java.lang.String type = null; 116 private java.lang.String size = null; 117 private java.lang.String maxlength = null; 118 private java.lang.String multiple = null; 119 private java.lang.String showlabel = null; private java.lang.String label = null; 121 private java.lang.String nameToUse = null; private java.lang.String valueToUse = null; private java.lang.String typeToUse = null; 124 private java.lang.String sizeToUse = null; 125 private java.lang.String maxlengthToUse = null; 126 private java.lang.String multipleToUse = null; 127 private java.lang.String labelToUse = null; 128 private Input oneInput = null; 129 private static Logger log = Logger.getLogger(InputTag.class); 130 131 132 135 private String style=null; 136 137 140 private String styleClass=null; 141 144 private String styleId=null; 145 146 149 private String onclick=null; 150 151 154 private String ondblclick=null; 155 156 159 private String onhelp=null; 160 161 164 private String onkeydown=null; 165 166 169 private String onkeypress=null; 170 171 174 private String onkeyup=null; 175 176 179 private String onmousedown=null; 180 181 184 private String onmousemove=null; 185 186 189 private String onmouseout=null; 190 191 194 private String onmouseover=null; 195 196 199 private String onmouseup=null; 200 201 204 private int rows=4; 205 206 209 private int cols=40; 210 211 214 public final static int DEFAULT_ROWS=4; 215 216 219 public final static int DEFAULT_COLUMNS=4; 220 221 222 225 public InputTag() { 226 super(); 227 } 228 229 234 private void analyzeInput() 235 throws Exception { 236 if (oneInput == null) { 237 throw new Exception ("The Input object was null"); 238 } 239 if (nameToUse == null) { 242 nameToUse = StringUtil.notNull(oneInput.getName()); 243 } 244 if (valueToUse == null) { 245 valueToUse = StringUtil.notNull(oneInput.getDefaultValue()); 246 } 247 if (typeToUse == null) { 248 typeToUse = StringUtil.notNull(oneInput.getType()); 249 } 250 if (sizeToUse == null) { 251 sizeToUse = StringUtil.notNull("" + oneInput.getDisplayLength()); 252 } 253 if (maxlengthToUse == null) { 254 maxlengthToUse = StringUtil.notNull("" + oneInput.getMaxLength()); 255 } 256 if (labelToUse == null) { 257 labelToUse = StringUtil.notNull(oneInput.getLabel()); 258 } 259 } 260 261 262 267 protected FastStringBuffer generateStyleClass( FastStringBuffer buf ) 268 { 269 if ( style != null ) 270 buf.append( "style=\""+style+"\" "); 271 if ( styleClass != null ) 272 buf.append( "class=\""+styleClass+"\" "); 273 if ( styleId != null ) 274 buf.append( "style=\""+styleId+"\" "); 275 return buf; 276 } 277 278 283 protected FastStringBuffer generateEventHandler( FastStringBuffer buf ) 284 { 285 if ( onclick != null ) 286 buf.append( "=\""+onclick+"\" "); 287 if ( ondblclick != null ) 288 buf.append( "=\""+ondblclick+"\" "); 289 if ( onhelp != null ) 290 buf.append( "onhelp=\""+onhelp+"\" "); 291 if ( onkeydown != null ) 292 buf.append( "onkeydown=\""+onkeydown+"\" "); 293 if ( onkeypress != null ) 294 buf.append( "onkeypress=\""+onkeypress+"\" "); 295 if ( onkeydown != null ) 296 buf.append( "onkeydown=\""+onkeydown+"\" "); 297 if ( onmousedown!= null ) 298 buf.append( "onmousedown=\""+onmousedown+"\" "); 299 if ( onmousemove!= null ) 300 buf.append( "onmousemove=\""+onmousemove+"\" "); 301 if ( onmouseout!= null ) 302 buf.append( "onmouseout=\""+onmouseout+"\" "); 303 if ( onmouseover!= null ) 304 buf.append( "onmouseover=\""+onmouseover+"\" "); 305 if ( onmouseup!= null ) 306 buf.append( "onmouseup=\""+onmouseup+"\" "); 307 return buf; 308 } 309 310 316 private void buildBox(JspWriter writer) 317 throws Exception { 318 if (writer == null) { 319 throw new Exception ("JspWriter was null"); 320 } 321 322 FastStringBuffer fsb = FastStringBuffer.getInstance(); 323 try { 324 fsb.append("<input type=\""); 325 fsb.append(typeToUse); 326 fsb.append("\" name=\""); 327 fsb.append(nameToUse); 328 fsb.append("\" size=\""); 329 fsb.append(sizeToUse); 330 fsb.append("\" maxlength=\""); 331 fsb.append(maxlengthToUse); 332 fsb.append("\" value=\""); 333 fsb.append(valueToUse); 334 fsb.append("\" "); 335 generateStyleClass( fsb ); 336 generateEventHandler( fsb ); 337 fsb.append(">"); 338 writer.print(fsb.toString()); 342 } finally { 343 fsb.release(); 344 } 345 } 346 347 353 private void buildReadOnlyBox(JspWriter writer) 354 throws Exception { 355 if (writer == null) { 356 throw new Exception ("JspWriter was null"); 357 } 358 359 FastStringBuffer fsb = FastStringBuffer.getInstance(); 360 try { 361 fsb.append("<input type=\""); 362 fsb.append(typeToUse); 363 fsb.append("\" name=\""); 364 fsb.append(nameToUse); 365 fsb.append("\" readonly\""); 366 fsb.append("\" size=\""); 367 fsb.append(sizeToUse); 368 fsb.append("\" maxlength=\""); 369 fsb.append(maxlengthToUse); 370 fsb.append("\" value=\""); 371 fsb.append(valueToUse); 372 fsb.append("\" "); 373 generateStyleClass( fsb ); 374 generateEventHandler( fsb ); 375 fsb.append(" >"); 376 writer.print(fsb.toString()); 380 } finally { 381 fsb.release(); 382 } 383 } 384 385 386 392 private void buildCheckBox(JspWriter writer, boolean vertical) 393 throws Exception { 394 if (writer == null) { 395 throw new Exception ("JspWriter was null"); 396 } 397 398 Vector validVector = oneInput.getValidValues(); 399 ValidValue oneValue = null; 400 String checkFlag = null; 401 402 for (int i = 0; i < validVector.size(); i++) { 403 oneValue = (ValidValue) validVector.elementAt(i); 404 405 if (valueToUse.equals(oneValue.getValue())) { 406 checkFlag = "CHECKED"; 407 } else { 408 checkFlag = ""; 409 } 410 FastStringBuffer fsb = FastStringBuffer.getInstance(); 411 try { 412 fsb.append(" <input type=\"checkbox\" name=\""); 413 fsb.append(nameToUse); 414 fsb.append("\" "); 415 fsb.append(checkFlag); 416 fsb.append(" value=\""); 417 fsb.append(oneValue.getValue()); 418 fsb.append("\" "); 419 generateStyleClass( fsb ); 420 generateEventHandler( fsb ); 421 fsb.append(">"); 422 fsb.append(oneValue.getDescription()); 423 424 429 if (vertical) { 430 fsb.append(" <br />"); 431 } 432 writer.print(fsb.toString()); 433 } finally { 434 fsb.release(); 435 } 436 } 437 } 438 439 440 446 private void buildHiddenBox(JspWriter writer) 447 throws Exception { 448 if (writer == null) { 449 throw new Exception ("JspWriter was null"); 450 } 451 452 FastStringBuffer fsb = FastStringBuffer.getInstance(); 453 try { 454 fsb.append(" <input type=\"hidden\" name=\""); 455 fsb.append(nameToUse); 456 fsb.append("\" size=\""); 457 fsb.append(sizeToUse); 458 fsb.append("\" maxlength=\""); 459 fsb.append(maxlengthToUse); 460 fsb.append("\" value=\""); 461 fsb.append(valueToUse); 462 fsb.append("\" "); 463 generateStyleClass( fsb ); 464 generateEventHandler( fsb ); 465 fsb.append(">"); 466 467 writer.print(fsb.toString()); 471 } finally { 472 fsb.release(); 473 } 474 } 475 476 477 484 private void buildRadioButton(JspWriter writer, boolean vertical) 485 throws Exception { 486 if (writer == null) { 487 throw new Exception ("JspWriter was null"); 488 } 489 490 Vector validVector = oneInput.getValidValues(); 491 ValidValue oneValue = null; 492 String checkFlag = null; 493 494 for (int i = 0; i < validVector.size(); i++) { 495 oneValue = (ValidValue) validVector.elementAt(i); 496 497 if (valueToUse.equals(oneValue.getValue())) { 498 checkFlag = "CHECKED"; 499 } else { 500 checkFlag = ""; 501 } 502 503 FastStringBuffer fsb = FastStringBuffer.getInstance(); 504 try { 505 fsb.append("<input type=\"radio\" name=\""); 506 fsb.append(nameToUse); 507 fsb.append("\" "); 508 fsb.append(checkFlag); 509 fsb.append(" value=\""); 510 fsb.append(oneValue.getValue()); 511 fsb.append("\" "); 512 generateStyleClass( fsb ); 513 generateEventHandler( fsb ); 514 fsb.append(">"); 515 fsb.append(oneValue.getDescription()); 516 517 if (vertical) { 523 fsb.append(" <br />"); 524 } 525 526 writer.print(fsb.toString()); 527 } finally { 528 fsb.release(); 529 } 530 } 531 } 532 533 534 540 private void buildSelectList(JspWriter writer) 541 throws Exception { 542 if (writer == null) { 543 throw new Exception ("JspWriter was null"); 544 } 545 546 FastStringBuffer fsb = FastStringBuffer.getInstance(); 547 548 try { 549 Vector validVector = oneInput.getValidValues(); 550 ValidValue oneValue = null; 551 fsb.append("<select name=\""); 552 fsb.append(nameToUse); 553 fsb.append("\""); 554 if (size != null) { 555 fsb.append(" size=\""); 556 fsb.append(size); 557 fsb.append("\""); 558 if (multiple != null && multiple.equals("true")) { 560 fsb.append(" multiple=\"true\""); 561 } 562 } 563 fsb.append("\" "); 564 generateStyleClass( fsb ); 565 generateEventHandler( fsb ); 566 fsb.append(">"); 567 568 570 boolean noEmptyValue = true; 573 574 for (int i = 0; i < validVector.size(); i++) { 575 oneValue = (ValidValue) validVector.elementAt(i); 576 577 if ("".equals(oneValue.getValue())) { 578 noEmptyValue = false; 579 } 580 } 581 if (noEmptyValue) { 582 if ("".equals(valueToUse)) { 583 fsb.append(" <option value=\"\" SELECTED>(select...)</option>"); 584 } 586 } 591 592 String selectFlag = null; 593 594 for (int i = 0; i < validVector.size(); i++) { 595 oneValue = (ValidValue) validVector.elementAt(i); 596 597 if (valueToUse.equals(oneValue.getValue())) { 598 selectFlag = "SELECTED"; 599 } else { 600 selectFlag = ""; 601 } 602 fsb.append(" <option value=\""); 603 fsb.append(oneValue.getValue()); 604 fsb.append("\" "); 605 fsb.append(selectFlag); 606 fsb.append(">"); 607 fsb.append(oneValue.getDescription()); 608 fsb.append("</option>"); 609 610 } 614 fsb.append(" </select>\n"); 615 616 writer.print(fsb.toString()); 618 } finally { 619 fsb.release(); 620 } 621 } 622 623 624 630 private void buildTextArea(JspWriter writer) 631 throws Exception { 632 if (writer == null) { 633 throw new Exception ("JspWriter was null"); 634 } 635 636 FastStringBuffer fsb = FastStringBuffer.getInstance(); 637 try { 638 fsb.append("<textarea name=\""); 639 fsb.append(nameToUse); 640 fsb.append("\" "); 641 if ( rows > 0 ) 642 fsb.append( "rows=\""+rows+"\" "); 643 if ( cols > 0 ) 644 fsb.append( "cols=\""+cols+"\" "); 645 generateStyleClass( fsb ); 646 generateEventHandler( fsb ); 647 fsb.append(" >"); 648 fsb.append(valueToUse); 649 fsb.append("</textarea>"); 650 writer.print(fsb.toString()); 651 } finally { 652 fsb.release(); 653 } 654 655 656 } 660 661 662 667 public int doEndTag() 668 throws javax.servlet.jsp.JspTagException { 669 nameToUse = name; 670 valueToUse = value; 671 typeToUse = type; 672 sizeToUse = size; 673 maxlengthToUse = maxlength; 674 labelToUse = label; 675 getControllerResponse(); 676 677 try { 678 679 Tag container = getContainer(); 682 683 if (container == null) { 684 oneInput = ctlrResp.getInput(nameToUse); 685 } else { 686 if (container instanceof ElementIterator) { 687 oneInput = (Input) ((ElementIterator) container).getElement(); 688 nameToUse = oneInput.getName(); 689 } else if (container instanceof BlockTag) { 690 oneInput = (Input) ((BlockTag) container).getBlock().getContent(getName()); 691 } else { 692 throw new JspTagException ("InputTag: cannot handle container tag" + 693 container.getClass().getName()); 694 } 695 } 696 697 JspWriter writer = pageContext.getOut(); 698 699 if (oneInput != null) { 700 this.analyzeInput(); 701 702 if ("true".equalsIgnoreCase(showlabel)) { 703 704 707 if (!"".equals(labelToUse)) { 708 writer.print(labelToUse + "</td> "); 709 } 710 711 } 712 713 714 if (Input.ATTRIBUTE_LISTBOX.equalsIgnoreCase(typeToUse)) { 715 this.setSize(Integer.toString(oneInput.getLines())); 716 this.setMultiple(oneInput.getMultiple()); 717 this.buildSelectList(writer); 718 this.setSize(""); 719 this.setMultiple(""); 720 } else if (Input.ATTRIBUTE_DROPDOWN.equalsIgnoreCase(typeToUse)) { 721 this.buildSelectList(writer); 722 } else if (Input.ATTRIBUTE_CHECKBOX.equalsIgnoreCase(typeToUse)) { 723 this.buildCheckBox(writer, false); 724 } else if (Input.ATTRIBUTE_CHECKBOX_VERTICAL.equalsIgnoreCase(typeToUse)) { 725 this.buildCheckBox(writer, true); 726 } else if (Input.ATTRIBUTE_RADIO.equalsIgnoreCase(typeToUse)) { 727 this.buildRadioButton(writer, false); 728 } else if (Input.ATTRIBUTE_RADIO_VERTICAL.equalsIgnoreCase(typeToUse)) { 729 this.buildRadioButton(writer, true); 730 } else if (Input.ATTRIBUTE_TEXTAREA.equalsIgnoreCase(typeToUse)) { 731 this.buildTextArea(writer); 732 } else if (Input.ATTRIBUTE_HIDDEN.equalsIgnoreCase(typeToUse)) { 733 this.buildHiddenBox(writer); 734 } else if (Input.ATTRIBUTE_READONLY.equalsIgnoreCase(typeToUse)) { 735 this.buildReadOnlyBox(writer); 736 } else { 737 738 this.buildBox(writer); 741 } 742 } else { 743 writer.println("The Input Named " + nameToUse + 744 " Could Not Be Displayed"); 745 } 746 } catch (Exception e) { 747 log.error(e); 748 throw new JspTagException ("InputTag: " + e.getMessage()); 749 } 750 751 return EVAL_PAGE; 752 } 753 754 755 762 public int doStartTag() 763 throws javax.servlet.jsp.JspTagException { 764 return SKIP_BODY; 765 } 766 767 768 773 public java.lang.String getMaxlength() { 774 return maxlengthToUse; 775 } 776 777 778 783 public java.lang.String getMultiple() { 784 return multipleToUse; 785 } 786 787 792 public java.lang.String getName() { 793 return nameToUse; 794 } 795 796 801 public java.lang.String getShowlabel() { 802 return showlabel; 803 } 804 805 810 public java.lang.String getSize() { 811 return sizeToUse; 812 } 813 814 819 public java.lang.String getType() { 820 return typeToUse; 821 } 822 823 829 public java.lang.String getValue() { 830 return valueToUse; 831 } 832 833 838 public void setMaxlength(java.lang.String newMaxlength) { 839 maxlength = newMaxlength; 840 } 841 842 843 848 public void setMultiple(java.lang.String newMultiple) { 849 multiple = newMultiple; 850 } 851 852 858 public void setName(java.lang.String newName) { 859 name = newName; 860 } 861 862 863 public Input getInput() { 864 return oneInput; 865 } 866 867 872 public void setShowlabel(java.lang.String newShowlabel) { 873 showlabel = newShowlabel; 874 } 875 876 881 public void setSize(java.lang.String newSize) { 882 size = newSize; 883 } 884 885 890 public void setType(java.lang.String newType) { 891 type = newType; 892 } 893 894 895 900 public void setValue(java.lang.String newValue) { 901 value = newValue; 902 } 903 904 905 906 910 public int getCols() { 911 return cols; 912 } 913 914 918 public void setCols(int cols) { 919 this.cols = cols; 920 } 921 922 926 public int getRows() { 927 return rows; 928 } 929 930 934 public void setRows(int rows) { 935 this.rows = rows; 936 } 937 938 942 public String getStyle() { 943 return style; 944 } 945 946 950 public void setStyle(String style) { 951 this.style = style; 952 } 953 954 958 public String getStyleClass() { 959 return styleClass; 960 } 961 962 966 public void setStyleClass(String styleClass) { 967 this.styleClass = styleClass; 968 } 969 970 974 public String getStyleId() { 975 return styleId; 976 } 977 978 982 public void setStyleId(String styleId) { 983 this.styleId = styleId; 984 } 985 986 987 991 public String getOnclick() { 992 return onclick; 993 } 994 998 public void setOnclick(String onclick) { 999 this.onclick = onclick; 1000 } 1001 1005 public String getOndblclick() { 1006 return ondblclick; 1007 } 1008 1012 public void setOndblclick(String ondblclick) { 1013 this.ondblclick = ondblclick; 1014 } 1015 1019 public String getOnhelp() { 1020 return onhelp; 1021 } 1022 1026 public void setOnhelp(String onhelp) { 1027 this.onhelp = onhelp; 1028 } 1029 1033 public String getOnkeydown() { 1034 return onkeydown; 1035 } 1036 1040 public void setOnkeydown(String onkeydown) { 1041 this.onkeydown = onkeydown; 1042 } 1043 1047 public String getOnkeypress() { 1048 return onkeypress; 1049 } 1050 1054 public void setOnkeypress(String onkeypress) { 1055 this.onkeypress = onkeypress; 1056 } 1057 1061 public String getOnkeyup() { 1062 return onkeyup; 1063 } 1064 1068 public void setOnkeyup(String onkeyup) { 1069 this.onkeyup = onkeyup; 1070 } 1071 1075 public String getOnmousedown() { 1076 return onmousedown; 1077 } 1078 1082 public void setOnmousedown(String onmousedown) { 1083 this.onmousedown = onmousedown; 1084 } 1085 1089 public String getOnmousemove() { 1090 return onmousemove; 1091 } 1092 1096 public void setOnmousemove(String onmousemove) { 1097 this.onmousemove = onmousemove; 1098 } 1099 1103 public String getOnmouseout() { 1104 return onmouseout; 1105 } 1106 1110 public void setOnmouseout(String onmouseout) { 1111 this.onmouseout = onmouseout; 1112 } 1113 1117 public String getOnmouseover() { 1118 return onmouseover; 1119 } 1120 1124 public void setOnmouseover(String onmouseover) { 1125 this.onmouseover = onmouseover; 1126 } 1127 1131 public String getOnmouseup() { 1132 return onmouseup; 1133 } 1134 1138 public void setOnmouseup(String onmouseup) { 1139 this.onmouseup = onmouseup; 1140 } 1141} 1142 | Popular Tags |