| 1 31 32 package org.opencms.jsp; 33 34 import org.opencms.i18n.CmsLocaleManager; 35 import org.opencms.i18n.CmsMessageContainer; 36 import org.opencms.util.CmsStringUtil; 37 import org.opencms.xml.CmsXmlUtils; 38 import org.opencms.xml.I_CmsXmlDocument; 39 40 import java.util.Locale ; 41 42 import javax.servlet.jsp.JspException ; 43 import javax.servlet.jsp.JspTagException ; 44 import javax.servlet.jsp.tagext.Tag ; 45 import javax.servlet.jsp.tagext.TagSupport ; 46 47 56 public class CmsJspTagContentCheck extends TagSupport { 57 58 59 private static final long serialVersionUID = -5996702196453747182L; 60 61 62 private boolean m_checkall; 63 64 65 private boolean m_checknone; 66 67 68 private String m_elementList; 69 70 71 private Locale m_locale; 72 73 85 public static boolean contentCheckTagAction( 86 String elementList, 87 String prefix, 88 boolean checkall, 89 boolean checknone, 90 I_CmsXmlDocument content, 91 Locale locale) { 92 93 boolean found = false; 94 String [] elements = CmsStringUtil.splitAsArray(elementList, ','); 95 for (int i = (elements.length - 1); i >= 0; i--) { 96 97 String element = CmsXmlUtils.concatXpath(prefix, elements[i].trim()); 98 found = found || content.hasValue(element, locale); 99 100 if (found && checknone) { 101 return false; 103 } 104 if (found && !checkall && !checknone) { 105 return true; 107 } 108 } 109 110 if (!found && checknone) { 111 return true; 113 } 114 115 return found; 116 } 117 118 121 public int doEndTag() { 122 123 release(); 125 return EVAL_PAGE; 126 } 127 128 131 public int doStartTag() throws JspException { 132 133 Tag ancestor = findAncestorWithClass(this, I_CmsXmlContentContainer.class); 135 if (ancestor == null) { 136 CmsMessageContainer errMsgContainer = Messages.get().container(Messages.ERR_TAG_CONTENTCHECK_WRONG_PARENT_0); 137 String msg = Messages.getLocalizedMessage(errMsgContainer, pageContext); 138 throw new JspTagException (msg); 139 } 140 I_CmsXmlContentContainer contentContainer = (I_CmsXmlContentContainer)ancestor; 141 String prefix = contentContainer.getXmlDocumentElement(); 142 143 I_CmsXmlDocument content = contentContainer.getXmlDocument(); 145 146 if (m_locale == null) { 147 m_locale = contentContainer.getXmlDocumentLocale(); 148 } 149 150 boolean result = contentCheckTagAction(m_elementList, prefix, m_checkall, m_checknone, content, m_locale); 152 153 if (result) { 154 return EVAL_BODY_INCLUDE; 155 } else { 156 return SKIP_BODY; 157 } 158 } 159 160 165 public String getIfexists() { 166 167 return m_elementList != null ? m_elementList : ""; 168 } 169 170 175 public String getIfexistsall() { 176 177 return m_elementList != null ? m_elementList : ""; 178 } 179 180 185 public String getIfexistsnone() { 186 187 return m_elementList != null ? m_elementList : ""; 188 } 189 190 195 public String getIfexistsone() { 196 197 return m_elementList != null ? m_elementList : ""; 198 } 199 200 205 public String getLocale() { 206 207 return (m_locale != null) ? m_locale.toString() : ""; 208 } 209 210 213 public void release() { 214 215 m_checkall = false; 216 m_checknone = false; 217 m_elementList = null; 218 m_locale = null; 219 super.release(); 220 } 221 222 227 public void setIfexists(String elementList) { 228 229 if (elementList != null) { 230 m_elementList = elementList; 231 m_checkall = false; 232 m_checknone = false; 233 } 234 } 235 236 241 public void setIfexistsall(String elementList) { 242 243 if (elementList != null) { 244 m_elementList = elementList; 245 m_checkall = true; 246 m_checknone = false; 247 } 248 } 249 250 255 public void setIfexistsnone(String elementList) { 256 257 if (elementList != null) { 258 m_elementList = elementList; 259 m_checkall = false; 260 m_checknone = true; 261 } 262 } 263 264 269 public void setIfexistsone(String elementList) { 270 271 if (elementList != null) { 272 m_elementList = elementList; 273 m_checkall = false; 274 m_checknone = false; 275 } 276 } 277 278 283 public void setLocale(String locale) { 284 285 if (CmsStringUtil.isEmpty(locale)) { 286 m_locale = null; 287 } else { 288 m_locale = CmsLocaleManager.getLocale(locale); 289 } 290 } 291 } | Popular Tags |