1 31 32 package org.opencms.jsp; 33 34 import org.opencms.flex.CmsFlexController; 35 import org.opencms.loader.I_CmsResourceLoader; 36 import org.opencms.main.CmsException; 37 import org.opencms.main.CmsLog; 38 import org.opencms.main.OpenCms; 39 import org.opencms.util.CmsStringUtil; 40 import org.opencms.xml.I_CmsXmlDocument; 41 import org.opencms.xml.page.CmsXmlPageFactory; 42 43 import java.util.List ; 44 import java.util.Locale ; 45 46 import javax.servlet.ServletRequest ; 47 import javax.servlet.jsp.tagext.BodyTagSupport ; 48 49 import org.apache.commons.logging.Log; 50 51 59 public class CmsJspTagTemplate extends BodyTagSupport { 60 61 62 private static final long serialVersionUID = -3773247710025810438L; 63 64 65 private static final Log LOG = CmsLog.getLog(CmsJspTagTemplate.class); 66 67 68 private boolean m_checkall; 69 70 71 private boolean m_checknone; 72 73 74 private String m_element; 75 76 77 private String m_elementlist; 78 79 90 public static boolean templateTagAction( 91 String element, 92 String elementlist, 93 boolean checkall, 94 boolean checknone, 95 ServletRequest req) { 96 97 if (elementlist != null) { 98 99 CmsFlexController controller = CmsFlexController.getController(req); 100 String filename = controller.getCmsObject().getRequestContext().getUri(); 101 102 I_CmsXmlDocument content = null; 103 try { 104 content = CmsXmlPageFactory.unmarshal(controller.getCmsObject(), filename, req); 105 } catch (CmsException e) { 106 LOG.error(Messages.get().getBundle().key(Messages.ERR_XML_DOCUMENT_UNMARSHAL_1, filename), e); 107 } 108 109 if (content != null) { 110 String absolutePath = controller.getCmsObject().getSitePath(content.getFile()); 111 String [] elements = CmsStringUtil.splitAsArray(elementlist, ','); 113 boolean found = false; 114 for (int i = 0; i < elements.length; i++) { 115 String el = elements[i].trim(); 116 List locales = content.getLocales(el); 117 Locale locale = null; 118 if ((locales != null) && (locales.size() != 0)) { 119 locale = OpenCms.getLocaleManager().getBestMatchingLocale( 120 controller.getCmsObject().getRequestContext().getLocale(), 121 OpenCms.getLocaleManager().getDefaultLocales(controller.getCmsObject(), absolutePath), 122 locales); 123 } 124 if ((locale != null) && content.hasValue(el, locale) && content.isEnabled(el, locale)) { 125 126 found = true; 127 if (!checkall) { 128 break; 130 } 131 } else { 132 if (checkall) { 133 return false; 135 } 136 } 137 } 138 139 if (!found && !checknone) { 140 return false; 142 } else if (found && checknone) { 143 return false; 145 } 146 } 147 } 148 149 String param = req.getParameter(I_CmsResourceLoader.PARAMETER_ELEMENT); 151 return ((element == null) || (param == null) || (param.equals(element))); 152 } 153 154 157 public int doStartTag() { 158 159 if (templateTagAction(m_element, m_elementlist, m_checkall, m_checknone, pageContext.getRequest())) { 160 return EVAL_BODY_INCLUDE; 161 } else { 162 return SKIP_BODY; 163 } 164 } 165 166 171 public String getElement() { 172 173 return m_element != null ? m_element : ""; 174 } 175 176 181 public String getIfexists() { 182 183 return m_elementlist != null ? m_elementlist : ""; 184 } 185 186 191 public String getIfexistsall() { 192 193 return m_elementlist != null ? m_elementlist : ""; 194 } 195 196 201 public String getIfexistsnone() { 202 203 return m_elementlist != null ? m_elementlist : ""; 204 } 205 206 211 public String getIfexistsone() { 212 213 return m_elementlist != null ? m_elementlist : ""; 214 } 215 216 219 public void release() { 220 221 super.release(); 222 m_element = null; 223 } 224 225 230 public void setElement(String element) { 231 232 if (element != null) { 233 m_element = element.toLowerCase(); 234 } 235 } 236 237 242 public void setIfexists(String elements) { 243 244 if (elements != null) { 245 m_elementlist = elements; 246 m_checkall = false; 247 m_checknone = false; 248 } 249 } 250 251 256 public void setIfexistsall(String elements) { 257 258 if (elements != null) { 259 m_elementlist = elements; 260 m_checkall = true; 261 m_checknone = false; 262 } 263 } 264 265 270 public void setIfexistsnone(String elements) { 271 272 if (elements != null) { 273 m_elementlist = elements; 274 m_checkall = false; 275 m_checknone = true; 276 } 277 } 278 279 284 public void setIfexistsone(String elements) { 285 286 if (elements != null) { 287 m_elementlist = elements; 288 m_checkall = false; 289 m_checknone = false; 290 } 291 } 292 } | Popular Tags |