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 < 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 < 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