1 16 package org.outerj.daisy.frontend; 17 18 import java.util.Map ; 19 20 import org.apache.avalon.framework.logger.LogEnabled; 21 import org.apache.avalon.framework.logger.Logger; 22 import org.apache.avalon.framework.parameters.Parameters; 23 import org.apache.avalon.framework.thread.ThreadSafe; 24 import org.apache.cocoon.acting.Action; 25 import org.apache.cocoon.environment.ObjectModelHelper; 26 import org.apache.cocoon.environment.Redirector; 27 import org.apache.cocoon.environment.Request; 28 import org.apache.cocoon.environment.SourceResolver; 29 30 import org.apache.cocoon.util.NetUtils; 31 import org.apache.excalibur.source.Source; 32 33 39 public class MountPointAction implements Action, ThreadSafe, LogEnabled { 40 private Logger logger; 41 42 public Map act(Redirector redirector, SourceResolver sourceResolver, Map objectModel, String source, Parameters parameters) throws Exception { 43 Request request = ObjectModelHelper.getRequest(objectModel); 44 45 if (request.getAttribute("mountPoint") == null) { 46 String mountPoint = ""; 47 String requestURI = NetUtils.decodePath(request.getRequestURI()); 48 int semicolonPos = requestURI.lastIndexOf(';'); 51 if (semicolonPos != -1) 52 requestURI = requestURI.substring(0, semicolonPos); 53 String sitemapURI = request.getSitemapURI(); 54 int pos = requestURI.lastIndexOf(sitemapURI); 55 if (pos != -1) 56 mountPoint = requestURI.substring(0, pos - 1); 57 request.setAttribute("mountPoint", mountPoint); 58 if (getLogger().isDebugEnabled()) 59 getLogger().debug("mountPoint = " + mountPoint); 60 61 String contextPath = request.getContextPath(); 62 String daisyCocoonPath; 63 if (contextPath.equals("")) { 64 daisyCocoonPath = mountPoint; 65 } else { 66 if (!mountPoint.startsWith(contextPath)) { 67 throw new Exception ("MountPoint does not start with contextPath."); 68 } 69 daisyCocoonPath = mountPoint.substring(contextPath.length()); 70 } 71 request.setAttribute("daisyCocoonPath", daisyCocoonPath); 72 73 74 String daisyContextPath; 75 Source contextSource = sourceResolver.resolveURI(""); 76 try { 77 daisyContextPath = contextSource.getURI(); 78 } finally { 79 sourceResolver.release(contextSource); 80 } 81 request.setAttribute("daisyContextPath", daisyContextPath); 82 } else { 83 if (getLogger().isDebugEnabled()) 84 getLogger().debug("mountPoint = " + request.getAttribute("mountPoint") + " already set!"); 85 } 86 87 return null; 88 } 89 90 public void enableLogging(Logger logger) { 91 this.logger = logger; 92 } 93 94 protected Logger getLogger() { 95 return this.logger; 96 } 97 } 98 | Popular Tags |