1 31 32 package org.opencms.flex; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.main.CmsEvent; 36 import org.opencms.main.CmsLog; 37 import org.opencms.main.I_CmsEventListener; 38 import org.opencms.main.OpenCms; 39 import org.opencms.security.CmsRole; 40 import org.opencms.staticexport.CmsLinkManager; 41 42 import java.util.Arrays ; 43 import java.util.Collections ; 44 import java.util.Enumeration ; 45 import java.util.HashMap ; 46 import java.util.Iterator ; 47 import java.util.List ; 48 import java.util.Map ; 49 import java.util.Vector ; 50 51 import javax.servlet.http.HttpServletRequest ; 52 import javax.servlet.http.HttpServletRequestWrapper ; 53 54 import org.apache.commons.logging.Log; 55 56 68 public class CmsFlexRequest extends HttpServletRequestWrapper { 69 70 71 public static final String PARAMETER_FLEX = "_flex"; 72 73 74 private static final Log LOG = CmsLog.getLog(CmsFlexRequest.class); 75 76 77 private boolean m_canCache; 78 79 80 private CmsFlexController m_controller; 81 82 83 private boolean m_doRecompile; 84 85 86 private String m_elementUri; 87 88 89 private String m_elementUriSiteRoot; 90 91 92 private List m_includeCalls; 93 94 95 private boolean m_isOnline; 96 97 98 private CmsFlexRequestKey m_key; 99 100 101 private Map m_parameters; 102 103 104 private String m_requestUri; 105 106 107 private StringBuffer m_requestUrl; 108 109 117 public CmsFlexRequest(HttpServletRequest req, CmsFlexController controller) { 118 119 super(req); 120 m_controller = controller; 121 CmsObject cms = m_controller.getCmsObject(); 122 m_elementUri = cms.getSitePath(m_controller.getCmsResource()); 123 m_elementUriSiteRoot = cms.getRequestContext().getSiteRoot(); 124 m_includeCalls = new Vector (); 125 m_parameters = req.getParameterMap(); 126 m_isOnline = cms.getRequestContext().currentProject().isOnlineProject(); 127 String [] paras = req.getParameterValues(PARAMETER_FLEX); 128 boolean nocachepara = false; 129 boolean dorecompile = false; 130 if (paras != null) { 131 if (cms.hasRole(CmsRole.WORKPLACE_MANAGER)) { 132 List l = Arrays.asList(paras); 133 boolean firstCall = controller.isEmptyRequestList(); 134 nocachepara = l.contains("nocache"); 135 dorecompile = l.contains("recompile"); 136 boolean p_on = l.contains("online"); 137 boolean p_off = l.contains("offline"); 138 if (l.contains("purge") && firstCall) { 139 OpenCms.fireCmsEvent(new CmsEvent( 140 I_CmsEventListener.EVENT_FLEX_PURGE_JSP_REPOSITORY, 141 new HashMap (0))); 142 OpenCms.fireCmsEvent(new CmsEvent( 143 I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR, 144 Collections.singletonMap("action", new Integer (CmsFlexCache.CLEAR_ENTRIES)))); 145 dorecompile = false; 146 } else if ((l.contains("clearcache") || dorecompile) && firstCall) { 147 if (!(p_on || p_off)) { 148 OpenCms.fireCmsEvent(new CmsEvent( 149 I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR, 150 Collections.singletonMap("action", new Integer (CmsFlexCache.CLEAR_ALL)))); 151 } else { 152 if (p_on) { 153 OpenCms.fireCmsEvent(new CmsEvent( 154 I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR, 155 Collections.singletonMap("action", new Integer (CmsFlexCache.CLEAR_ONLINE_ALL)))); 156 } 157 if (p_off) { 158 OpenCms.fireCmsEvent(new CmsEvent( 159 I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR, 160 Collections.singletonMap("action", new Integer (CmsFlexCache.CLEAR_OFFLINE_ALL)))); 161 } 162 } 163 } else if (l.contains("clearvariations") && firstCall) { 164 if (!(p_on || p_off)) { 165 OpenCms.fireCmsEvent(new CmsEvent( 166 I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR, 167 Collections.singletonMap("action", new Integer (CmsFlexCache.CLEAR_ENTRIES)))); 168 } else { 169 if (p_on) { 170 OpenCms.fireCmsEvent(new CmsEvent( 171 I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR, 172 Collections.singletonMap("action", new Integer (CmsFlexCache.CLEAR_ONLINE_ENTRIES)))); 173 } 174 if (p_off) { 175 OpenCms.fireCmsEvent(new CmsEvent( 176 I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR, 177 Collections.singletonMap("action", new Integer (CmsFlexCache.CLEAR_OFFLINE_ENTRIES)))); 178 } 179 } 180 } 181 } 182 } 183 m_canCache = (((m_isOnline || m_controller.getCmsCache().cacheOffline()) && !nocachepara) || dorecompile); 184 m_doRecompile = dorecompile; 185 if (LOG.isDebugEnabled()) { 186 LOG.debug(Messages.get().getBundle().key(Messages.LOG_FLEXREQUEST_CREATED_NEW_REQUEST_1, m_elementUri)); 187 } 188 } 189 190 197 CmsFlexRequest(HttpServletRequest req, CmsFlexController controller, String resource) { 198 199 super(req); 200 m_controller = controller; 201 m_elementUri = CmsLinkManager.getAbsoluteUri(resource, m_controller.getCurrentRequest().getElementUri()); 202 m_elementUriSiteRoot = m_controller.getCurrentRequest().m_elementUriSiteRoot; 203 m_isOnline = m_controller.getCurrentRequest().isOnline(); 204 m_canCache = m_controller.getCurrentRequest().isCacheable(); 205 m_doRecompile = m_controller.getCurrentRequest().isDoRecompile(); 206 m_includeCalls = m_controller.getCurrentRequest().getCmsIncludeCalls(); 207 m_parameters = req.getParameterMap(); 208 if (LOG.isDebugEnabled()) { 209 LOG.debug(Messages.get().getBundle().key(Messages.LOG_FLEXREQUEST_REUSING_FLEX_REQUEST_1, m_elementUri)); 210 } 211 } 212 213 227 public Map addParameterMap(Map map) { 228 229 if (map == null) { 230 return m_parameters; 231 } 232 if ((m_parameters == null) || (m_parameters.size() == 0)) { 233 m_parameters = Collections.unmodifiableMap(map); 234 } else { 235 HashMap parameters = new HashMap (); 236 parameters.putAll(m_parameters); 237 238 Iterator it = map.keySet().iterator(); 239 while (it.hasNext()) { 240 String key = (String )it.next(); 241 if (parameters.containsKey(key)) { 243 244 String [] oldValues = (String [])parameters.get(key); 245 String [] newValues = (String [])map.get(key); 246 247 String [] mergeValues = new String [oldValues.length + newValues.length]; 248 System.arraycopy(newValues, 0, mergeValues, 0, newValues.length); 249 System.arraycopy(oldValues, 0, mergeValues, newValues.length, oldValues.length); 250 251 parameters.put(key, mergeValues); 252 } else { 253 parameters.put(key, map.get(key)); 255 } 256 } 257 m_parameters = Collections.unmodifiableMap(parameters); 258 } 259 260 return m_parameters; 261 } 262 263 268 public String getElementRootPath() { 269 270 return m_controller.getCmsObject().getRequestContext().addSiteRoot(m_elementUriSiteRoot, m_elementUri); 271 } 272 273 282 public String getElementUri() { 283 284 return m_elementUri; 285 } 286 287 298 public String getParameter(String name) { 299 300 String [] values = (String [])m_parameters.get(name); 301 if (values != null) { 302 return (values[0]); 303 } else { 304 return (null); 305 } 306 } 307 308 319 public Map getParameterMap() { 320 321 return m_parameters; 322 } 323 324 330 public Enumeration getParameterNames() { 331 332 Vector v = new Vector (); 333 v.addAll(m_parameters.keySet()); 334 return (v.elements()); 335 } 336 337 346 public String [] getParameterValues(String name) { 347 348 return (String [])m_parameters.get(name); 349 } 350 351 358 public javax.servlet.RequestDispatcher getRequestDispatcher(String target) { 359 360 String absolutUri = CmsLinkManager.getAbsoluteUri(target, m_controller.getCurrentRequest().getElementUri()); 361 return new CmsFlexRequestDispatcher( 362 m_controller.getTopRequest().getRequestDispatcher(absolutUri), 363 absolutUri, 364 null); 365 } 366 367 378 public CmsFlexRequestDispatcher getRequestDispatcherToExternal(String vfs_target, String ext_target) { 379 380 return new CmsFlexRequestDispatcher( 381 m_controller.getTopRequest().getRequestDispatcher(ext_target), 382 CmsLinkManager.getAbsoluteUri(vfs_target, m_controller.getCmsObject().getRequestContext().getUri()), 383 ext_target); 384 } 385 386 397 public String getRequestURI() { 398 399 if (m_requestUri != null) { 400 return m_requestUri; 401 } 402 StringBuffer buf = new StringBuffer (128); 403 buf.append(OpenCms.getSystemInfo().getOpenCmsContext()); 404 buf.append(getElementUri()); 405 m_requestUri = buf.toString(); 406 return m_requestUri; 407 } 408 409 416 public StringBuffer getRequestURL() { 417 418 if (m_requestUrl != null) { 419 return m_requestUrl; 420 } 421 StringBuffer buf = new StringBuffer (128); 422 buf.append(getScheme()); 423 buf.append("://"); 424 buf.append(getServerName()); 425 buf.append(":"); 426 buf.append(getServerPort()); 427 buf.append(getRequestURI()); 428 m_requestUrl = buf; 429 return m_requestUrl; 430 } 431 432 441 public boolean isDoRecompile() { 442 443 return m_doRecompile; 444 } 445 446 468 public boolean isOnline() { 469 470 return m_isOnline; 471 } 472 473 485 public void setParameterMap(Map map) { 486 487 m_parameters = map; 488 } 489 490 493 public String toString() { 494 495 return m_elementUri; 497 } 498 499 507 protected List getCmsIncludeCalls() { 508 509 return m_includeCalls; 510 } 511 512 520 void addInlucdeCall(String target) { 521 522 m_includeCalls.add(target); 523 } 524 525 535 boolean containsIncludeCall(String target) { 536 537 return m_includeCalls.contains(target); 538 } 539 540 546 CmsFlexRequestKey getCmsCacheKey() { 547 548 if (m_key == null) { 550 m_key = new CmsFlexRequestKey(this, m_elementUri, m_isOnline); 551 } 552 return m_key; 553 } 554 555 564 boolean isCacheable() { 565 566 return m_canCache; 567 } 568 569 577 void removeIncludeCall(String target) { 578 579 m_includeCalls.remove(target); 580 } 581 } 582
| Popular Tags
|