| 1 31 32 package org.opencms.jsp; 33 34 import org.opencms.i18n.CmsMessageContainer; 35 import org.opencms.xml.CmsXmlUtils; 36 import org.opencms.xml.I_CmsXmlDocument; 37 38 import java.util.List ; 39 import java.util.Locale ; 40 41 import javax.servlet.jsp.JspException ; 42 import javax.servlet.jsp.JspTagException ; 43 import javax.servlet.jsp.tagext.Tag ; 44 import javax.servlet.jsp.tagext.TagSupport ; 45 46 55 public class CmsJspTagContentLoop extends TagSupport implements I_CmsXmlContentContainer { 56 57 58 private static final long serialVersionUID = 8832749526732064836L; 59 60 61 private I_CmsXmlContentContainer m_container; 62 63 64 private I_CmsXmlDocument m_content; 65 66 67 private String m_currentElement; 68 69 70 private String m_element; 71 72 73 private boolean m_firstLoop; 74 75 76 private int m_index = -1; 77 78 79 private Locale m_locale; 80 81 84 public CmsJspTagContentLoop() { 85 86 super(); 87 } 88 89 95 public CmsJspTagContentLoop(I_CmsXmlContentContainer container, String element) { 96 97 m_element = element; 98 init(container); 99 } 100 101 104 public int doAfterBody() { 105 106 if (hasMoreContent()) { 107 return EVAL_BODY_AGAIN; 109 } 110 return SKIP_BODY; 112 } 113 114 117 public int doEndTag() { 118 119 release(); 121 return EVAL_PAGE; 122 } 123 124 127 public int doStartTag() throws JspException { 128 129 Tag ancestor = findAncestorWithClass(this, I_CmsXmlContentContainer.class); 131 if (ancestor == null) { 132 CmsMessageContainer errMsgContainer = Messages.get().container(Messages.ERR_PARENTLESS_TAG_1, "contentloop"); 133 String msg = Messages.getLocalizedMessage(errMsgContainer, pageContext); 134 throw new JspTagException (msg); 135 } 136 I_CmsXmlContentContainer container = (I_CmsXmlContentContainer)ancestor; 137 138 init(container); 140 141 if (hasMoreContent()) { 142 return EVAL_BODY_INCLUDE; 144 } else { 145 return SKIP_BODY; 147 } 148 } 149 150 153 public String getCollectorName() { 154 155 return m_container.getCollectorName(); 156 } 157 158 161 public String getCollectorParam() { 162 163 return m_container.getCollectorParam(); 164 } 165 166 169 public List getCollectorResult() { 170 171 return m_container.getCollectorResult(); 172 } 173 174 179 public String getElement() { 180 181 return (m_element != null) ? m_element : ""; 182 } 183 184 187 public String getResourceName() { 188 189 return m_container.getResourceName(); 190 } 191 192 195 public I_CmsXmlDocument getXmlDocument() { 196 197 return m_content; 198 } 199 200 203 public String getXmlDocumentElement() { 204 205 return m_currentElement; 206 } 207 208 211 public Locale getXmlDocumentLocale() { 212 213 return m_locale; 214 } 215 216 219 public boolean hasMoreContent() { 220 221 if (m_firstLoop) { 222 m_firstLoop = false; 223 } else { 224 m_index++; 225 } 226 if (m_content.hasValue(m_element, m_locale, m_index)) { 227 m_currentElement = CmsXmlUtils.createXpath(m_element, m_index + 1); 228 return true; 230 } else { 231 return false; 233 } 234 } 235 236 239 public boolean isPreloader() { 240 241 return m_container.isPreloader(); 242 } 243 244 247 public void release() { 248 249 m_element = null; 250 m_currentElement = null; 251 m_content = null; 252 m_locale = null; 253 m_container = null; 254 m_index = 0; 255 super.release(); 256 } 257 258 263 public void setElement(String element) { 264 265 m_element = element; 266 } 267 268 273 protected void init(I_CmsXmlContentContainer container) { 274 275 m_container = container; 276 277 m_element = CmsXmlUtils.concatXpath(m_container.getXmlDocumentElement(), m_element); 279 280 m_content = m_container.getXmlDocument(); 282 m_locale = m_container.getXmlDocumentLocale(); 283 m_index = 0; 284 m_currentElement = null; 285 286 m_firstLoop = true; 288 } 289 } | Popular Tags |