You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2006/08/08 11:55:27 UTC

svn commit: r429620 - in /lenya/trunk/src: java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java java/org/apache/lenya/cms/publication/util/DocumentLanguagesHelper.java webapp/lenya/content/exception/missing-language.xsp

Author: andreas
Date: Tue Aug  8 02:55:27 2006
New Revision: 429620

URL: http://svn.apache.org/viewvc?rev=429620&view=rev
Log:
Updated "language does not exist" page to new API

Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentLanguagesHelper.java
    lenya/trunk/src/webapp/lenya/content/exception/missing-language.xsp

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java?rev=429620&r1=429619&r2=429620&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java Tue Aug  8 02:55:27 2006
@@ -19,23 +19,28 @@
 
 package org.apache.lenya.cms.cocoon.acting;
 
-import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.acting.ServiceableAction;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Redirector;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.SourceResolver;
-import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentBuilder;
 import org.apache.lenya.cms.publication.DocumentDoesNotExistException;
 import org.apache.lenya.cms.publication.DocumentFactory;
+import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.DocumentUtil;
+import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.publication.PublicationUtil;
 import org.apache.lenya.cms.repository.RepositoryUtil;
 import org.apache.lenya.cms.repository.Session;
+import org.apache.lenya.cms.site.SiteUtil;
 import org.apache.lenya.util.ServletHelper;
 
 /**
@@ -72,18 +77,46 @@
         DocumentFactory map = DocumentUtil.createDocumentIdentityMap(this.manager, session);
 
         String url = ServletHelper.getWebappURI(request);
-        Document doc = map.getFromURL(url);
-        String language = doc.getLanguage();
 
-        if (!doc.existsInAnyLanguage()) {
-            throw new DocumentDoesNotExistException("Document " + doc
-                    + " does not exist. Check sitetree, it might need to be reloaded.");
+        Publication pub = PublicationUtil.getPublication(this.manager, objectModel);
+        if (!pub.exists()) {
+            return null;
         }
-        List availableLanguages = Arrays.asList(doc.getLanguages());
 
-        if (availableLanguages.contains(language)) {
-            return Collections.unmodifiableMap(Collections.EMPTY_MAP);
+        DocumentBuilder builder = null;
+        ServiceSelector selector = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(DocumentBuilder.ROLE + "Selector");
+            builder = (DocumentBuilder) selector.select(pub.getDocumentBuilderHint());
+            DocumentLocator locator = builder.getLocator(url);
+
+            List availableLanguages = new ArrayList();
+
+            String[] languages = pub.getLanguages();
+            for (int i = 0; i < languages.length; i++) {
+                DocumentLocator version = locator.getLanguageVersion(languages[i]);
+                if (SiteUtil.contains(this.manager, map, version)) {
+                    availableLanguages.add(languages[i]);
+                }
+            }
+
+            if (availableLanguages.isEmpty()) {
+                throw new DocumentDoesNotExistException("Document [" + locator
+                        + "] does not exist. Check sitetree, it might need to be reloaded.");
+            }
+            if (availableLanguages.contains(locator.getLanguage())) {
+                return Collections.unmodifiableMap(Collections.EMPTY_MAP);
+            }
+
+        } finally {
+            if (selector != null) {
+                if (builder != null) {
+                    selector.release(builder);
+                }
+                this.manager.release(selector);
+            }
         }
+
         return null;
     }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentLanguagesHelper.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentLanguagesHelper.java?rev=429620&r1=429619&r2=429620&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentLanguagesHelper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentLanguagesHelper.java Tue Aug  8 02:55:27 2006
@@ -19,45 +19,98 @@
 
 package org.apache.lenya.cms.publication.util;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
 import org.apache.lenya.cms.publication.Document;
-import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.publication.DocumentFactory;
-import org.apache.lenya.cms.publication.PageEnvelope;
-import org.apache.lenya.cms.publication.PageEnvelopeFactory;
+import org.apache.lenya.cms.publication.DocumentLocator;
+import org.apache.lenya.cms.publication.DocumentUtil;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationUtil;
+import org.apache.lenya.cms.repository.RepositoryUtil;
+import org.apache.lenya.cms.repository.Session;
+import org.apache.lenya.cms.site.SiteException;
+import org.apache.lenya.cms.site.SiteUtil;
+import org.apache.lenya.util.ServletHelper;
 
 /**
  * Helper class for the policy GUI.
  */
 public class DocumentLanguagesHelper {
 
-    private PageEnvelope pageEnvelope = null;
-    private DocumentFactory identityMap;
+    private DocumentFactory factory;
+    private ServiceManager manager;
+    private Publication pub;
+    private String url;
+    private String contextPath;
 
     /**
      * Create a new DocumentlanguageHelper.
-     * @param map The identity map.
      * @param objectModel the objectModel
      * @param manager The service manager.
      * @throws ProcessingException if the page envelope could not be created.
      */
-    public DocumentLanguagesHelper(DocumentFactory map, Map objectModel, ServiceManager manager)
+    public DocumentLanguagesHelper(Map objectModel, ServiceManager manager)
             throws ProcessingException {
-        this.identityMap = map;
+
+        this.manager = manager;
+        Request request = ObjectModelHelper.getRequest(objectModel);
+        this.url = ServletHelper.getWebappURI(request);
+        this.contextPath = request.getContextPath();
+
+        try {
+            Session session = RepositoryUtil.getSession(manager, request);
+            this.factory = DocumentUtil.createDocumentIdentityMap(this.manager, session);
+
+            this.pub = PublicationUtil.getPublication(manager, objectModel);
+        } catch (Exception e) {
+            throw new ProcessingException(e);
+        }
+    }
+
+    /**
+     * @return The requested language.
+     * @throws ProcessingException if an error occurs.
+     */
+    public String getLanguage() throws ProcessingException {
+        DocumentLocator locator;
         try {
-            Publication pub = PublicationUtil.getPublication(manager, objectModel);
-            this.pageEnvelope = PageEnvelopeFactory.getInstance().getPageEnvelope(manager,
-                    map,
-                    objectModel,
-                    pub);
+            locator = SiteUtil.getLocator(this.manager, url);
+        } catch (SiteException e) {
+            throw new ProcessingException(e);
+        }
+        return locator.getLanguage();
+    }
+
+    /**
+     * All available languages for the current URL.
+     * @return A string array.
+     * @throws ProcessingException
+     */
+    public String[] getLanguages() throws ProcessingException {
+        List availableLanguages = new ArrayList();
+
+        try {
+            DocumentLocator locator = SiteUtil.getLocator(this.manager, url);
+
+            String[] languages = pub.getLanguages();
+            for (int i = 0; i < languages.length; i++) {
+                DocumentLocator version = locator.getLanguageVersion(languages[i]);
+                if (SiteUtil.contains(this.manager, factory, version)) {
+                    availableLanguages.add(languages[i]);
+                }
+            }
+
         } catch (Exception e) {
             throw new ProcessingException(e);
         }
+        return (String[]) availableLanguages.toArray(new String[availableLanguages.size()]);
     }
 
     /**
@@ -68,7 +121,7 @@
      */
     public String getUrl(String language) throws ProcessingException {
         Document doc = getDocument(language);
-        return this.pageEnvelope.getContext() + doc.getCanonicalWebappURL();
+        return this.contextPath + doc.getCanonicalWebappURL();
     }
 
     /**
@@ -80,9 +133,10 @@
     protected Document getDocument(String language) throws ProcessingException {
         Document document;
         try {
-            document = this.identityMap.getLanguageVersion(this.pageEnvelope.getDocument(),
-                    language);
-        } catch (DocumentBuildException e) {
+            DocumentLocator locator = SiteUtil.getLocator(this.manager, url);
+            DocumentLocator version = locator.getLanguageVersion(language);
+            document = this.factory.get(version);
+        } catch (Exception e) {
             throw new ProcessingException(e);
         }
         return document;

Modified: lenya/trunk/src/webapp/lenya/content/exception/missing-language.xsp
URL: http://svn.apache.org/viewvc/lenya/trunk/src/webapp/lenya/content/exception/missing-language.xsp?rev=429620&r1=429619&r2=429620&view=diff
==============================================================================
--- lenya/trunk/src/webapp/lenya/content/exception/missing-language.xsp (original)
+++ lenya/trunk/src/webapp/lenya/content/exception/missing-language.xsp Tue Aug  8 02:55:27 2006
@@ -25,31 +25,31 @@
   
   <xsp:structure>
     <xsp:include>org.apache.lenya.cms.publication.Document</xsp:include>
-    <xsp:include>org.apache.lenya.cms.publication.DocumentException</xsp:include>
     <xsp:include>org.apache.lenya.cms.publication.util.DocumentLanguagesHelper</xsp:include>
     <xsp:include>org.apache.avalon.framework.service.WrapperServiceManager</xsp:include>
   </xsp:structure>
   
-  <missing-language>    
+  <missing-language>
     
-    <current-language><input:get-attribute module="page-envelope" as="string" name="document-language"/></current-language>
+    <xsp:logic>
+      DocumentLanguagesHelper helper = new DocumentLanguagesHelper(
+        objectModel, new WrapperServiceManager(this.manager));
+    </xsp:logic>
+    
+    <current-language><xsp:expr>helper.getLanguage()</xsp:expr></current-language>
     <available-languages>
       <xsp:logic>
-	Document doc = (Document) <input:get-attribute module="page-envelope" as="object" name="document"/>;
-	DocumentLanguagesHelper helper = new DocumentLanguagesHelper(doc.getFactory(), objectModel, new WrapperServiceManager(this.manager));
-	try {
-	  String[] availableLanguages = doc.getLanguages();
-	  String language = null;
-	  for (int i = 0; i &lt; availableLanguages.length; i++) {
-	    language = availableLanguages[i];
-	    <xsp:content>
-	      <available-language>
-	        <language><xsp:expr>language</xsp:expr></language>
-	        <url><xsp:expr>helper.getUrl(language)</xsp:expr></url>
-	      </available-language>
-	    </xsp:content>
-	  }
-	} catch (DocumentException e) {}
+        String[] availableLanguages = helper.getLanguages();
+        String language = null;
+        for (int i = 0; i &lt; availableLanguages.length; i++) {
+          language = availableLanguages[i];
+          <xsp:content>
+            <available-language>
+              <language><xsp:expr>language</xsp:expr></language>
+              <url><xsp:expr>helper.getUrl(language)</xsp:expr></url>
+            </available-language>
+          </xsp:content>
+        }
       </xsp:logic>
     </available-languages>
     



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org