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 2003/10/29 16:33:22 UTC
cvs commit: cocoon-lenya/src/java/org/apache/lenya/cms/publication DocumentHelper.java
andreas 2003/10/29 07:33:22
Added: src/java/org/apache/lenya/cms/publication
DocumentHelper.java
Log:
moved DocumentHelper
Revision Changes Path
1.1 cocoon-lenya/src/java/org/apache/lenya/cms/publication/DocumentHelper.java
Index: DocumentHelper.java
===================================================================
/*
* $Id: DocumentHelper.java,v 1.1 2003/10/29 15:33:22 andreas Exp $ <License>
*
* ============================================================================ The Apache Software
* License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica- tion, are permitted
* provided that the following conditions are met: 1. Redistributions of source code must retain
* the above copyright notice, this list of conditions and the following disclaimer. 2.
* Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other materials provided
* with the distribution. 3. The end-user documentation included with the redistribution, if any,
* must include the following acknowledgment: "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." Alternately, this acknowledgment may
* appear in the software itself, if and wherever such third-party acknowledgments normally appear. 4.
* The names "Apache Lenya" and "Apache Software Foundation" must not be used to endorse or promote
* products derived from this software without prior written permission. For written permission,
* please contact apache@apache.org. 5. Products derived from this software may not be called
* "Apache", nor may "Apache" appear in their name, without prior written permission of the Apache
* Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- DING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals on behalf of the
* Apache Software Foundation and was originally created by Michael Wechner <mi...@apache.org> .
* For more information on the Apache Soft- ware Foundation, please see <http://www.apache.org/> .
*
* Lenya includes software developed by the Apache Software Foundation, W3C, DOM4J Project,
* BitfluxEditor, Xopus, and WebSHPINX. </License>
*/
package org.apache.lenya.cms.publication;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.lenya.util.ServletHelper;
/**
* Helper class to handle documents from XSP.
*
* @author andreas
*/
public class DocumentHelper {
private Map objectModel;
/**
* Ctor.
*
* @param objectModel The Cocoon object model.
*/
public DocumentHelper(Map objectModel) {
this.objectModel = objectModel;
}
/**
* Returns the complete URL of the parent document. If the document is a top-level document,
* the /index document is chosen. If the parent does not exist in the appropriate language, the
* default language is chosen.
*
* @return A string.
* @throws ProcessingException when something went wrong.
*/
public String getCompleteParentUrl() throws ProcessingException {
PageEnvelope envelope;
try {
envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(objectModel);
} catch (PageEnvelopeException e) {
throw new ProcessingException(e);
}
Document document = envelope.getDocument();
Publication publication = envelope.getPublication();
Request request = ObjectModelHelper.getRequest(objectModel);
String webappUrl = ServletHelper.getWebappURI(request);
URLInformation info = new URLInformation(webappUrl);
String completeArea = info.getCompleteArea();
DocumentBuilder builder = publication.getDocumentBuilder();
String parentId;
int lastSlashIndex = document.getId().lastIndexOf("/");
if (lastSlashIndex > 0) {
parentId = document.getId().substring(0, lastSlashIndex);
} else {
parentId = "/index";
}
String parentUrl = builder.buildCanonicalUrl(publication, completeArea, parentId);
Document parentDocument;
try {
parentDocument = builder.buildDocument(publication, parentUrl);
parentDocument = getExistingLanguageVersion(parentDocument, document.getLanguage());
} catch (Exception e) {
throw new ProcessingException(e);
}
parentUrl =
builder.buildCanonicalUrl(
publication,
completeArea,
parentDocument.getId(),
parentDocument.getLanguage());
String contextPath = request.getContextPath();
if (contextPath == null) {
contextPath = "";
}
return contextPath + parentUrl;
}
/**
* Returns an existing language version of a document. If the document exists in the preferred
* language, this version is returned. Otherwise, if the document exists in the default
* language, the default language version is returned. Otherwise, a random language version is
* returned. If no language version exists, a DocumentException is thrown.
*
* @param document The document.
* @param preferredLanguage The preferred language.
* @return A document.
* @throws DocumentException when an error occurs.
*/
public static Document getExistingLanguageVersion(Document document, String preferredLanguage)
throws DocumentException {
Publication publication = document.getPublication();
DocumentBuilder builder = publication.getDocumentBuilder();
String[] languages = document.getLanguages();
if (languages.length == 0) {
throw new DocumentException(
"The document [" + document.getId() + "] does not exist in any language!");
}
List languageList = Arrays.asList(languages);
String existingLanguage = null;
if (languageList.contains(preferredLanguage)) {
existingLanguage = preferredLanguage;
} else if (languageList.contains(publication.getDefaultLanguage())) {
existingLanguage = publication.getDefaultLanguage();
} else {
existingLanguage = languages[0];
}
document = builder.buildLanguageVersion(document, existingLanguage);
return document;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: lenya-cvs-unsubscribe@cocoon.apache.org
For additional commands, e-mail: lenya-cvs-help@cocoon.apache.org