1 28 29 package org.opencms.workplace.comparison; 30 31 import com.alkacon.diff.Diff; 32 33 import org.opencms.i18n.CmsEncoder; 34 import org.opencms.jsp.CmsJspActionElement; 35 import org.opencms.util.CmsHtml2TextConverter; 36 import org.opencms.util.CmsStringUtil; 37 import org.opencms.workplace.CmsWorkplaceSettings; 38 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpServletResponse ; 41 import javax.servlet.jsp.JspWriter ; 42 import javax.servlet.jsp.PageContext ; 43 44 53 public class CmsHtmlDifferenceDialog extends CmsDifferenceDialog { 54 55 56 public static final String MODE_HTML = "html"; 57 58 59 public static final String MODE_TEXT = "text"; 60 61 62 public static final String PARAM_TEXTMODE = "textmode"; 63 64 69 public CmsHtmlDifferenceDialog(CmsJspActionElement jsp) { 70 71 super(jsp); 72 } 73 74 81 public CmsHtmlDifferenceDialog(PageContext context, HttpServletRequest req, HttpServletResponse res) { 82 83 this(new CmsJspActionElement(context, req, res)); 84 } 85 86 91 public void displayDialog() throws Exception { 92 93 if (getAction() == ACTION_CANCEL) { 94 actionCloseDialog(); 95 } 96 JspWriter out = getJsp().getJspContext().getOut(); 97 out.print("<link rel='stylesheet' type='text/css' HREF='"); 98 out.print(getStyleUri(getJsp())); 99 out.println("diff.css'>"); 100 out.println(dialogContentStart(getParamTitle())); 101 out.print("<form name='diff-form' method='post' action='"); 102 out.print(getDialogUri()); 103 out.println("'>"); 104 out.println(allParamsAsHidden()); 105 out.println("</form>"); 106 out.println("<p>"); 107 out.println(getDiffOnlyButtonsHtml()); 108 109 String onClic1 = "javascript:document.forms['diff-form'].textmode.value = '"; 110 onClic1 += MODE_TEXT; 111 onClic1 += "'; document.forms['diff-form'].submit();"; 112 String onClic2 = "javascript:document.forms['diff-form'].textmode.value = '"; 113 onClic2 += MODE_HTML; 114 onClic2 += "'; document.forms['diff-form'].submit();"; 115 out.println(getTwoButtonsHtml(Messages.get().container(Messages.GUI_DIFF_MODE_TEXT_0).key(getLocale()), 116 Messages.get().container(Messages.GUI_DIFF_MODE_HTML_0).key(getLocale()), onClic1, onClic2, 117 MODE_HTML.equals(getParamTextmode()) 118 )); 119 120 out.println("</p>"); 121 out.println(dialogBlockStart(null)); 122 out.println("<table cellspacing='0' cellpadding='0' class='xmlTable'>\n<tr><td><pre style='overflow:auto'>"); 123 try { 124 CmsHtmlDifferenceConfiguration conf = new CmsHtmlDifferenceConfiguration( 125 getMode() == CmsDiffViewMode.ALL ? -1 : getLinesBeforeSkip(), 126 getLocale()); 127 String originalSource = getOriginalSource(); 128 String copySource = getCopySource(); 129 if (MODE_TEXT.equals(getParamTextmode())) { 130 originalSource = CmsHtml2TextConverter.html2text(originalSource, CmsEncoder.ENCODING_ISO_8859_1); 131 copySource = CmsHtml2TextConverter.html2text(copySource, CmsEncoder.ENCODING_ISO_8859_1); 132 } 133 String diff = Diff.diffAsHtml(originalSource, copySource, conf); 134 if (CmsStringUtil.isNotEmpty(diff)) { 135 out.println(diff); 136 } else { 137 String htmlDiff = Diff.diffAsHtml(getOriginalSource(), getCopySource(), conf); 138 if (CmsStringUtil.isNotEmpty(htmlDiff)) { 139 out.println(Messages.get().container(Messages.GUI_COMPARE_IDENTICAL_TEXT_DIFFERENT_HTML_0).key( 141 getLocale())); 142 } else if (getMode() == CmsDiffViewMode.ALL) { 143 out.println(wrapLinesWithUnchangedStyle(CmsStringUtil.substitute( 145 CmsStringUtil.escapeHtml(originalSource), 146 "<br/>", 147 ""))); 148 } 149 } 150 } catch (Exception e) { 151 out.print(e); 152 } 153 out.println("</pre></td></tr>\n</table>"); 154 out.println(dialogBlockEnd()); 155 out.println(dialogContentEnd()); 156 out.println(dialogEnd()); 157 out.println(bodyEnd()); 158 out.println(htmlEnd()); 159 } 160 161 164 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 165 166 super.initWorkplaceRequestValues(settings, request); 167 if (CmsStringUtil.isEmptyOrWhitespaceOnly(getParamTextmode())) { 168 setParamTextmode(MODE_TEXT); 170 } 171 } 172 173 177 protected void validateParamaters() { 178 179 } 181 } | Popular Tags |