svn commit: r596327 - /lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/SiteSource.java

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
Author: andreas
Date: Mon Nov 19 07:32:10 2007
New Revision: 596327

URL: http://svn.apache.org/viewvc?rev=596327&view=rev
Log:
SiteSource: Refactoring, code simplification (no functional changes)

Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/SiteSource.java

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/SiteSource.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/SiteSource.java?rev=596327&r1=596326&r2=596327&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/SiteSource.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/SiteSource.java Mon Nov 19 07:32:10 2007
@@ -20,18 +20,19 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
+import java.util.StringTokenizer;
 
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.environment.Request;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceNotFoundException;
 import org.apache.excalibur.source.SourceResolver;
 import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.TimeStampValidity;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentException;
 import org.apache.lenya.cms.publication.DocumentFactory;
@@ -40,8 +41,8 @@
 import org.apache.lenya.cms.publication.URLInformation;
 import org.apache.lenya.cms.repository.RepositoryUtil;
 import org.apache.lenya.cms.repository.Session;
-import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.site.SiteStructure;
+import org.apache.lenya.util.Query;
 import org.apache.lenya.util.ServletHelper;
 
 /**
@@ -53,7 +54,7 @@
     private Source delegate;
     private String scheme;
     private String uri;
-    
+
     /**
      * @param manager The service manager.
      * @param request The cocoon request.
@@ -62,36 +63,33 @@
      */
     public SiteSource(ServiceManager manager, Request request, String location, Logger logger) {
         ContainerUtil.enableLogging(this, logger);
-        
+
         this.manager = manager;
         this.uri = location;
-        
-        String area = null;
+
+        String areaName = null;
         String pubId;
 
-        String completePath = location.split("\\?")[0];
-        String queryString = null;
-        if (location.indexOf("?") > -1) {
-            queryString = location.split("\\?")[1];
-        }
+        StringTokenizer locationSteps = new StringTokenizer(location, "?");
+        String completePath = locationSteps.nextToken();
 
         String relativePath;
         try {
 
-            this.scheme = completePath.split(":")[0] + ":";
+            this.scheme = completePath.substring(0, completePath.indexOf(":") + 1);
             final String absolutePath = completePath.substring(scheme.length());
             if (absolutePath.startsWith("//")) {
                 final String fullPath = absolutePath.substring(2);
-                String[] steps = fullPath.split("/");
-                pubId = steps[0];
-                area = steps[1];
-                String prefix = pubId + "/" + area;
+                StringTokenizer steps = new StringTokenizer(fullPath, "/");
+                pubId = steps.nextToken();
+                areaName = steps.nextToken();
+                String prefix = pubId + "/" + areaName;
                 relativePath = fullPath.substring(prefix.length());
             } else if (absolutePath.startsWith("/")) {
                 String webappUrl = ServletHelper.getWebappURI(request);
                 URLInformation info = new URLInformation(webappUrl);
                 pubId = info.getPublicationId();
-                area = info.getArea();
+                areaName = info.getArea();
                 relativePath = absolutePath;
             } else {
                 throw new MalformedURLException("The path [" + absolutePath
@@ -100,41 +98,30 @@
 
             DocumentFactory factory = DocumentUtil.getDocumentFactory(this.manager, request);
             Publication pub = factory.getPublication(pubId);
+            SiteStructure site = pub.getArea(areaName).getSite();
+
             String[] steps = relativePath.substring(1).split("/");
 
             String language = steps[0];
             String prefix = "/" + language;
             String path = relativePath.substring(prefix.length());
 
-            ServiceSelector selector = null;
-            SiteManager siteManager = null;
-
-            try {
-                selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
-                siteManager = (SiteManager) selector.select(pub.getSiteManagerHint());
-                SiteStructure structure = siteManager.getSiteStructure(factory, pub, area);
-                
-                if (structure.contains(path, language)) {
-                    Document doc = structure.getNode(path).getLink(language).getDocument();
-                    if (queryString != null && queryString.length() > 0) {
-                        this.delegate = getFormatSource(doc, queryString);
-                    } else {
-                        String lenyaURL = doc.getSourceURI();
-                        Session session = RepositoryUtil.getSession(this.manager, request);
-                        this.delegate = new RepositorySource(manager, lenyaURL, session, getLogger());
+            if (site.contains(path, language)) {
+                Document doc = site.getNode(path).getLink(language).getDocument();
+                if (locationSteps.hasMoreTokens()) {
+                    Query query = new Query(locationSteps.nextToken());
+                    String format = query.getValue("format");
+                    if (format != null) {
+                        this.delegate = getFormatSource(doc, format);
                     }
                 }
-                
-            } finally {
-                if (selector != null) {
-                    if (siteManager != null) {
-                        selector.release(siteManager);
-                    }
-                    this.manager.release(selector);
+                if (this.delegate == null) {
+                    String lenyaURL = doc.getSourceURI();
+                    Session session = RepositoryUtil.getSession(this.manager, request);
+                    this.delegate = new RepositorySource(manager, lenyaURL, session, getLogger());
                 }
             }
 
-
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -178,30 +165,20 @@
         }
     }
 
-    protected Source getFormatSource(Document doc, String queryString) throws DocumentException, ServiceException, MalformedURLException, IOException {
-        String name = queryString.split("=")[0];
-        String value = queryString.split("=")[1];
-
-        if (name.equals("format")) {
-            String format = value;
-            String formatBaseUri = doc.getResourceType().getFormatURI(format);
-            String formatUri = formatBaseUri + "/" + doc.getPublication().getId() + "/"
-                    + doc.getArea() + "/" + doc.getUUID() + "/" + doc.getLanguage();
-            
-            SourceResolver resolver = null;
-            try {
-                resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
-                return resolver.resolveURI(formatUri);
-            }
-            finally {
-                if (resolver != null) {
-                    this.manager.release(resolver);
-                }
+    protected Source getFormatSource(Document doc, String format) throws DocumentException,
+            ServiceException, MalformedURLException, IOException {
+        String formatBaseUri = doc.getResourceType().getFormatURI(format);
+        String formatUri = formatBaseUri + "/" + doc.getPublication().getId() + "/" + doc.getArea()
+                + "/" + doc.getUUID() + "/" + doc.getLanguage();
+
+        SourceResolver resolver = null;
+        try {
+            resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
+            return resolver.resolveURI(formatUri);
+        } finally {
+            if (resolver != null) {
+                this.manager.release(resolver);
             }
-            
-        } else {
-            throw new MalformedURLException("The parameter [" + name
-                    + "] is not supported.");
         }
     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.