1 31 32 package org.opencms.workplace; 33 34 import org.opencms.i18n.CmsEncoder; 35 import org.opencms.jsp.CmsJspActionElement; 36 import org.opencms.main.I_CmsThrowable; 37 import org.opencms.main.OpenCms; 38 import org.opencms.util.CmsRequestUtil; 39 import org.opencms.util.CmsStringUtil; 40 import org.opencms.widgets.A_CmsWidget; 41 import org.opencms.widgets.CmsDisplayWidget; 42 import org.opencms.widgets.I_CmsWidget; 43 import org.opencms.widgets.I_CmsWidgetDialog; 44 45 import java.io.IOException ; 46 import java.util.ArrayList ; 47 import java.util.Arrays ; 48 import java.util.HashMap ; 49 import java.util.HashSet ; 50 import java.util.Hashtable ; 51 import java.util.Iterator ; 52 import java.util.List ; 53 import java.util.Map ; 54 import java.util.Set ; 55 56 import javax.servlet.ServletException ; 57 import javax.servlet.http.HttpServletRequest ; 58 import javax.servlet.http.HttpServletResponse ; 59 import javax.servlet.jsp.JspException ; 60 import javax.servlet.jsp.JspWriter ; 61 import javax.servlet.jsp.PageContext ; 62 63 72 public abstract class CmsWidgetDialog extends CmsDialog implements I_CmsWidgetDialog { 73 74 75 public static final int ACTION_ELEMENT_ADD = 152; 76 77 78 public static final int ACTION_ELEMENT_REMOVE = 153; 79 80 81 public static final int ACTION_ERROR = 303; 82 83 84 public static final int ACTION_SAVE = 300; 85 86 87 public static final String DIALOG_SAVE = "save"; 88 89 90 public static final String EDITOR_ACTION_ELEMENT_ADD = "addelement"; 91 92 93 public static final String EDITOR_ACTION_ELEMENT_REMOVE = "removeelement"; 94 95 96 public static final String HIDDEN_PARAM_PREFIX = "hidden."; 97 98 99 protected List m_commitErrors; 100 101 102 protected Object m_dialogObject; 103 104 105 protected List m_pages; 106 107 108 protected String m_paramPage; 109 110 111 protected List m_validationErrorList; 112 113 114 protected Map m_widgetParamValues; 115 116 117 protected List m_widgets; 118 119 120 private Set m_helpMessageIds; 121 122 128 private String m_paramElementIndex = "0"; 129 130 136 private String m_paramElementName = "undefined"; 137 138 139 private String m_prefix; 140 141 146 public CmsWidgetDialog(CmsJspActionElement jsp) { 147 148 super(jsp); 149 } 150 151 158 public CmsWidgetDialog(PageContext context, HttpServletRequest req, HttpServletResponse res) { 159 160 this(new CmsJspActionElement(context, req, res)); 161 } 162 163 166 public void actionCancel() { 167 168 clearDialogObject(); 169 } 170 171 177 public abstract void actionCommit() throws IOException , ServletException ; 178 179 184 public void actionToggleElement() { 185 186 int index = 0; 188 try { 189 index = Integer.parseInt(getParamElementIndex()); 190 } catch (Exception e) { 191 } 193 String name = getParamElementName(); 194 CmsWidgetDialogParameter base = getParameterDefinition(name); 196 if (base != null) { 197 List params = (List )getParameters().get(name); 199 if (getAction() == ACTION_ELEMENT_REMOVE) { 200 params.remove(index); 202 } else { 203 List sequence = (List )getParameters().get(base.getName()); 204 if (sequence.size() > 0) { 205 index = index + 1; 207 } 208 CmsWidgetDialogParameter newParam = new CmsWidgetDialogParameter(base, index); 209 params.add(index, newParam); 210 } 211 for (int i = 0; i < params.size(); i++) { 213 CmsWidgetDialogParameter param = (CmsWidgetDialogParameter)params.get(i); 214 param.setindex(i); 215 } 216 } 217 } 218 219 227 public String buildAddElement(String elementName, int insertAfter, boolean enabled) { 228 229 if (enabled) { 230 StringBuffer href = new StringBuffer (4); 231 href.append("javascript:addElement('"); 232 href.append(elementName); 233 href.append("', "); 234 href.append(insertAfter); 235 href.append(");"); 236 return button(href.toString(), null, "new.png", Messages.GUI_DIALOG_BUTTON_ADDNEW_0, 0); 237 } else { 238 return ""; 239 } 240 } 241 242 247 public String buildDialogForm() { 248 249 return createDialogHtml(getParamPage()); 251 } 252 253 261 public String buildRemoveElement(String elementName, int index, boolean enabled) { 262 263 if (enabled) { 264 StringBuffer href = new StringBuffer (4); 265 href.append("javascript:removeElement('"); 266 href.append(elementName); 267 href.append("', "); 268 href.append(index); 269 href.append(");"); 270 return button(href.toString(), null, "deletecontent.png", Messages.GUI_DIALOG_BUTTON_DELETE_0, 0); 271 } else { 272 return ""; 273 } 274 } 275 276 279 public void clearDialogObject() { 280 281 setDialogObject(null); 282 } 283 284 289 public String dialogBlockEnd() { 290 291 StringBuffer result = new StringBuffer (8); 292 result.append(super.dialogBlockEnd()); 293 result.append(dialogSpacer()); 294 result.append("</td></tr>\n"); 295 return result.toString(); 296 } 297 298 304 public String dialogBlockStart(String headline) { 305 306 StringBuffer result = new StringBuffer (8); 307 result.append("<tr><td colspan=\"5\">\n"); 308 result.append(super.dialogBlockStart(headline)); 309 return result.toString(); 310 } 311 312 317 public String dialogButtonsCustom() { 318 319 if (getPages().size() > 1) { 320 int pageIndex = getPages().indexOf(getParamPage()); 322 if (pageIndex == getPages().size() - 1) { 323 return dialogButtons(new int[] {BUTTON_OK, BUTTON_BACK, BUTTON_CANCEL}, new String [3]); 325 } else if (pageIndex > 0) { 326 return dialogButtons(new int[] {BUTTON_BACK, BUTTON_CONTINUE, BUTTON_CANCEL}, new String [3]); 328 } else { 329 return dialogButtons(new int[] {BUTTON_CONTINUE, BUTTON_CANCEL}, new String [2]); 331 } 332 } 333 boolean onlyDisplay = true; 334 Iterator it = m_widgets.iterator(); 335 while (it.hasNext()) { 336 CmsWidgetDialogParameter wdp = (CmsWidgetDialogParameter)it.next(); 337 if (!(wdp.getWidget() instanceof CmsDisplayWidget)) { 338 onlyDisplay = false; 339 break; 340 } 341 } 342 if (!onlyDisplay) { 343 return dialogButtons(new int[] {BUTTON_OK, BUTTON_CANCEL}, new String [2]); 345 } 346 return ""; 348 } 349 350 357 public void displayDialog() throws JspException , IOException , ServletException { 358 359 displayDialog(false); 360 } 361 362 372 public void displayDialog(boolean writeLater) throws JspException , IOException , ServletException { 373 374 if (isForwarded()) { 375 return; 376 } 377 switch (getAction()) { 378 379 case ACTION_CANCEL: 380 actionCancel(); 382 actionCloseDialog(); 383 break; 384 385 case ACTION_ERROR: 386 break; 388 389 case ACTION_SAVE: 390 setParamAction(DIALOG_OK); 392 actionCommit(); 393 if (closeDialogOnCommit()) { 394 setAction(ACTION_CANCEL); 395 actionCloseDialog(); 396 break; 397 } 398 setAction(ACTION_DEFAULT); 399 400 case ACTION_DEFAULT: 401 default: 402 if (!writeLater) { 404 writeDialog(); 405 } 406 } 407 } 408 409 412 public int getButtonStyle() { 413 414 return getSettings().getUserSettings().getEditorButtonStyle(); 415 } 416 417 422 public List getCommitErrors() { 423 424 return m_commitErrors; 425 } 426 427 433 public Object getDialogObject() { 434 435 if (m_dialogObject == null) { 436 m_dialogObject = getDialogObjectMap().get(getClass().getName()); 437 } 438 return m_dialogObject; 439 } 440 441 444 public Set getHelpMessageIds() { 445 446 if (m_helpMessageIds == null) { 447 m_helpMessageIds = new HashSet (); 448 } 449 return m_helpMessageIds; 450 } 451 452 457 public String getParamElementIndex() { 458 459 return m_paramElementIndex; 460 } 461 462 467 public String getParamElementName() { 468 469 return m_paramElementName; 470 } 471 472 477 public String getParamPage() { 478 479 return m_paramPage; 480 } 481 482 490 public String getParamValue(String name) { 491 492 return getParamValue(name, 0); 493 } 494 495 504 public String getParamValue(String name, int index) { 505 506 List params = (List )m_widgetParamValues.get(name); 507 if (params != null) { 508 if ((index >= 0) && (index < params.size())) { 509 CmsWidgetDialogParameter param = (CmsWidgetDialogParameter)params.get(index); 510 if (param.getId().equals(CmsWidgetDialogParameter.createId(name, index))) { 511 return param.getStringValue(getCms()); 512 } 513 } 514 } 515 516 return null; 517 } 518 519 522 public String getUserAgent() { 523 524 return getJsp().getRequest().getHeader(CmsRequestUtil.HEADER_USER_AGENT); 525 } 526 527 535 public String getWidgetHtmlEnd() { 536 537 StringBuffer result = new StringBuffer (32); 538 Iterator i = getWidgets().iterator(); 540 while (i.hasNext()) { 541 CmsWidgetDialogParameter param = (CmsWidgetDialogParameter)i.next(); 542 result.append(param.getWidget().getDialogHtmlEnd(getCms(), this, param)); 543 } 544 return result.toString(); 545 } 546 547 554 public String getWidgetIncludes() throws JspException { 555 556 StringBuffer result = new StringBuffer (32); 557 try { 558 Iterator i = getWidgets().iterator(); 560 Set set = new HashSet (); 561 while (i.hasNext()) { 562 I_CmsWidget widget = ((CmsWidgetDialogParameter)i.next()).getWidget(); 563 if (!set.contains(widget)) { 564 result.append(widget.getDialogIncludes(getCms(), this)); 565 result.append('\n'); 566 set.add(widget); 567 } 568 } 569 } catch (Throwable e) { 570 571 includeErrorpage(this, e); 572 } 573 return result.toString(); 574 } 575 576 583 public String getWidgetInitCalls() throws JspException { 584 585 StringBuffer result = new StringBuffer (32); 586 try { 587 Iterator i = getWidgets().iterator(); 589 Set set = new HashSet (); 590 while (i.hasNext()) { 591 I_CmsWidget widget = ((CmsWidgetDialogParameter)i.next()).getWidget(); 592 if (!set.contains(widget)) { 593 result.append(widget.getDialogInitCall(getCms(), this)); 594 set.add(widget); 595 } 596 } 597 } catch (Throwable e) { 598 includeErrorpage(this, e); 599 } 600 return result.toString(); 601 } 602 603 610 public String getWidgetInitMethods() throws JspException { 611 612 StringBuffer result = new StringBuffer (32); 613 try { 614 Iterator i = getWidgets().iterator(); 616 Set set = new HashSet (); 617 while (i.hasNext()) { 618 I_CmsWidget widget = ((CmsWidgetDialogParameter)i.next()).getWidget(); 619 if (!set.contains(widget)) { 620 result.append(widget.getDialogInitMethod(getCms(), this)); 621 set.add(widget); 622 } 623 } 624 } catch (Throwable e) { 625 includeErrorpage(this, e); 626 } 627 return result.toString(); 628 } 629 630 633 public String paramsAsHidden() { 634 635 if (getAction() != ACTION_ERROR) { 636 return super.paramsAsHidden(); 637 } 638 StringBuffer result = new StringBuffer (); 640 result.append(super.paramsAsHidden()); 641 result.append('\n'); 642 result.append(widgetParamsAsHidden()); 643 return result.toString(); 644 } 645 646 651 public void setDialogObject(Object dialogObject) { 652 653 m_dialogObject = dialogObject; 654 if (dialogObject == null) { 655 getDialogObjectMap().remove(getClass().getName()); 657 } else { 658 getDialogObjectMap().put(getClass().getName(), dialogObject); 659 } 660 } 661 662 667 public void setParamElementIndex(String elementIndex) { 668 669 m_paramElementIndex = elementIndex; 670 } 671 672 677 public void setParamElementName(String elementName) { 678 679 m_paramElementName = elementName; 680 } 681 682 687 public void setParamPage(String paramPage) { 688 689 m_paramPage = paramPage; 690 } 691 692 699 public String widgetParamsAsHidden() { 700 701 return widgetParamsAsHidden(null); 702 } 703 704 721 public String widgetParamsAsHidden(String excludeDialogPage) { 722 723 StringBuffer result = new StringBuffer (); 724 Iterator i = m_widgetParamValues.keySet().iterator(); 725 while (i.hasNext()) { 726 List params = (List )m_widgetParamValues.get(i.next()); 727 Iterator j = params.iterator(); 728 while (j.hasNext()) { 729 CmsWidgetDialogParameter param = (CmsWidgetDialogParameter)j.next(); 730 String value = param.getStringValue(getCms()); 731 if (CmsStringUtil.isNotEmpty(value) 732 && ((excludeDialogPage == null) || (!param.getDialogPage().equals(excludeDialogPage)))) { 733 result.append("<input type=\"hidden\" name=\""); 734 result.append(HIDDEN_PARAM_PREFIX); 735 result.append(param.getId()); 736 result.append("\" value=\""); 737 String encoded = CmsEncoder.encode(value, getCms().getRequestContext().getEncoding()); 738 result.append(encoded); 739 result.append("\">\n"); 740 } 741 } 742 } 743 return result.toString(); 744 } 745 746 752 public void writeDialog() throws IOException , JspException { 753 754 if (isForwarded()) { 755 return; 756 } 757 switch (getAction()) { 758 case ACTION_CANCEL: 759 case ACTION_ERROR: 760 case ACTION_SAVE: 761 break; 762 763 case ACTION_DEFAULT: 764 default: 765 setParamAction(DIALOG_SAVE); 767 JspWriter out = getJsp().getJspContext().getOut(); 768 out.print(defaultActionHtml()); 769 } 770 } 771 772 779 protected void addCommitError(Exception error) { 780 781 if (m_commitErrors == null) { 782 m_commitErrors = new ArrayList (); 783 } 784 m_commitErrors.add(error); 785 } 786 787 792 protected void addWidget(CmsWidgetDialogParameter param) { 793 794 if (m_widgets == null) { 795 m_widgets = new ArrayList (); 796 } 797 param.setKeyPrefix(m_prefix); 798 m_widgets.add(param); 799 } 800 801 809 protected boolean closeDialogOnCommit() { 810 811 return !hasCommitErrors(); 812 } 813 814 819 protected List commitWidgetValues() { 820 821 return commitWidgetValues(null); 822 } 823 824 831 protected List commitWidgetValues(String dialogPage) { 832 833 List result = new ArrayList (); 834 Iterator i = getWidgets().iterator(); 835 while (i.hasNext()) { 836 CmsWidgetDialogParameter base = (CmsWidgetDialogParameter)i.next(); 838 if ((dialogPage == null) || (base.getDialogPage() == null) || dialogPage.equals(base.getDialogPage())) { 839 base.prepareCommit(); 841 List params = (List )m_widgetParamValues.get(base.getName()); 842 Iterator j = params.iterator(); 843 while (j.hasNext()) { 844 CmsWidgetDialogParameter param = (CmsWidgetDialogParameter)j.next(); 845 try { 846 param.commitValue(this); 847 } catch (Exception e) { 848 result.add(e); 849 } 850 } 851 } 852 } 853 setValidationErrorList(result); 854 return result; 855 } 856 857 862 protected String createDialogHtml() { 863 864 return createDialogHtml(null); 865 } 866 867 875 protected String createDialogHtml(String dialog) { 876 877 StringBuffer result = new StringBuffer (1024); 878 879 result.append(createWidgetTableStart()); 881 882 result.append(createWidgetErrorHeader()); 884 885 Iterator i = getWidgets().iterator(); 886 while (i.hasNext()) { 888 CmsWidgetDialogParameter base = (CmsWidgetDialogParameter)i.next(); 890 if ((dialog == null) || dialog.equals(base.getDialogPage())) { 892 result.append(createDialogRowHtml(base)); 894 } 895 } 896 result.append(createWidgetTableEnd()); 898 899 return result.toString(); 900 } 901 902 908 protected String createDialogRowHtml(CmsWidgetDialogParameter base) { 909 910 StringBuffer result = new StringBuffer (256); 911 912 List sequence = (List )getParameters().get(base.getName()); 913 int count = sequence.size(); 914 915 boolean addValue = false; 917 if (count < base.getMaxOccurs()) { 918 addValue = true; 919 } 920 boolean removeValue = false; 921 if (count > base.getMinOccurs()) { 922 removeValue = true; 923 } 924 925 boolean disabledElement = false; 927 if (count < 1) { 928 sequence = new ArrayList (); 930 sequence.add(base); 931 count = 1; 932 if (base.getMinOccurs() == 0) { 933 disabledElement = true; 934 } 935 } 936 937 for (int j = 0; j < count; j++) { 939 940 CmsWidgetDialogParameter p = (CmsWidgetDialogParameter)sequence.get(j); 942 I_CmsWidget widget = p.getWidget(); 943 944 if (p.hasError()) { 946 result.append("<tr><td></td><td><img SRC=\""); 948 result.append(getSkinUri()).append("editors/xmlcontent/"); 949 result.append("error.png"); 950 result.append("\" border=\"0\" alt=\"\"></td><td class=\"xmlTdError\">"); 951 Throwable t = p.getError(); 952 while (t != null) { 953 if (t instanceof I_CmsThrowable) { 954 result.append(((I_CmsThrowable)t).getLocalizedMessage(getLocale())); 955 } else { 956 result.append(t.getLocalizedMessage()); 957 } 958 t = t.getCause(); 959 if (t != null) { 960 result.append("<br>"); 961 } 962 } 963 result.append("</td><td colspan=\"2\"></td></tr>\n"); 964 } 965 966 result.append("<tr>"); 968 result.append("<td class=\"xmlLabel"); 969 if (disabledElement) { 970 result.append("Disabled"); 972 } 973 974 result.append("\">"); 975 result.append(keyDefault(A_CmsWidget.getLabelKey(p), p.getName())); 976 if (count > 1) { 977 result.append(" [").append(p.getIndex() + 1).append("]"); 978 } 979 result.append(": </td>"); 980 if (p.getIndex() == 0) { 981 result.append(p.getWidget().getHelpBubble(getCms(), this, p)); 983 } else { 984 result.append(dialogHorizontalSpacer(16)); 986 } 987 988 if (!disabledElement) { 990 result.append(widget.getDialogWidget(getCms(), this, p)); 992 } else { 993 result.append("<td class=\"xmlTdDisabled maxwidth\">"); 995 result.append(key(Messages.GUI_EDITOR_WIDGET_OPTIONALELEMENT_0)); 996 result.append("</td>"); 997 } 998 999 result.append(dialogHorizontalSpacer(5)); 1001 result.append("<td>"); 1002 if (addValue || removeValue) { 1003 result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>"); 1004 1005 if (!addValue) { 1006 result.append(dialogHorizontalSpacer(25)); 1007 } else { 1008 result.append("<td><table class=\"editorbuttonbackground\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>"); 1009 result.append(buildAddElement(base.getName(), p.getIndex(), addValue)); 1010 } 1011 1012 if (removeValue) { 1013 if (!addValue) { 1014 result.append("<td><table class=\"editorbuttonbackground\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>"); 1015 } 1016 result.append(buildRemoveElement(base.getName(), p.getIndex(), removeValue)); 1017 } 1018 1019 result.append("</tr></table></td>"); 1020 result.append("</tr></table>"); 1021 } 1022 result.append("</td>"); 1023 result.append("</tr>\n"); 1025 } 1026 1027 return result.toString(); 1028 } 1029 1030 1037 protected String createDialogRowsHtml(int startIndex, int endIndex) { 1038 1039 StringBuffer result = new StringBuffer ((endIndex - startIndex) * 8); 1040 for (int i = startIndex; i <= endIndex; i++) { 1041 CmsWidgetDialogParameter base = (CmsWidgetDialogParameter)getWidgets().get(i); 1042 result.append(createDialogRowHtml(base)); 1043 } 1044 return result.toString(); 1045 } 1046 1047 1052 protected String createWidgetBlockEnd() { 1053 1054 StringBuffer result = new StringBuffer (8); 1055 result.append(createWidgetTableEnd()); 1056 result.append(dialogBlockEnd()); 1057 return result.toString(); 1058 } 1059 1060 1065 protected String createWidgetBlockStart(String headline) { 1066 1067 StringBuffer result = new StringBuffer (16); 1068 result.append(dialogBlockStart(headline)); 1069 result.append(createWidgetTableStart()); 1070 return result.toString(); 1071 } 1072 1073 1078 protected String createWidgetErrorHeader() { 1079 1080 StringBuffer result = new StringBuffer (8); 1081 if (hasValidationErrors() || hasCommitErrors()) { 1082 result.append("<tr><td colspan=\"5\"> </td></tr>\n"); 1083 result.append("<tr><td colspan=\"2\"> </td>"); 1084 result.append("<td class=\"xmlTdErrorHeader\">"); 1085 result.append(key(Messages.GUI_EDITOR_WIDGET_VALIDATION_ERROR_TITLE_0)); 1086 result.append("</td><td colspan=\"2\"> "); 1087 result.append("</td></tr>\n"); 1088 result.append("<tr><td colspan=\"5\"> </td></tr>\n"); 1089 if (hasCommitErrors()) { 1090 result.append(dialogBlockStart("")); 1091 result.append(createWidgetTableStart()); 1092 Iterator i = getCommitErrors().iterator(); 1093 while (i.hasNext()) { 1094 Throwable t = (Throwable )i.next(); 1095 result.append("<tr><td><img SRC=\""); 1096 result.append(getSkinUri()).append("editors/xmlcontent/"); 1097 result.append("error.png"); 1098 result.append("\" border=\"0\" alt=\"\"></td><td class=\"xmlTdError maxwidth\">"); 1099 while (t != null) { 1100 String message = ""; 1101 if (t instanceof I_CmsThrowable) { 1102 message = ((I_CmsThrowable)t).getLocalizedMessage(getLocale()); 1103 } else { 1104 message = t.getLocalizedMessage(); 1105 } 1106 result.append(CmsStringUtil.escapeHtml(message)); 1107 t = t.getCause(); 1108 if (t != null) { 1109 result.append("<br>"); 1110 } 1111 } 1112 result.append("</td></tr>\n"); 1113 } 1114 result.append(createWidgetTableEnd()); 1115 result.append(dialogBlockEnd()); 1116 } 1117 } 1118 return result.toString(); 1119 } 1120 1121 1126 protected String createWidgetTableEnd() { 1127 1128 return "</table>\n"; 1129 } 1130 1131 1136 protected String createWidgetTableStart() { 1137 1138 return "<table cellspacing='0' cellpadding='0' class='xmlTable'>\n"; 1139 } 1140 1141 1148 protected String defaultActionHtml() throws JspException { 1149 1150 StringBuffer result = new StringBuffer (2048); 1151 result.append(defaultActionHtmlStart()); 1152 result.append(defaultActionHtmlContent()); 1153 result.append(defaultActionHtmlEnd()); 1154 return result.toString(); 1155 } 1156 1157 1162 protected String defaultActionHtmlContent() { 1163 1164 StringBuffer result = new StringBuffer (2048); 1165 result.append("<form name=\"EDITOR\" id=\"EDITOR\" method=\"post\" action=\"").append(getDialogRealUri()); 1166 result.append("\" class=\"nomargin\" onsubmit=\"return submitAction('").append(DIALOG_OK).append( 1167 "', null, 'EDITOR');\">\n"); 1168 result.append(dialogContentStart(getDialogTitle())); 1169 result.append(buildDialogForm()); 1170 result.append(dialogContentEnd()); 1171 result.append(dialogButtonsCustom()); 1172 result.append(paramsAsHidden()); 1173 if (getParamFramename() == null) { 1174 result.append("\n<input type=\"hidden\" name=\"").append(PARAM_FRAMENAME).append("\" value=\"\">\n"); 1175 } 1176 result.append("</form>\n"); 1177 result.append(getWidgetHtmlEnd()); 1178 return result.toString(); 1179 } 1180 1181 1186 protected String defaultActionHtmlEnd() { 1187 1188 StringBuffer result = new StringBuffer (2048); 1189 result.append(dialogEnd()); 1190 result.append(bodyEnd()); 1191 result.append(htmlEnd()); 1192 return result.toString(); 1193 } 1194 1195 1202 protected String defaultActionHtmlStart() throws JspException { 1203 1204 StringBuffer result = new StringBuffer (2048); 1205 result.append(htmlStart("administration/index.html")); 1206 result.append("<script type=\"text/javascript\" SRC=\"").append(getResourceUri()).append( 1207 "editors/xmlcontent/edit.js\"></script>\n"); 1208 result.append("<script type=\"text/javascript\" SRC=\"").append(getResourceUri()).append( 1209 "editors/xmlcontent/help.js\"></script>\n"); 1210 result.append(getWidgetIncludes()); 1211 result.append("<script type=\"text/javascript\">\n<!--\n"); 1212 result.append("// flag indicating if form initialization is finished\n"); 1213 result.append("var initialized = false;\n"); 1214 result.append("// the OpenCms context path\n"); 1215 result.append("var contextPath = \"").append(OpenCms.getSystemInfo().getOpenCmsContext()).append("\";\n\n"); 1216 result.append("// action parameters of the form\n"); 1217 result.append("var actionAddElement = \"").append(EDITOR_ACTION_ELEMENT_ADD).append("\";\n"); 1218 result.append("var actionRemoveElement = \"").append(EDITOR_ACTION_ELEMENT_REMOVE).append("\";\n"); 1219 result.append("function init() {\n"); 1220 result.append(getWidgetInitCalls()); 1221 result.append("\tsetTimeout(\"scrollForm();\", 200);\n"); 1222 result.append("\tinitialized = true;\n"); 1223 result.append("}\n\n"); 1224 result.append("function exitEditor() {\n"); 1225 result.append("\ttry {\n"); 1226 result.append("\t\t// close file selector popup if present\n"); 1227 result.append("\t\tcloseTreeWin();\n"); 1228 result.append("\t} catch (e) {}\n"); 1229 result.append("}\n"); 1230 result.append(getWidgetInitMethods()); 1231 result.append("\n// -->\n</script>\n"); 1232 result.append(bodyStart(null, "onload='init();' onunload='exitEditor();'")); 1233 result.append(dialogStart()); 1234 return result.toString(); 1235 } 1236 1237 1240 protected abstract void defineWidgets(); 1241 1242 1247 protected void fillWidgetValues(HttpServletRequest request) { 1248 1249 Map parameters = request.getParameterMap(); 1250 Map processedParamters = new HashMap (); 1251 Iterator p = parameters.keySet().iterator(); 1252 while (p.hasNext()) { 1254 String key = (String )p.next(); 1255 String [] values = (String [])parameters.get(key); 1256 if (key.startsWith(HIDDEN_PARAM_PREFIX)) { 1257 key = key.substring(HIDDEN_PARAM_PREFIX.length()); 1259 String [] newValues = new String [values.length]; 1260 for (int l = 0; l < values.length; l++) { 1261 newValues[l] = CmsEncoder.decode(values[l], getCms().getRequestContext().getEncoding()); 1262 } 1263 values = newValues; 1264 } 1265 processedParamters.put(key, values); 1266 } 1267 1268 m_widgetParamValues = new HashMap (); 1270 Iterator i = getWidgets().iterator(); 1271 1272 while (i.hasNext()) { 1273 CmsWidgetDialogParameter base = (CmsWidgetDialogParameter)i.next(); 1275 1276 List params = new ArrayList (); 1277 int maxOccurs = base.getMaxOccurs(); 1278 1279 boolean onPage = false; 1280 if (base.isCollectionBase()) { 1281 if (CmsStringUtil.isNotEmpty(getParamAction()) && !DIALOG_INITIAL.equals(getParamAction())) { 1283 String page = getParamPage(); 1286 onPage = CmsStringUtil.isEmpty(page) 1290 || CmsStringUtil.isEmpty(base.getDialogPage()) 1291 || base.getDialogPage().equals(page); 1292 } 1293 } 1294 1295 for (int j = 0; j < maxOccurs; j++) { 1296 String id = CmsWidgetDialogParameter.createId(base.getName(), j); 1298 1299 boolean required = (params.size() < base.getMinOccurs()) 1300 || (processedParamters.get(id) != null) 1301 || (!onPage && base.hasValue(j)); 1302 1303 if (required) { 1304 CmsWidgetDialogParameter param = new CmsWidgetDialogParameter(base, params.size(), j); 1305 param.setKeyPrefix(m_prefix); 1306 base.getWidget().setEditorValue(getCms(), processedParamters, this, param); 1307 params.add(param); 1308 } 1309 } 1310 m_widgetParamValues.put(base.getName(), params); 1311 } 1312 } 1313 1314 1322 protected String getDialogTitle() { 1323 1324 return null; 1325 } 1326 1327 1332 protected abstract String [] getPageArray(); 1333 1334 1339 protected List getPages() { 1340 1341 if (m_pages == null) { 1342 m_pages = Arrays.asList(getPageArray()); 1343 } 1344 return m_pages; 1345 } 1346 1347 1354 protected CmsWidgetDialogParameter getParameterDefinition(String name) { 1355 1356 Iterator i = getWidgets().iterator(); 1357 while (i.hasNext()) { 1358 CmsWidgetDialogParameter base = (CmsWidgetDialogParameter)i.next(); 1360 if (base.getName().equals(name)) { 1361 return base; 1362 } 1363 } 1364 return null; 1365 } 1366 1367 1372 protected Map getParameters() { 1373 1374 return m_widgetParamValues; 1375 } 1376 1377 1384 protected List getValidationErrorList() { 1385 1386 return m_validationErrorList; 1387 } 1388 1389 1396 protected String getWidget(CmsWidgetDialogParameter param) { 1397 1398 if (param != null) { 1399 return param.getWidget().getDialogWidget(getCms(), this, param); 1400 } 1401 return null; 1402 } 1403 1404 1410 protected List getWidgets() { 1411 1412 if (m_widgets == null) { 1413 m_widgets = new ArrayList (); 1414 } 1415 return m_widgets; 1416 } 1417 1418 1423 protected boolean hasCommitErrors() { 1424 1425 return (m_commitErrors != null) && (m_commitErrors.size() > 0); 1426 } 1427 1428 1433 protected boolean hasValidationErrors() { 1434 1435 return (m_validationErrorList != null) && (m_validationErrorList.size() > 0); 1436 } 1437 1438 1441 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 1442 1443 setParamDialogtype(getClass().getName()); 1445 1446 fillParamValues(request); 1448 1449 if (CmsStringUtil.isEmptyOrWhitespaceOnly(getParamPage()) || !getPages().contains(getParamPage())) { 1450 setParamPage((String )getPages().get(0)); 1452 } 1453 1454 try { 1456 validateParamaters(); 1457 } catch (Exception e) { 1458 setAction(ACTION_CANCEL); 1460 try { 1461 actionCloseDialog(); 1462 } catch (JspException e1) { 1463 } 1465 return; 1466 } 1467 1468 defineWidgets(); 1470 fillWidgetValues(request); 1471 1472 if (DIALOG_SAVE.equals(getParamAction())) { 1474 List errors = commitWidgetValues(); 1476 if (errors.size() > 0) { 1477 setAction(ACTION_DEFAULT); 1478 return; 1480 } 1481 setAction(ACTION_SAVE); 1482 } else if (DIALOG_OK.equals(getParamAction())) { 1483 setAction(ACTION_CANCEL); 1485 } else if (DIALOG_CANCEL.equals(getParamAction())) { 1486 setAction(ACTION_CANCEL); 1488 } else if (EDITOR_ACTION_ELEMENT_ADD.equals(getParamAction())) { 1489 setAction(ACTION_ELEMENT_ADD); 1491 actionToggleElement(); 1492 setAction(ACTION_DEFAULT); 1493 } else if (EDITOR_ACTION_ELEMENT_REMOVE.equals(getParamAction())) { 1494 setAction(ACTION_ELEMENT_REMOVE); 1496 actionToggleElement(); 1497 setAction(ACTION_DEFAULT); 1498 } else if (DIALOG_BACK.equals(getParamAction())) { 1499 setAction(ACTION_DEFAULT); 1501 List errors = commitWidgetValues(getParamPage()); 1502 if (errors.size() > 0) { 1503 return; 1505 } 1506 int pageIndex = getPages().indexOf(getParamPage()) - 1; 1507 setParamPage((String )getPages().get(pageIndex)); 1508 1509 } else if (DIALOG_CONTINUE.equals(getParamAction())) { 1510 setAction(ACTION_DEFAULT); 1512 List errors = commitWidgetValues(getParamPage()); 1513 if (errors.size() > 0) { 1514 return; 1516 } 1517 int pageIndex = getPages().indexOf(getParamPage()) + 1; 1518 setParamPage((String )getPages().get(pageIndex)); 1519 1520 } else { 1521 setAction(ACTION_DEFAULT); 1523 } 1524 } 1525 1526 1531 protected void setCommitErrors(List errors) { 1532 1533 m_commitErrors = errors; 1534 } 1535 1536 1543 protected void setKeyPrefix(String prefix) { 1544 1545 m_prefix = prefix; 1546 } 1547 1548 1553 protected void setPages(List pages) { 1554 1555 m_pages = pages; 1556 } 1557 1558 1565 protected void setValidationErrorList(List errors) { 1566 1567 m_validationErrorList = errors; 1568 } 1569 1570 1577 protected void validateParamaters() throws Exception { 1578 1579 } 1581 1582 1587 private Map getDialogObjectMap() { 1588 1589 Map objects = (Map )getSettings().getDialogObject(); 1590 if (objects == null) { 1591 objects = new Hashtable (); 1593 getSettings().setDialogObject(objects); 1594 } 1595 return objects; 1596 } 1597}
| Popular Tags
|