You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by so...@apache.org on 2008/02/01 01:23:03 UTC
svn commit: r617315 [1/2] - in /lenya/branches/revolution/1.3.x/src:
java/org/apache/lenya/cms/cocoon/components/modules/input/
java/org/apache/lenya/cms/cocoon/generation/
java/org/apache/lenya/cms/content/ java/org/apache/lenya/cms/modules/
java/org/...
Author: solprovider
Date: Thu Jan 31 16:23:00 2008
New Revision: 617315
URL: http://svn.apache.org/viewvc?rev=617315&view=rev
Log:
Added ModulesGenerator. Started Publication Module.
Expanded Globals. Refactoring to deprecate verbose code.
Added:
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/ModulesGenerator.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/PublicationModules.java
- copied, changed from r617035, lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/PublicationModules.java
lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/publication/
Removed:
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/PublicationModules.java
Modified:
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SiteTreeGenerator.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/content/Content.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/Module.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/ModuleInputModule.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/ModuleSet.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/ModuleSourceFactory.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/Modules.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/AbstractPublication.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/PageEnvelope.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/PageEnvelopeFactory.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/Publication.java
lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/util/Globals.java
lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/edit/module.xml
lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/home/module.xml
lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/link/module.xml
lenya/branches/revolution/1.3.x/src/webapp/sitemap.xmap
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java?rev=617315&r1=617314&r2=617315&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java Thu Jan 31 16:23:00 2008
@@ -14,50 +14,43 @@
* limitations under the License.
*
*/
-
/* $Id$ */
-
package org.apache.lenya.cms.cocoon.components.modules.input;
-
import java.util.Map;
-
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.cocoon.components.modules.input.AbstractInputModule;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.lenya.cms.publication.PageEnvelope;
-import org.apache.lenya.cms.publication.PageEnvelopeFactory;
-
/**
* Abstract superclass for classes which need access to the page envelope.
+ *
+ * @deprecated Useless. Extend AbstractInputModule and use PageEnvelope.getCurrent() for access to the page envelope.
*/
public abstract class AbstractPageEnvelopeModule extends AbstractInputModule {
-
- /**
- * Get the the page envelope for the given objectModel.
- *
- * @param objectModel the objectModel for which the page enevelope is requested.
- *
- * @return a <code>PageEnvelope</code>
- *
- * @throws ConfigurationException if the page envelope could not be instantiated.
- */
- protected PageEnvelope getEnvelope(Map objectModel) throws ConfigurationException {
-
- PageEnvelope envelope = null;
-
- if (getLogger().isDebugEnabled()) {
- Request request = ObjectModelHelper.getRequest(objectModel);
- getLogger().debug("Resolving page envelope for URL [" + request.getRequestURI() + "]");
- }
-
- try {
- envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(objectModel);
- } catch (Exception e) {
- throw new ConfigurationException("Resolving page envelope failed: ", e);
- }
-
- return envelope;
- }
-
+ /**
+ * Get the the page envelope for the given objectModel.
+ *
+ * @param objectModel
+ * the objectModel for which the page enevelope is requested.
+ *
+ * @return a <code>PageEnvelope</code>
+ *
+ * @throws ConfigurationException
+ * if the page envelope could not be instantiated.
+ * @deprecated Use PageEnvelope.getCurrent() and throw new ConfigurationException("Resolving page envelope failed: ", e);
+ */
+ protected PageEnvelope getEnvelope(Map objectModel) throws ConfigurationException {
+ PageEnvelope envelope = null;
+ if(getLogger().isDebugEnabled()){
+ Request request = ObjectModelHelper.getRequest(objectModel);
+ getLogger().debug("Resolving page envelope for URL [" + request.getRequestURI() + "]");
+ }
+ try{
+ envelope = PageEnvelope.getCurrent();
+ }catch(Exception e){
+ throw new ConfigurationException("Resolving page envelope failed: ", e);
+ }
+ return envelope;
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java?rev=617315&r1=617314&r2=617315&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java Thu Jan 31 16:23:00 2008
@@ -14,17 +14,13 @@
* limitations under the License.
*
*/
-
/* $Id$ */
-
package org.apache.lenya.cms.cocoon.components.modules.input;
-
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
-
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.parameters.Parameters;
@@ -38,235 +34,198 @@
import org.apache.lenya.cms.cocoon.uriparameterizer.URIParameterizerException;
import org.apache.lenya.cms.publication.DublinCore;
import org.apache.lenya.cms.publication.PageEnvelope;
-import org.apache.lenya.cms.publication.PageEnvelopeFactory;
-
+import org.apache.lenya.cms.publication.PageEnvelopeException;
/**
- * Input module wrapping the page envelope. This module provides publication
- * related information such as document-id, area, publication-id.
+ * Input module wrapping the page envelope. This module provides publication related information such as document-id, area, publication-id.
*
* @see org.apache.lenya.cms.publication.PageEnvelope
*/
public class PageEnvelopeModule extends AbstractPageEnvelopeModule implements Serviceable {
-
- private ServiceManager manager;
-
- /**
- * Get the the page envelope for the given objectModel.
- *
- * @param objectModel the objectModel for which the page enevelope is requested.
- *
- * @return a <code>PageEnvelope</code>
- *
- * @throws ConfigurationException if the page envelope could not be instantiated.
- */
- protected PageEnvelope getEnvelope(Map objectModel) throws ConfigurationException {
- PageEnvelope envelope = null;
-
- if (getLogger().isDebugEnabled()) {
- Request request = ObjectModelHelper.getRequest(objectModel);
- getLogger().debug("Resolving page envelope for URL [" + request.getRequestURI() + "]");
- }
-
- try {
- envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(objectModel);
- } catch (Exception e) {
- throw new ConfigurationException("Resolving page envelope failed: ", e);
- }
-
- return envelope;
- }
-
- protected static final String URI_PARAMETER_DOCTYPE = "doctype";
-
- /**
- * @see org.apache.cocoon.components.modules.input.InputModule#getAttribute(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
- */
- public Object getAttribute(String name, Configuration modeConf, Map objectModel)
- throws ConfigurationException {
- PageEnvelope envelope = getEnvelope(objectModel);
- Object value = null;
-
- try {
- if (name.equals(PageEnvelope.AREA)) {
- value = envelope.getDocument().getArea();
- } else if (name.equals(PageEnvelope.CONTEXT)) {
- value = envelope.getContext();
- } else if (name.equals(PageEnvelope.PUBLICATION_ID)) {
- value = envelope.getPublication().getId();
- } else if (name.equals(PageEnvelope.PUBLICATION)) {
- value = envelope.getPublication();
- } else if (name.equals(PageEnvelope.PUBLICATION_LANGUAGES_CSV)) {
- value =
- StringUtils.join(
- envelope.getPublication().getLanguages(),
- ',');
- } else if (name.equals(PageEnvelope.DOCUMENT)) {
- value = envelope.getDocument();
- } else if (name.equals(PageEnvelope.DOCUMENT_ID)) {
- value = envelope.getDocument().getId();
- } else if (name.equals(PageEnvelope.DOCUMENT_NAME)) {
- value = envelope.getDocument().getName();
- } else if (name.equals(PageEnvelope.DOCUMENT_NODE_ID)) { // FIXME: Why is this here?
- value = envelope.getDocument().getNodeId();
- } else if (name.equals(PageEnvelope.DOCUMENT_LABEL)) { // FIXME: Why is this here?
- value = envelope.getDocument().getLabel();
- } else if (name.equals(PageEnvelope.DOCUMENT_URL)) {
- value = envelope.getDocument().getDocumentURL();
- } else if (name.equals(PageEnvelope.DOCUMENT_URL_WITHOUT_LANGUAGE)) {
- value = envelope.getDocument().getCompleteURLWithoutLanguage();
- } else if (name.equals(PageEnvelope.DOCUMENT_PATH)) {
- value = envelope.getDocumentPath();
- } else if (name.equals(PageEnvelope.DOCUMENT_FILE)) {
- value = envelope.getDocument().getFile();
- } else if (name.equals(PageEnvelope.DOCUMENT_EXTENSION)) {
- value = envelope.getDocument().getExtension();
- } else if (name.equals(PageEnvelope.DEFAULT_LANGUAGE)) {
- value = envelope.getPublication().getDefaultLanguage();
- } else if (name.equals(PageEnvelope.DOCUMENT_LANGUAGE)) {
- value = envelope.getDocument().getLanguage();
-//LENYA1.3 - BEGIN
- if(((String) value).length() < 1) value = envelope.getPublication().getDefaultLanguage();
-//LENYA1.3 - END
- } else if (name.equals(PageEnvelope.DOCUMENT_LANGUAGES)) {
- value = envelope.getDocument().getLanguages();
- } else if (name.equals(PageEnvelope.DOCUMENT_LANGUAGES_CSV)) {
- value =
- StringUtils.join(
- envelope.getDocument().getLanguages(),
- ',');
- } else if (name.equals(PageEnvelope.DOCUMENT_DC_TITLE)) {
- value =
- envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_TITLE);
- } else if (name.equals(PageEnvelope.DOCUMENT_DC_CREATOR)) {
- value =
- envelope.getDocument().getDublinCore().getFirstValue(
- DublinCore.ELEMENT_CREATOR);
- } else if (name.equals(PageEnvelope.DOCUMENT_DC_PUBLISHER)) {
- value =
- envelope.getDocument().getDublinCore().getFirstValue(
- DublinCore.ELEMENT_PUBLISHER);
- } else if (name.equals(PageEnvelope.DOCUMENT_DC_SUBJECT)) {
- value =
- envelope.getDocument().getDublinCore().getFirstValue(
- DublinCore.ELEMENT_SUBJECT);
- } else if (name.equals(PageEnvelope.DOCUMENT_DC_DESCRIPTION)) {
- value =
- envelope.getDocument().getDublinCore().getFirstValue(
- DublinCore.ELEMENT_DESCRIPTION);
- } else if (name.equals(PageEnvelope.DOCUMENT_DC_RIGHTS)) {
- value =
- envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_RIGHTS);
- } else if (name.equals(PageEnvelope.DOCUMENT_DC_DATE_CREATED)) {
- value =
- envelope.getDocument().getDublinCore().getFirstValue(DublinCore.TERM_CREATED);
- } else if (name.equals(PageEnvelope.DOCUMENT_LASTMODIFIED)) {
- Date date = envelope.getDocument().getLastModified();
- value = new SimpleDateFormat(DATE_FORMAT).format(date);
- } else if (name.equals(PageEnvelope.BREADCRUMB_PREFIX)) {
- value = envelope.getPublication().getBreadcrumbPrefix();
- } else if (name.equals(PageEnvelope.SSL_PREFIX)) {
- value = envelope.getPublication().getSSLPrefix();
- } else if (name.equals(PageEnvelope.DOCUMENT_TYPE)) {
- value = getDocumentType(objectModel, envelope);
- } else {
- throw new ConfigurationException("The attribute [" + name + "] is not supported!");
- }
-//Lenya1.3 - BEGIN
-// } catch (ConfigurationException e) {
-// throw e;
- } catch (Exception e) {
-// throw new ConfigurationException("Getting attribute for name [" + name + "] failed: ", e);
- value = "";
-//Lenya1.3 - END
- }
-
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Returning [" + name + "] = [" + value + "]");
- }
-
- return value;
- }
-
- public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
-
- /**
- * Returns the document type.
- * @param objectModel The object model.
- * @param envelope The page envelope.
- * @return A string.
- * @throws ServiceException when something went wrong.
- * @throws URIParameterizerException when something went wrong.
- */
- protected String getDocumentType(Map objectModel, PageEnvelope envelope)
- throws ServiceException, URIParameterizerException {
- String documentType;
- URIParameterizer parameterizer = null;
- Map map = null;
- try {
- parameterizer = (URIParameterizer) manager.lookup(URIParameterizer.ROLE);
-
- Parameters parameters = new Parameters();
- parameters.setParameter(
- URI_PARAMETER_DOCTYPE,
- "cocoon://uri-parameter/"
- + envelope.getPublication().getId()
- + "/"
- + URI_PARAMETER_DOCTYPE);
-
- String source =
- envelope.getDocument().getArea() + envelope.getDocument().getDocumentURL();
-
- Request request = ObjectModelHelper.getRequest(objectModel);
- map = parameterizer.parameterize(filterURI(request.getRequestURI()), filterURI(source), parameters);
- documentType = (String) map.get(URI_PARAMETER_DOCTYPE);
-
- } finally {
- if (parameterizer != null) {
- manager.release(parameterizer);
- }
- }
- return documentType;
- }
-
- /**
- * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeNames(org.apache.avalon.framework.configuration.Configuration, java.util.Map)
- */
- public Iterator getAttributeNames(Configuration modeConf, Map objectModel)
- throws ConfigurationException {
- return Arrays.asList(PageEnvelope.PARAMETER_NAMES).iterator();
- }
-
- /**
- * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeValues(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
- */
- public Object[] getAttributeValues(String name, Configuration modeConf, Map objectModel)
- throws ConfigurationException {
- Object[] objects = { getAttribute(name, modeConf, objectModel)};
-
- return objects;
- }
-
- /**
- * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
- */
- public void service(ServiceManager manager) throws ServiceException {
- this.manager = manager;
- }
-
- /**
- * uri will be filtered by certain rules
- * i.e. session information encoded within the uri will be removed.
- * @param uri The uri to be filtered
- * @return uri filtered by certain rules i.e
- */
- // FIXME Maybe make this more configureable
- private String filterURI(final String uri)
- {
- final int index = uri.indexOf(";jsessionid");
-
- if(index >= 0)
- return uri.substring(0, index);
- else
- return uri;
- }
+ private ServiceManager manager;
+ /**
+ * Get the the page envelope for the given objectModel.
+ *
+ * @param objectModel
+ * the objectModel for which the page envelope is requested.
+ *
+ * @return a <code>PageEnvelope</code>
+ *
+ * @throws ConfigurationException
+ * if the page envelope could not be instantiated.
+ * @deprecated Use PageEnvelope.getCurrent(). Catch Exception and throw new ConfigurationException("Resolving page envelope failed: ", e);
+ */
+ protected PageEnvelope getEnvelope(Map objectModel) throws ConfigurationException {
+ PageEnvelope envelope = null;
+ if(getLogger().isDebugEnabled()){
+ Request request = ObjectModelHelper.getRequest(objectModel);
+ getLogger().debug("Resolving page envelope for URL [" + request.getRequestURI() + "]");
+ }
+ try{
+ envelope = PageEnvelope.getCurrent();
+ }catch(Exception e){
+ throw new ConfigurationException("Resolving page envelope failed: ", e);
+ }
+ return envelope;
+ }
+ protected static final String URI_PARAMETER_DOCTYPE = "doctype";
+ /**
+ * @see org.apache.cocoon.components.modules.input.InputModule#getAttribute(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
+ */
+ public Object getAttribute(String name, Configuration modeConf, Map objectModel) throws ConfigurationException {
+ PageEnvelope envelope;
+ try{
+ envelope = PageEnvelope.getCurrent();
+ }catch(PageEnvelopeException e1){
+ throw new ConfigurationException("Resolving page envelope failed: ", e1);
+ }
+ Object value = null;
+ try{
+ if(name.equals(PageEnvelope.AREA)){
+ value = envelope.getDocument().getArea();
+ }else if(name.equals(PageEnvelope.CONTEXT)){
+ value = envelope.getContext();
+ }else if(name.equals(PageEnvelope.PUBLICATION_ID)){
+ value = envelope.getPublication().getId();
+ }else if(name.equals(PageEnvelope.PUBLICATION)){
+ value = envelope.getPublication();
+ }else if(name.equals(PageEnvelope.PUBLICATION_LANGUAGES_CSV)){
+ value = StringUtils.join(envelope.getPublication().getLanguages(), ',');
+ }else if(name.equals(PageEnvelope.DOCUMENT)){
+ value = envelope.getDocument();
+ }else if(name.equals(PageEnvelope.DOCUMENT_ID)){
+ value = envelope.getDocument().getId();
+ }else if(name.equals(PageEnvelope.DOCUMENT_NAME)){
+ value = envelope.getDocument().getName();
+ }else if(name.equals(PageEnvelope.DOCUMENT_NODE_ID)){ // FIXME: Why is this here?
+ value = envelope.getDocument().getNodeId();
+ }else if(name.equals(PageEnvelope.DOCUMENT_LABEL)){ // FIXME: Why is this here?
+ value = envelope.getDocument().getLabel();
+ }else if(name.equals(PageEnvelope.DOCUMENT_URL)){
+ value = envelope.getDocument().getDocumentURL();
+ }else if(name.equals(PageEnvelope.DOCUMENT_URL_WITHOUT_LANGUAGE)){
+ value = envelope.getDocument().getCompleteURLWithoutLanguage();
+ }else if(name.equals(PageEnvelope.DOCUMENT_PATH)){
+ value = envelope.getDocumentPath();
+ }else if(name.equals(PageEnvelope.DOCUMENT_FILE)){
+ value = envelope.getDocument().getFile();
+ }else if(name.equals(PageEnvelope.DOCUMENT_EXTENSION)){
+ value = envelope.getDocument().getExtension();
+ }else if(name.equals(PageEnvelope.DEFAULT_LANGUAGE)){
+ value = envelope.getPublication().getDefaultLanguage();
+ }else if(name.equals(PageEnvelope.DOCUMENT_LANGUAGE)){
+ value = envelope.getDocument().getLanguage();
+ // LENYA1.3 - BEGIN
+ if(((String) value).length() < 1)
+ value = envelope.getPublication().getDefaultLanguage();
+ // LENYA1.3 - END
+ }else if(name.equals(PageEnvelope.DOCUMENT_LANGUAGES)){
+ value = envelope.getDocument().getLanguages();
+ }else if(name.equals(PageEnvelope.DOCUMENT_LANGUAGES_CSV)){
+ value = StringUtils.join(envelope.getDocument().getLanguages(), ',');
+ }else if(name.equals(PageEnvelope.DOCUMENT_DC_TITLE)){
+ value = envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_TITLE);
+ }else if(name.equals(PageEnvelope.DOCUMENT_DC_CREATOR)){
+ value = envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_CREATOR);
+ }else if(name.equals(PageEnvelope.DOCUMENT_DC_PUBLISHER)){
+ value = envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_PUBLISHER);
+ }else if(name.equals(PageEnvelope.DOCUMENT_DC_SUBJECT)){
+ value = envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_SUBJECT);
+ }else if(name.equals(PageEnvelope.DOCUMENT_DC_DESCRIPTION)){
+ value = envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_DESCRIPTION);
+ }else if(name.equals(PageEnvelope.DOCUMENT_DC_RIGHTS)){
+ value = envelope.getDocument().getDublinCore().getFirstValue(DublinCore.ELEMENT_RIGHTS);
+ }else if(name.equals(PageEnvelope.DOCUMENT_DC_DATE_CREATED)){
+ value = envelope.getDocument().getDublinCore().getFirstValue(DublinCore.TERM_CREATED);
+ }else if(name.equals(PageEnvelope.DOCUMENT_LASTMODIFIED)){
+ Date date = envelope.getDocument().getLastModified();
+ value = new SimpleDateFormat(DATE_FORMAT).format(date);
+ }else if(name.equals(PageEnvelope.BREADCRUMB_PREFIX)){
+ value = envelope.getPublication().getBreadcrumbPrefix();
+ }else if(name.equals(PageEnvelope.SSL_PREFIX)){
+ value = envelope.getPublication().getSSLPrefix();
+ }else if(name.equals(PageEnvelope.DOCUMENT_TYPE)){
+ value = getDocumentType(objectModel, envelope);
+ }else{
+ throw new ConfigurationException("The attribute [" + name + "] is not supported!");
+ }
+ // Lenya1.3 - BEGIN
+ // } catch (ConfigurationException e) {
+ // throw e;
+ }catch(Exception e){
+ // throw new ConfigurationException("Getting attribute for name [" + name + "] failed: ", e);
+ value = "";
+ // Lenya1.3 - END
+ }
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug("Returning [" + name + "] = [" + value + "]");
+ }
+ return value;
+ }
+ public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+ /**
+ * Returns the document type.
+ *
+ * @param objectModel
+ * The object model.
+ * @param envelope
+ * The page envelope.
+ * @return A string.
+ * @throws ServiceException
+ * when something went wrong.
+ * @throws URIParameterizerException
+ * when something went wrong.
+ */
+ protected String getDocumentType(Map objectModel, PageEnvelope envelope) throws ServiceException, URIParameterizerException {
+ String documentType;
+ URIParameterizer parameterizer = null;
+ Map map = null;
+ try{
+ parameterizer = (URIParameterizer) manager.lookup(URIParameterizer.ROLE);
+ Parameters parameters = new Parameters();
+ parameters.setParameter(URI_PARAMETER_DOCTYPE, "cocoon://uri-parameter/" + envelope.getPublication().getId() + "/" + URI_PARAMETER_DOCTYPE);
+ String source = envelope.getDocument().getArea() + envelope.getDocument().getDocumentURL();
+ Request request = ObjectModelHelper.getRequest(objectModel);
+ map = parameterizer.parameterize(filterURI(request.getRequestURI()), filterURI(source), parameters);
+ documentType = (String) map.get(URI_PARAMETER_DOCTYPE);
+ }finally{
+ if(parameterizer != null){
+ manager.release(parameterizer);
+ }
+ }
+ return documentType;
+ }
+ /**
+ * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeNames(org.apache.avalon.framework.configuration.Configuration, java.util.Map)
+ */
+ public Iterator getAttributeNames(Configuration modeConf, Map objectModel) throws ConfigurationException {
+ return Arrays.asList(PageEnvelope.PARAMETER_NAMES).iterator();
+ }
+ /**
+ * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeValues(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
+ */
+ public Object[] getAttributeValues(String name, Configuration modeConf, Map objectModel) throws ConfigurationException {
+ Object[] objects = {getAttribute(name, modeConf, objectModel)};
+ return objects;
+ }
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager manager) throws ServiceException {
+ this.manager = manager;
+ }
+ /**
+ * uri will be filtered by certain rules i.e. session information encoded within the uri will be removed.
+ *
+ * @param uri
+ * The uri to be filtered
+ * @return uri filtered by certain rules i.e
+ */
+ // FIXME Maybe make this more configureable
+ private String filterURI(final String uri) {
+ final int index = uri.indexOf(";jsessionid");
+ if(index >= 0)
+ return uri.substring(0, index);
+ else
+ return uri;
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SiteTreeGenerator.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SiteTreeGenerator.java?rev=617315&r1=617314&r2=617315&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SiteTreeGenerator.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SiteTreeGenerator.java Thu Jan 31 16:23:00 2008
@@ -1,213 +1,213 @@
-/*
- * Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- *
- */
-
-/* $Id:$ */
-
-package org.apache.lenya.cms.cocoon.generation;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Map;
-
-import org.apache.avalon.framework.parameters.ParameterException;
-import org.apache.avalon.framework.parameters.Parameterizable;
-import org.apache.avalon.framework.parameters.Parameters;
-import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.CacheableProcessingComponent;
-import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.generation.ServiceableGenerator;
-import org.apache.excalibur.source.SourceValidity;
-import org.apache.excalibur.source.impl.validity.TimeStampValidity;
-import org.apache.lenya.cms.publication.Label;
-import org.apache.lenya.cms.publication.LastModified;
-import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationException;
-import org.apache.lenya.cms.publication.PublicationFactory;
-import org.apache.lenya.cms.publication.SiteTree;
-import org.apache.lenya.cms.publication.SiteTreeException;
-import org.apache.lenya.cms.publication.SiteTreeNode;
-import org.apache.log4j.Logger;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-import org.xml.sax.helpers.NamespaceSupport;
-
-/**
- * Site tree generator.
- *
- * @version $Id:$
- */
-public class SiteTreeGenerator extends ServiceableGenerator implements Parameterizable,
- CacheableProcessingComponent {
- private static Logger log = Logger.getLogger(SiteTreeGenerator.class);
-
- protected final static String I18N_PX = "i18n";
- protected final static String I18N_NS = "http://apache.org/cocoon/i18n/2.1";
-
- protected final static String CDATA = "CDATA";
-
- protected final static String SITE_ELEMENT = "site";
- protected final static String NODE_ELEMENT = "node";
- protected final static String LABEL_ELEMENT = "label";
-
- protected final static String LABEL_ATTRIBUTE = "label";
- protected final static String ATTR_ATTRIBUTE = "attr";
- protected final static String Q_ATTR_ATTRIBUTE = I18N_PX + ":" + ATTR_ATTRIBUTE;
- protected final static String ID_ATTRIBUTE = "id";
- protected final static String LANG_ATTRIBUTE = "lang";
- protected final static String HREF_ATTRIBUTE = "href";
- protected final static String LINK_ATTRIBUTE = "link";
- protected final static String VISIBLEINNAV_ATTRIBUTE = "visibleinnav";
- protected final static String SUFFIX_ATTRIBUTE = "suffix";
-
- protected final static String Q_LANG_ATTRIBUTE = "xml:lang";
-
- /**
- * The area of the site tree.
- */
- public final static String AREA_PARAMETER = "area";
-
- private final AttributesImpl atts = new AttributesImpl();
-
- SiteTree sitetree = null;
- String area = null;
-
- /**
- * No parameters implemented.
- * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
- */
- public void parameterize(Parameters parameters) throws ParameterException {
- }
-
- /**
- * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
- * java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
- */
- public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
- throws ProcessingException, SAXException, IOException {
- log.debug("setup");
- try {
- Publication publication = PublicationFactory.getPublication(objectModel);
- area = par.getParameter(AREA_PARAMETER);
- sitetree = publication.getTree(area);
- } catch (PublicationException e) {
- throw new ProcessingException("Unable to get sitetree: publication exception.", e);
- } catch (ParameterException e) {
- throw new ProcessingException("Unable to get sitetree: parameter 'area' not found.", e);
- } catch (SiteTreeException e) {
- throw new ProcessingException("Unable to get sitetree.", e);
- }
- }
-
- /**
- * @see org.apache.cocoon.generation.Generator#generate()
- */
- public void generate() throws SAXException {
- log.debug("generate");
- // Start the document and set the namespace.
- this.contentHandler.startDocument();
- // Default namespace.
- this.contentHandler.startPrefixMapping("", SiteTree.NAMESPACE_URI);
- this.contentHandler.startPrefixMapping(I18N_PX, I18N_NS);
-
- generateSiteTree(sitetree);
-
- // End the document.
- this.contentHandler.endPrefixMapping("");
- this.contentHandler.endDocument();
- }
-
- private void generateSiteTree(SiteTree tree) throws SAXException {
- atts.clear();
- // TODO: Do not hardcode "Authoring" label!!!
- atts.addAttribute("", LABEL_ATTRIBUTE, LABEL_ATTRIBUTE, CDATA, "Authoring");
- atts.addAttribute(I18N_NS, ATTR_ATTRIBUTE, Q_ATTR_ATTRIBUTE, CDATA, "label");
-
- this.contentHandler.startElement(SiteTree.NAMESPACE_URI, SITE_ELEMENT, SITE_ELEMENT, atts);
-
- SiteTreeNode[] topNodes = tree.getTopNodes();
- for (int i = 0; i < topNodes.length; i++) {
- generateNodes(topNodes[i]);
- }
-
- this.contentHandler.endElement(SiteTree.NAMESPACE_URI, SITE_ELEMENT, SITE_ELEMENT);
- }
-
- private void generateNodes(SiteTreeNode node) throws SAXException {
- atts.clear();
- atts.addAttribute("", ID_ATTRIBUTE, ID_ATTRIBUTE, CDATA, node.getId());
- if (node.getHref() != null)
- atts.addAttribute("", HREF_ATTRIBUTE, HREF_ATTRIBUTE, CDATA, node.getHref());
- if (node.getSuffix() != null)
- atts.addAttribute("", SUFFIX_ATTRIBUTE, SUFFIX_ATTRIBUTE, CDATA, node.getSuffix());
- atts.addAttribute("", LINK_ATTRIBUTE, LINK_ATTRIBUTE, CDATA, Boolean.toString(node
- .hasLink()));
- atts.addAttribute("", VISIBLEINNAV_ATTRIBUTE, VISIBLEINNAV_ATTRIBUTE, CDATA, Boolean
- .toString(node.visibleInNav()));
-
- this.contentHandler.startElement(SiteTree.NAMESPACE_URI, NODE_ELEMENT, NODE_ELEMENT, atts);
-
- Label[] labels = node.getLabels();
- for (int i = 0; i < labels.length; i++)
- generateLabels(labels[i]);
- SiteTreeNode[] children = node.getChildren();
- for (int i = 0; i < children.length; i++)
- generateNodes(children[i]);
-
- this.contentHandler.endElement(SiteTree.NAMESPACE_URI, NODE_ELEMENT, NODE_ELEMENT);
- }
-
- private void generateLabels(Label label) throws SAXException {
- atts.clear();
- atts.addAttribute(NamespaceSupport.XMLNS, LANG_ATTRIBUTE, Q_LANG_ATTRIBUTE, CDATA, label
- .getLanguage());
-
- this.contentHandler
- .startElement(SiteTree.NAMESPACE_URI, LABEL_ELEMENT, LABEL_ELEMENT, atts);
- char[] labelA = label.getLabel().toCharArray();
- this.contentHandler.characters(labelA, 0, labelA.length);
- this.contentHandler.endElement(SiteTree.NAMESPACE_URI, LABEL_ELEMENT, LABEL_ELEMENT);
- }
-
- /**
- * Recycle the generator
- */
- public void recycle() {
- log.debug("recycle");
- super.recycle();
- sitetree = null;
- area = null;
- }
-
- /**
- * @see org.apache.cocoon.caching.CacheableProcessingComponent#getKey()
- */
- public Serializable getKey() {
- return area;
- }
-
- /**
- * @see org.apache.cocoon.caching.CacheableProcessingComponent#getValidity()
- */
- public SourceValidity getValidity() {
- // Check if sitetree implementation supports last modified
- if (!(sitetree instanceof LastModified)) {
- return null;
- } else {
- return new TimeStampValidity(((LastModified) sitetree).getLastModified());
- }
- }
+/*
+ * Copyright 1999-2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ */
+
+/* $Id:$ */
+
+package org.apache.lenya.cms.cocoon.generation;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Map;
+
+import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.avalon.framework.parameters.Parameterizable;
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
+import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.generation.ServiceableGenerator;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.TimeStampValidity;
+import org.apache.lenya.cms.publication.Label;
+import org.apache.lenya.cms.publication.LastModified;
+import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.publication.PublicationException;
+import org.apache.lenya.cms.publication.PublicationFactory;
+import org.apache.lenya.cms.publication.SiteTree;
+import org.apache.lenya.cms.publication.SiteTreeException;
+import org.apache.lenya.cms.publication.SiteTreeNode;
+import org.apache.log4j.Logger;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.helpers.NamespaceSupport;
+
+/**
+ * Site tree generator.
+ *
+ * @version $Id:$
+ */
+public class SiteTreeGenerator extends ServiceableGenerator implements Parameterizable,
+ CacheableProcessingComponent {
+ private static Logger log = Logger.getLogger(SiteTreeGenerator.class);
+
+ protected final static String I18N_PX = "i18n";
+ protected final static String I18N_NS = "http://apache.org/cocoon/i18n/2.1";
+
+ protected final static String CDATA = "CDATA";
+
+ protected final static String SITE_ELEMENT = "site";
+ protected final static String NODE_ELEMENT = "node";
+ protected final static String LABEL_ELEMENT = "label";
+
+ protected final static String LABEL_ATTRIBUTE = "label";
+ protected final static String ATTR_ATTRIBUTE = "attr";
+ protected final static String Q_ATTR_ATTRIBUTE = I18N_PX + ":" + ATTR_ATTRIBUTE;
+ protected final static String ID_ATTRIBUTE = "id";
+ protected final static String LANG_ATTRIBUTE = "lang";
+ protected final static String HREF_ATTRIBUTE = "href";
+ protected final static String LINK_ATTRIBUTE = "link";
+ protected final static String VISIBLEINNAV_ATTRIBUTE = "visibleinnav";
+ protected final static String SUFFIX_ATTRIBUTE = "suffix";
+
+ protected final static String Q_LANG_ATTRIBUTE = "xml:lang";
+
+ /**
+ * The area of the site tree.
+ */
+ public final static String AREA_PARAMETER = "area";
+
+ private final AttributesImpl atts = new AttributesImpl();
+
+ SiteTree sitetree = null;
+ String area = null;
+
+ /**
+ * No parameters implemented.
+ * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
+ */
+ public void parameterize(Parameters parameters) throws ParameterException {
+ }
+
+ /**
+ * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
+ * java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
+ */
+ public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
+ throws ProcessingException, SAXException, IOException {
+ log.debug("setup");
+ try {
+ Publication publication = PublicationFactory.getPublication(objectModel);
+ area = par.getParameter(AREA_PARAMETER);
+ sitetree = publication.getTree(area);
+ } catch (PublicationException e) {
+ throw new ProcessingException("Unable to get sitetree: publication exception.", e);
+ } catch (ParameterException e) {
+ throw new ProcessingException("Unable to get sitetree: parameter 'area' not found.", e);
+ } catch (SiteTreeException e) {
+ throw new ProcessingException("Unable to get sitetree.", e);
+ }
+ }
+
+ /**
+ * @see org.apache.cocoon.generation.Generator#generate()
+ */
+ public void generate() throws SAXException {
+ log.debug("generate");
+ // Start the document and set the namespace.
+ this.contentHandler.startDocument();
+ // Default namespace.
+ this.contentHandler.startPrefixMapping("", SiteTree.NAMESPACE_URI);
+ this.contentHandler.startPrefixMapping(I18N_PX, I18N_NS);
+
+ generateSiteTree(sitetree);
+
+ // End the document.
+ this.contentHandler.endPrefixMapping("");
+ this.contentHandler.endDocument();
+ }
+
+ private void generateSiteTree(SiteTree tree) throws SAXException {
+ atts.clear();
+ // TODO: Do not hardcode "Authoring" label!!!
+ atts.addAttribute("", LABEL_ATTRIBUTE, LABEL_ATTRIBUTE, CDATA, "Authoring");
+ atts.addAttribute(I18N_NS, ATTR_ATTRIBUTE, Q_ATTR_ATTRIBUTE, CDATA, "label");
+
+ this.contentHandler.startElement(SiteTree.NAMESPACE_URI, SITE_ELEMENT, SITE_ELEMENT, atts);
+
+ SiteTreeNode[] topNodes = tree.getTopNodes();
+ for (int i = 0; i < topNodes.length; i++) {
+ generateNodes(topNodes[i]);
+ }
+
+ this.contentHandler.endElement(SiteTree.NAMESPACE_URI, SITE_ELEMENT, SITE_ELEMENT);
+ }
+
+ private void generateNodes(SiteTreeNode node) throws SAXException {
+ atts.clear();
+ atts.addAttribute("", ID_ATTRIBUTE, ID_ATTRIBUTE, CDATA, node.getId());
+ if (node.getHref() != null)
+ atts.addAttribute("", HREF_ATTRIBUTE, HREF_ATTRIBUTE, CDATA, node.getHref());
+ if (node.getSuffix() != null)
+ atts.addAttribute("", SUFFIX_ATTRIBUTE, SUFFIX_ATTRIBUTE, CDATA, node.getSuffix());
+ atts.addAttribute("", LINK_ATTRIBUTE, LINK_ATTRIBUTE, CDATA, Boolean.toString(node
+ .hasLink()));
+ atts.addAttribute("", VISIBLEINNAV_ATTRIBUTE, VISIBLEINNAV_ATTRIBUTE, CDATA, Boolean
+ .toString(node.visibleInNav()));
+
+ this.contentHandler.startElement(SiteTree.NAMESPACE_URI, NODE_ELEMENT, NODE_ELEMENT, atts);
+
+ Label[] labels = node.getLabels();
+ for (int i = 0; i < labels.length; i++)
+ generateLabels(labels[i]);
+ SiteTreeNode[] children = node.getChildren();
+ for (int i = 0; i < children.length; i++)
+ generateNodes(children[i]);
+
+ this.contentHandler.endElement(SiteTree.NAMESPACE_URI, NODE_ELEMENT, NODE_ELEMENT);
+ }
+
+ private void generateLabels(Label label) throws SAXException {
+ atts.clear();
+ atts.addAttribute(NamespaceSupport.XMLNS, LANG_ATTRIBUTE, Q_LANG_ATTRIBUTE, CDATA, label
+ .getLanguage());
+
+ this.contentHandler
+ .startElement(SiteTree.NAMESPACE_URI, LABEL_ELEMENT, LABEL_ELEMENT, atts);
+ char[] labelA = label.getLabel().toCharArray();
+ this.contentHandler.characters(labelA, 0, labelA.length);
+ this.contentHandler.endElement(SiteTree.NAMESPACE_URI, LABEL_ELEMENT, LABEL_ELEMENT);
+ }
+
+ /**
+ * Recycle the generator
+ */
+ public void recycle() {
+ log.debug("recycle");
+ super.recycle();
+ sitetree = null;
+ area = null;
+ }
+
+ /**
+ * @see org.apache.cocoon.caching.CacheableProcessingComponent#getKey()
+ */
+ public Serializable getKey() {
+ return area;
+ }
+
+ /**
+ * @see org.apache.cocoon.caching.CacheableProcessingComponent#getValidity()
+ */
+ public SourceValidity getValidity() {
+ // Check if sitetree implementation supports last modified
+ if (!(sitetree instanceof LastModified)) {
+ return null;
+ } else {
+ return new TimeStampValidity(((LastModified) sitetree).getLastModified());
+ }
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java?rev=617315&r1=617314&r2=617315&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java Thu Jan 31 16:23:00 2008
@@ -1,496 +1,496 @@
-/*
- * Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-/* @version $Id$*/
-
-package org.apache.lenya.cms.cocoon.generation;
-
-import java.io.IOException;
-import java.util.Map;
-
-import org.apache.avalon.framework.parameters.Parameters;
-import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.environment.ObjectModelHelper;
-import org.apache.cocoon.environment.Request;
-import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.generation.AbstractGenerator;
-import org.apache.lenya.cms.publication.Label;
-import org.apache.lenya.cms.publication.PageEnvelope;
-import org.apache.lenya.cms.publication.PageEnvelopeFactory;
-import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.SiteTree;
-import org.apache.lenya.cms.publication.SiteTreeException;
-import org.apache.lenya.cms.publication.SiteTreeNode;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * Generates a fragment of the XML from the sitetree, corresponding to a given
- * node. The node is specified by the sitemap parameters area/documentid. If the
- * sitemap parameter initialTree is true, the top nodes of the tree will be
- * generated and the node given by the sitemap parameters area/documentid will
- * be unfolded. If initialTree is false, only the children of the selected node
- * will be generated.
- *
- */
-public class SitetreeFragmentGenerator extends AbstractGenerator {
-
- protected Publication publication;
-
- /** Parameter which denotes the documentid of the clicked node */
- protected String documentid;
-
- /** Parameter which denotes the area of the clicked node */
- protected String area;
-
- /**
- * Parameter which decides if the initial tree with the root nodes is
- * generated
- */
- protected boolean initialTree;
-
- /**
- * Parameter which denotes a comma-separated list of areas, for which the
- * xml will be generated.
- */
- protected String[] areas = null;
-
- /**
- * Convenience object, so we don't need to create an AttributesImpl for
- * every element.
- */
- protected AttributesImpl attributes;
-
- protected static final String PARAM_AREA = "area";
-
- protected static final String PARAM_DOCUMENTID = "documentid";
-
- protected static final String PARAM_INITIAL = "initial";
-
- protected static final String PARAM_AREAS = "areas";
-
- /** The URI of the namespace of this generator. */
- protected static final String URI = "http://apache.org/cocoon/lenya/sitetree/1.0";
-
- protected static final String XML_URI = "http://www.w3.org/XML/1998/namespace";
-
- /** The namespace prefix for this namespace. */
- protected static final String PREFIX = "site";
-
- protected static final String XML_PREFIX = "xml";
-
- protected static final String NODE_NODE = "node";
-
- protected static final String NODE_LABEL = "label";
-
- protected static final String NODE_SITE = "site";
-
- protected static final String NODE_FRAGMENT = "fragment";
-
- protected static final String ATTR_ID = "id";
-
- protected static final String ATTR_FOLDER = "folder";
-
- protected static final String ATTR_AREA = "area";
-
- protected static final String ATTR_LABEL = "label";
-
- protected static final String ATTR_VISIBLEINNAV = "visibleinnav";
-
- protected static final String ATTR_LINK = "link";
-
- protected static final String ATTR_BASE = "base";
-
- protected static final String ATTR_SUFFIX = "suffix";
-
- protected static final String ATTR_HREF = "href";
-
- protected static final String ATTR_LANG = "lang";
-
- /**
- * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
- * java.util.Map, java.lang.String,
- * org.apache.avalon.framework.parameters.Parameters)
- */
- public void setup(SourceResolver resolver, Map objectModel, String src,
- Parameters par) throws ProcessingException, SAXException,
- IOException {
- super.setup(resolver, objectModel, src, par);
-
- PageEnvelope envelope = null;
-
- if (getLogger().isDebugEnabled()) {
- Request request = ObjectModelHelper.getRequest(objectModel);
- getLogger().debug(
- "Resolving page envelope for URL ["
- + request.getRequestURI() + "]");
- }
-
- this.area = par.getParameter(PARAM_AREA, null);
- this.documentid = par.getParameter(PARAM_DOCUMENTID, null);
-
- if (par.isParameter(PARAM_INITIAL)) {
- this.initialTree = Boolean.valueOf(
- par.getParameter(PARAM_INITIAL, null)).booleanValue();
- } else {
- this.initialTree = false;
- }
-
- if (par.isParameter(PARAM_AREAS)) {
- String parAreas = par.getParameter(PARAM_AREAS, null);
- this.areas = parAreas.split(",");
- } else {
- String temp[] = { "authoring", "archive", "trash" };
- this.areas = temp;
- }
-
- if (this.getLogger().isDebugEnabled()) {
- this.getLogger().debug("Parameter area: " + this.area);
- this.getLogger().debug("Parameter documentid: " + this.documentid);
- this.getLogger()
- .debug("Parameter initialTree: " + this.initialTree);
- String areasStr = "";
- for (int i = 0; i < this.areas.length; i++)
- areasStr += this.areas[i] + " ";
- this.getLogger().debug("Parameter areas: " + areasStr);
- }
-
- try {
- envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(
- objectModel);
- } catch (Exception e) {
- throw new ProcessingException("Resolving page envelope failed: ", e);
- }
-
- this.publication = envelope.getPublication();
- this.attributes = new AttributesImpl();
-
- }
-
- /**
- * @see org.apache.cocoon.generation.Generator#generate()
- */
- public void generate() throws IOException, SAXException,
- ProcessingException {
-
- try {
-
- this.contentHandler.startDocument();
- this.contentHandler.startPrefixMapping(PREFIX, URI);
-
- attributes.clear();
- if (!initialTree) {
- attributes.addAttribute("", ATTR_AREA, ATTR_AREA, "CDATA",
- this.area);
- attributes.addAttribute("", ATTR_BASE, ATTR_BASE, "CDATA",
- this.documentid);
- }
-
- this.contentHandler.startElement(URI, NODE_FRAGMENT, PREFIX + ':'
- + NODE_FRAGMENT, this.attributes);
-
- if (this.initialTree) {
- for (int i = 0; i < this.areas.length; i++) {
- generateFragmentInitial(this.areas[i]);
- }
- } else {
- generateFragment();
- }
-
- this.contentHandler.endElement(URI, NODE_FRAGMENT, PREFIX + ':'
- + NODE_FRAGMENT);
-
- this.contentHandler.endPrefixMapping(PREFIX);
- this.contentHandler.endDocument();
-
- } catch (SAXException e) {
- throw new ProcessingException(e);
- } catch (SiteTreeException e) {
- throw new ProcessingException(e);
- }
-
- }
-
- /**
- * Generates a fragment of the tree which contains the children of a given
- * node.
- *
- * @throws SiteTreeException
- * @throws SAXException
- * @throws ProcessingException
- */
- protected void generateFragment() throws SiteTreeException, SAXException,
- ProcessingException {
-
- SiteTree siteTree = null;
- if (!this.area.equals(Publication.AUTHORING_AREA)
- && !this.area.equals(Publication.ARCHIVE_AREA)
- && !this.area.equals(Publication.TRASH_AREA)
- && !this.area.equals(Publication.STAGING_AREA)
- && !this.area.equals(Publication.LIVE_AREA)) {
- throw new ProcessingException("Invalid area: " + this.area);
- }
- siteTree = publication.getTree(this.area);
-
- SiteTreeNode node = siteTree.getNode(this.documentid);
- if (this.getLogger().isDebugEnabled()) {
- this.getLogger().debug(
- "Node with documentid " + documentid + " found.");
- }
- if (node == null)
- throw new SiteTreeException("Node with documentid " + documentid
- + " not found.");
-
- SiteTreeNode[] children = node.getChildren();
-
- for (int i = 0; i < children.length; i++) {
- startNode(NODE_NODE, children[i]);
- addLabels(children[i]);
- endNode(NODE_NODE);
- }
- }
-
- /**
- * Generates the top node of the given area and then calls a recursive
- * method to traverse the tree, if the node given by area/documentid is in
- * this area.
- *
- * @param siteArea
- * @throws SiteTreeException
- * @throws SAXException
- * @throws ProcessingException
- */
- protected void generateFragmentInitial(String siteArea)
- throws SiteTreeException, SAXException, ProcessingException {
-
- SiteTree siteTree = publication.getTree(siteArea);
-
- String label = "";
- String isFolder = "";
-
- // FIXME: don't hardcode area label
- if (siteArea.equals(Publication.AUTHORING_AREA))
- label = "Authoring";
- if (siteArea.equals(Publication.ARCHIVE_AREA))
- label = "Archive";
- if (siteArea.equals(Publication.TRASH_AREA))
- label = "Trash";
- if (siteArea.equals(Publication.LIVE_AREA))
- label = "Live";
- if (siteArea.equals(Publication.STAGING_AREA))
- label = "Staging";
-
- if (siteTree.getTopNodes().length > 0)
- isFolder = "true";
- else
- isFolder = "false";
-
- this.attributes.clear();
- this.attributes.addAttribute("", ATTR_AREA, ATTR_AREA, "CDATA",
- siteArea);
- this.attributes.addAttribute("", ATTR_FOLDER, ATTR_FOLDER, "CDATA",
- isFolder);
- this.attributes
- .addAttribute("", ATTR_LABEL, ATTR_LABEL, "CDATA", label);
-
- startNode(NODE_SITE);
-
- if (area.equals(siteArea)) {
- generateFragmentRecursive(siteTree.getTopNodes(), this.documentid);
- }
-
- endNode(NODE_SITE);
- }
-
- /**
- * Follows the documentid to find the way in the sitetree to the specified
- * node and opens all folders on its way.
- *
- * @param nodes
- * @param docid
- * @throws SiteTreeException
- * @throws SAXException
- */
- protected void generateFragmentRecursive(SiteTreeNode[] nodes, String docid)
- throws SiteTreeException, SAXException {
- String nodeid;
- String childid;
-
- if (nodes == null)
- return;
- if (docid.startsWith("/"))
- docid = docid.substring(1);
- if (docid.indexOf("/") != -1) {
- nodeid = docid.substring(0, docid.indexOf("/"));
- childid = docid.substring(docid.indexOf("/") + 1);
- } else {
- nodeid = docid;
- childid = "";
- }
-
- for (int i = 0; i < nodes.length; i++) {
- startNode(NODE_NODE, nodes[i]);
- addLabels(nodes[i]);
- if (nodes[i].getId().equals(nodeid)) {
- generateFragmentRecursive(nodes[i].getChildren(), childid);
- }
- endNode(NODE_NODE);
- }
- }
-
- /**
- * Begins a named node and calls setNodeAttributes to set its attributes.
- *
- * @param nodeName
- * the name of the new node
- * @throws SAXException
- * if an error occurs while creating the node
- */
- protected void startNode(String nodeName) throws SAXException {
- this.contentHandler.startElement(URI, nodeName,
- PREFIX + ':' + nodeName, this.attributes);
- }
-
- /**
- * Begins a named node and calls setNodeAttributes to set its attributes.
- *
- * @param nodeName
- * the name of the new node
- * @param node
- * The attributes are taken from this node
- * @throws SAXException
- * if an error occurs while creating the node
- */
- protected void startNode(String nodeName, SiteTreeNode node)
- throws SAXException {
- setNodeAttributes(node);
- this.contentHandler.startElement(URI, nodeName,
- PREFIX + ':' + nodeName, this.attributes);
- }
-
- /**
- * Sets the attributes for a given node. Sets attributes id, href, folder,
- * suffix, basic-url, language-suffix.
- *
- * @param node
- * @throws SAXException
- * if an error occurs while setting the attributes
- */
- protected void setNodeAttributes(SiteTreeNode node) throws SAXException {
- this.attributes.clear();
-
- String id = node.getId();
- String isVisible = Boolean.toString(node.visibleInNav());
- String hasLink = Boolean.toString(node.hasLink());
- String href = node.getHref();
- String suffix = node.getSuffix();
- String isFolder = isFolder(node);
-
- if (this.getLogger().isDebugEnabled()) {
- this.getLogger().debug("adding attribute id: " + id);
- this.getLogger().debug(
- "adding attribute visibleinnav: " + isVisible);
- this.getLogger().debug("adding attribute link: " + hasLink);
- if (href != null)
- this.getLogger().debug("adding attribute href: " + href);
- if (suffix != null)
- this.getLogger().debug("adding attribute suffix: " + suffix);
- this.getLogger().debug("adding attribute folder: " + isFolder);
- }
- this.attributes.addAttribute("", ATTR_ID, ATTR_ID, "CDATA", id);
- this.attributes.addAttribute("", ATTR_VISIBLEINNAV, ATTR_VISIBLEINNAV,
- "CDATA", isVisible);
- this.attributes
- .addAttribute("", ATTR_LINK, ATTR_LINK, "CDATA", hasLink);
- if (href != null)
- this.attributes.addAttribute("", ATTR_HREF, ATTR_HREF, "CDATA",
- href);
- if (suffix != null)
- this.attributes.addAttribute("", ATTR_SUFFIX, ATTR_SUFFIX, "CDATA",
- suffix);
- this.attributes.addAttribute("", ATTR_FOLDER, ATTR_FOLDER, "CDATA",
- isFolder);
- }
-
- /**
- * Returns a value to indicate whether a node is a folder (contains
- * subnodes). With the incremental sitetree loading, we sometimes load nodes
- * which are folders, but we don't load their children. But we still have to
- * know if it's a folder or not, i.e. if it can be opened.
- *
- * @param node
- * @return "true" or "false"
- */
- protected String isFolder(SiteTreeNode node) {
- if (node.getChildren().length > 0)
- return "true";
- else
- return "false";
- }
-
- /**
- * Ends the named node.
- *
- * @param nodeName
- * the name of the new node
- * @throws SAXException
- * if an error occurs while closing the node
- */
- protected void endNode(String nodeName) throws SAXException {
- this.contentHandler.endElement(URI, nodeName, PREFIX + ':' + nodeName);
- }
-
- /**
- * Finds all the label children of a node and adds them to the nav xml.
- *
- * @param node
- * @throws SAXException
- */
- protected void addLabels(SiteTreeNode node) throws SAXException {
- Label[] labels = node.getLabels();
-
- for (int i = 0; i < labels.length; i++) {
- String lang = labels[i].getLanguage();
- if (lang == null)
- lang = "";
- addLabel(labels[i].getLabel(), lang);
- }
- }
-
- /**
- * Adds a label element of a given language.
- *
- * @param label
- * the value of the label
- * @param language
- * the language of the label
- * @throws SAXException
- */
- protected void addLabel(String label, String language) throws SAXException {
- this.attributes.clear();
- this.attributes.addAttribute(XML_URI, ATTR_LANG, XML_PREFIX + ":"
- + ATTR_LANG, "CDATA", language);
-
- this.contentHandler.startElement(URI, NODE_LABEL, PREFIX + ':'
- + NODE_LABEL, this.attributes);
- char[] labelArray = label.toCharArray();
- this.contentHandler.characters(labelArray, 0, labelArray.length);
- this.contentHandler.endElement(URI, NODE_LABEL, PREFIX + ':'
- + NODE_LABEL);
- }
-
-}
+/*
+ * Copyright 1999-2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/* @version $Id$*/
+
+package org.apache.lenya.cms.cocoon.generation;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.generation.AbstractGenerator;
+import org.apache.lenya.cms.publication.Label;
+import org.apache.lenya.cms.publication.PageEnvelope;
+import org.apache.lenya.cms.publication.PageEnvelopeFactory;
+import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.publication.SiteTree;
+import org.apache.lenya.cms.publication.SiteTreeException;
+import org.apache.lenya.cms.publication.SiteTreeNode;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+
+/**
+ * Generates a fragment of the XML from the sitetree, corresponding to a given
+ * node. The node is specified by the sitemap parameters area/documentid. If the
+ * sitemap parameter initialTree is true, the top nodes of the tree will be
+ * generated and the node given by the sitemap parameters area/documentid will
+ * be unfolded. If initialTree is false, only the children of the selected node
+ * will be generated.
+ *
+ */
+public class SitetreeFragmentGenerator extends AbstractGenerator {
+
+ protected Publication publication;
+
+ /** Parameter which denotes the documentid of the clicked node */
+ protected String documentid;
+
+ /** Parameter which denotes the area of the clicked node */
+ protected String area;
+
+ /**
+ * Parameter which decides if the initial tree with the root nodes is
+ * generated
+ */
+ protected boolean initialTree;
+
+ /**
+ * Parameter which denotes a comma-separated list of areas, for which the
+ * xml will be generated.
+ */
+ protected String[] areas = null;
+
+ /**
+ * Convenience object, so we don't need to create an AttributesImpl for
+ * every element.
+ */
+ protected AttributesImpl attributes;
+
+ protected static final String PARAM_AREA = "area";
+
+ protected static final String PARAM_DOCUMENTID = "documentid";
+
+ protected static final String PARAM_INITIAL = "initial";
+
+ protected static final String PARAM_AREAS = "areas";
+
+ /** The URI of the namespace of this generator. */
+ protected static final String URI = "http://apache.org/cocoon/lenya/sitetree/1.0";
+
+ protected static final String XML_URI = "http://www.w3.org/XML/1998/namespace";
+
+ /** The namespace prefix for this namespace. */
+ protected static final String PREFIX = "site";
+
+ protected static final String XML_PREFIX = "xml";
+
+ protected static final String NODE_NODE = "node";
+
+ protected static final String NODE_LABEL = "label";
+
+ protected static final String NODE_SITE = "site";
+
+ protected static final String NODE_FRAGMENT = "fragment";
+
+ protected static final String ATTR_ID = "id";
+
+ protected static final String ATTR_FOLDER = "folder";
+
+ protected static final String ATTR_AREA = "area";
+
+ protected static final String ATTR_LABEL = "label";
+
+ protected static final String ATTR_VISIBLEINNAV = "visibleinnav";
+
+ protected static final String ATTR_LINK = "link";
+
+ protected static final String ATTR_BASE = "base";
+
+ protected static final String ATTR_SUFFIX = "suffix";
+
+ protected static final String ATTR_HREF = "href";
+
+ protected static final String ATTR_LANG = "lang";
+
+ /**
+ * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
+ * java.util.Map, java.lang.String,
+ * org.apache.avalon.framework.parameters.Parameters)
+ */
+ public void setup(SourceResolver resolver, Map objectModel, String src,
+ Parameters par) throws ProcessingException, SAXException,
+ IOException {
+ super.setup(resolver, objectModel, src, par);
+
+ PageEnvelope envelope = null;
+
+ if (getLogger().isDebugEnabled()) {
+ Request request = ObjectModelHelper.getRequest(objectModel);
+ getLogger().debug(
+ "Resolving page envelope for URL ["
+ + request.getRequestURI() + "]");
+ }
+
+ this.area = par.getParameter(PARAM_AREA, null);
+ this.documentid = par.getParameter(PARAM_DOCUMENTID, null);
+
+ if (par.isParameter(PARAM_INITIAL)) {
+ this.initialTree = Boolean.valueOf(
+ par.getParameter(PARAM_INITIAL, null)).booleanValue();
+ } else {
+ this.initialTree = false;
+ }
+
+ if (par.isParameter(PARAM_AREAS)) {
+ String parAreas = par.getParameter(PARAM_AREAS, null);
+ this.areas = parAreas.split(",");
+ } else {
+ String temp[] = { "authoring", "archive", "trash" };
+ this.areas = temp;
+ }
+
+ if (this.getLogger().isDebugEnabled()) {
+ this.getLogger().debug("Parameter area: " + this.area);
+ this.getLogger().debug("Parameter documentid: " + this.documentid);
+ this.getLogger()
+ .debug("Parameter initialTree: " + this.initialTree);
+ String areasStr = "";
+ for (int i = 0; i < this.areas.length; i++)
+ areasStr += this.areas[i] + " ";
+ this.getLogger().debug("Parameter areas: " + areasStr);
+ }
+
+ try {
+ envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(
+ objectModel);
+ } catch (Exception e) {
+ throw new ProcessingException("Resolving page envelope failed: ", e);
+ }
+
+ this.publication = envelope.getPublication();
+ this.attributes = new AttributesImpl();
+
+ }
+
+ /**
+ * @see org.apache.cocoon.generation.Generator#generate()
+ */
+ public void generate() throws IOException, SAXException,
+ ProcessingException {
+
+ try {
+
+ this.contentHandler.startDocument();
+ this.contentHandler.startPrefixMapping(PREFIX, URI);
+
+ attributes.clear();
+ if (!initialTree) {
+ attributes.addAttribute("", ATTR_AREA, ATTR_AREA, "CDATA",
+ this.area);
+ attributes.addAttribute("", ATTR_BASE, ATTR_BASE, "CDATA",
+ this.documentid);
+ }
+
+ this.contentHandler.startElement(URI, NODE_FRAGMENT, PREFIX + ':'
+ + NODE_FRAGMENT, this.attributes);
+
+ if (this.initialTree) {
+ for (int i = 0; i < this.areas.length; i++) {
+ generateFragmentInitial(this.areas[i]);
+ }
+ } else {
+ generateFragment();
+ }
+
+ this.contentHandler.endElement(URI, NODE_FRAGMENT, PREFIX + ':'
+ + NODE_FRAGMENT);
+
+ this.contentHandler.endPrefixMapping(PREFIX);
+ this.contentHandler.endDocument();
+
+ } catch (SAXException e) {
+ throw new ProcessingException(e);
+ } catch (SiteTreeException e) {
+ throw new ProcessingException(e);
+ }
+
+ }
+
+ /**
+ * Generates a fragment of the tree which contains the children of a given
+ * node.
+ *
+ * @throws SiteTreeException
+ * @throws SAXException
+ * @throws ProcessingException
+ */
+ protected void generateFragment() throws SiteTreeException, SAXException,
+ ProcessingException {
+
+ SiteTree siteTree = null;
+ if (!this.area.equals(Publication.AUTHORING_AREA)
+ && !this.area.equals(Publication.ARCHIVE_AREA)
+ && !this.area.equals(Publication.TRASH_AREA)
+ && !this.area.equals(Publication.STAGING_AREA)
+ && !this.area.equals(Publication.LIVE_AREA)) {
+ throw new ProcessingException("Invalid area: " + this.area);
+ }
+ siteTree = publication.getTree(this.area);
+
+ SiteTreeNode node = siteTree.getNode(this.documentid);
+ if (this.getLogger().isDebugEnabled()) {
+ this.getLogger().debug(
+ "Node with documentid " + documentid + " found.");
+ }
+ if (node == null)
+ throw new SiteTreeException("Node with documentid " + documentid
+ + " not found.");
+
+ SiteTreeNode[] children = node.getChildren();
+
+ for (int i = 0; i < children.length; i++) {
+ startNode(NODE_NODE, children[i]);
+ addLabels(children[i]);
+ endNode(NODE_NODE);
+ }
+ }
+
+ /**
+ * Generates the top node of the given area and then calls a recursive
+ * method to traverse the tree, if the node given by area/documentid is in
+ * this area.
+ *
+ * @param siteArea
+ * @throws SiteTreeException
+ * @throws SAXException
+ * @throws ProcessingException
+ */
+ protected void generateFragmentInitial(String siteArea)
+ throws SiteTreeException, SAXException, ProcessingException {
+
+ SiteTree siteTree = publication.getTree(siteArea);
+
+ String label = "";
+ String isFolder = "";
+
+ // FIXME: don't hardcode area label
+ if (siteArea.equals(Publication.AUTHORING_AREA))
+ label = "Authoring";
+ if (siteArea.equals(Publication.ARCHIVE_AREA))
+ label = "Archive";
+ if (siteArea.equals(Publication.TRASH_AREA))
+ label = "Trash";
+ if (siteArea.equals(Publication.LIVE_AREA))
+ label = "Live";
+ if (siteArea.equals(Publication.STAGING_AREA))
+ label = "Staging";
+
+ if (siteTree.getTopNodes().length > 0)
+ isFolder = "true";
+ else
+ isFolder = "false";
+
+ this.attributes.clear();
+ this.attributes.addAttribute("", ATTR_AREA, ATTR_AREA, "CDATA",
+ siteArea);
+ this.attributes.addAttribute("", ATTR_FOLDER, ATTR_FOLDER, "CDATA",
+ isFolder);
+ this.attributes
+ .addAttribute("", ATTR_LABEL, ATTR_LABEL, "CDATA", label);
+
+ startNode(NODE_SITE);
+
+ if (area.equals(siteArea)) {
+ generateFragmentRecursive(siteTree.getTopNodes(), this.documentid);
+ }
+
+ endNode(NODE_SITE);
+ }
+
+ /**
+ * Follows the documentid to find the way in the sitetree to the specified
+ * node and opens all folders on its way.
+ *
+ * @param nodes
+ * @param docid
+ * @throws SiteTreeException
+ * @throws SAXException
+ */
+ protected void generateFragmentRecursive(SiteTreeNode[] nodes, String docid)
+ throws SiteTreeException, SAXException {
+ String nodeid;
+ String childid;
+
+ if (nodes == null)
+ return;
+ if (docid.startsWith("/"))
+ docid = docid.substring(1);
+ if (docid.indexOf("/") != -1) {
+ nodeid = docid.substring(0, docid.indexOf("/"));
+ childid = docid.substring(docid.indexOf("/") + 1);
+ } else {
+ nodeid = docid;
+ childid = "";
+ }
+
+ for (int i = 0; i < nodes.length; i++) {
+ startNode(NODE_NODE, nodes[i]);
+ addLabels(nodes[i]);
+ if (nodes[i].getId().equals(nodeid)) {
+ generateFragmentRecursive(nodes[i].getChildren(), childid);
+ }
+ endNode(NODE_NODE);
+ }
+ }
+
+ /**
+ * Begins a named node and calls setNodeAttributes to set its attributes.
+ *
+ * @param nodeName
+ * the name of the new node
+ * @throws SAXException
+ * if an error occurs while creating the node
+ */
+ protected void startNode(String nodeName) throws SAXException {
+ this.contentHandler.startElement(URI, nodeName,
+ PREFIX + ':' + nodeName, this.attributes);
+ }
+
+ /**
+ * Begins a named node and calls setNodeAttributes to set its attributes.
+ *
+ * @param nodeName
+ * the name of the new node
+ * @param node
+ * The attributes are taken from this node
+ * @throws SAXException
+ * if an error occurs while creating the node
+ */
+ protected void startNode(String nodeName, SiteTreeNode node)
+ throws SAXException {
+ setNodeAttributes(node);
+ this.contentHandler.startElement(URI, nodeName,
+ PREFIX + ':' + nodeName, this.attributes);
+ }
+
+ /**
+ * Sets the attributes for a given node. Sets attributes id, href, folder,
+ * suffix, basic-url, language-suffix.
+ *
+ * @param node
+ * @throws SAXException
+ * if an error occurs while setting the attributes
+ */
+ protected void setNodeAttributes(SiteTreeNode node) throws SAXException {
+ this.attributes.clear();
+
+ String id = node.getId();
+ String isVisible = Boolean.toString(node.visibleInNav());
+ String hasLink = Boolean.toString(node.hasLink());
+ String href = node.getHref();
+ String suffix = node.getSuffix();
+ String isFolder = isFolder(node);
+
+ if (this.getLogger().isDebugEnabled()) {
+ this.getLogger().debug("adding attribute id: " + id);
+ this.getLogger().debug(
+ "adding attribute visibleinnav: " + isVisible);
+ this.getLogger().debug("adding attribute link: " + hasLink);
+ if (href != null)
+ this.getLogger().debug("adding attribute href: " + href);
+ if (suffix != null)
+ this.getLogger().debug("adding attribute suffix: " + suffix);
+ this.getLogger().debug("adding attribute folder: " + isFolder);
+ }
+ this.attributes.addAttribute("", ATTR_ID, ATTR_ID, "CDATA", id);
+ this.attributes.addAttribute("", ATTR_VISIBLEINNAV, ATTR_VISIBLEINNAV,
+ "CDATA", isVisible);
+ this.attributes
+ .addAttribute("", ATTR_LINK, ATTR_LINK, "CDATA", hasLink);
+ if (href != null)
+ this.attributes.addAttribute("", ATTR_HREF, ATTR_HREF, "CDATA",
+ href);
+ if (suffix != null)
+ this.attributes.addAttribute("", ATTR_SUFFIX, ATTR_SUFFIX, "CDATA",
+ suffix);
+ this.attributes.addAttribute("", ATTR_FOLDER, ATTR_FOLDER, "CDATA",
+ isFolder);
+ }
+
+ /**
+ * Returns a value to indicate whether a node is a folder (contains
+ * subnodes). With the incremental sitetree loading, we sometimes load nodes
+ * which are folders, but we don't load their children. But we still have to
+ * know if it's a folder or not, i.e. if it can be opened.
+ *
+ * @param node
+ * @return "true" or "false"
+ */
+ protected String isFolder(SiteTreeNode node) {
+ if (node.getChildren().length > 0)
+ return "true";
+ else
+ return "false";
+ }
+
+ /**
+ * Ends the named node.
+ *
+ * @param nodeName
+ * the name of the new node
+ * @throws SAXException
+ * if an error occurs while closing the node
+ */
+ protected void endNode(String nodeName) throws SAXException {
+ this.contentHandler.endElement(URI, nodeName, PREFIX + ':' + nodeName);
+ }
+
+ /**
+ * Finds all the label children of a node and adds them to the nav xml.
+ *
+ * @param node
+ * @throws SAXException
+ */
+ protected void addLabels(SiteTreeNode node) throws SAXException {
+ Label[] labels = node.getLabels();
+
+ for (int i = 0; i < labels.length; i++) {
+ String lang = labels[i].getLanguage();
+ if (lang == null)
+ lang = "";
+ addLabel(labels[i].getLabel(), lang);
+ }
+ }
+
+ /**
+ * Adds a label element of a given language.
+ *
+ * @param label
+ * the value of the label
+ * @param language
+ * the language of the label
+ * @throws SAXException
+ */
+ protected void addLabel(String label, String language) throws SAXException {
+ this.attributes.clear();
+ this.attributes.addAttribute(XML_URI, ATTR_LANG, XML_PREFIX + ":"
+ + ATTR_LANG, "CDATA", language);
+
+ this.contentHandler.startElement(URI, NODE_LABEL, PREFIX + ':'
+ + NODE_LABEL, this.attributes);
+ char[] labelArray = label.toCharArray();
+ this.contentHandler.characters(labelArray, 0, labelArray.length);
+ this.contentHandler.endElement(URI, NODE_LABEL, PREFIX + ':'
+ + NODE_LABEL);
+ }
+
+}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/content/Content.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/content/Content.java?rev=617315&r1=617314&r2=617315&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/content/Content.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/content/Content.java Thu Jan 31 16:23:00 2008
@@ -1,18 +1,16 @@
package org.apache.lenya.cms.content;
-
/**
*
* @author solprovider
* @since 1.3
*/
-public interface Content{
+public interface Content {
public static final String TYPE_FLAT = "flat";
public static final String TYPE_HIERARCHICAL = "hierarchical";
-
+ public static final String TYPE_DEFAULT = "all";
public String getURI(String unid, String language, String revision);
public String getMetaURI(String unid, String language, String revision);
public String getNewURI(String unid, String language);
-
public String getUNID(String structure, String id);
public String getIndexFilename(String indexName, String language);
public String[] getLanguages();
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/Module.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/Module.java?rev=617315&r1=617314&r2=617315&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/Module.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/modules/Module.java Thu Jan 31 16:23:00 2008
@@ -26,14 +26,13 @@
Map variables = new HashMap(); // nameString = valueString
Map files; // filename -> actual location as String (Better as File or Source?)
File moduleDirectory;
- String type = Content.TYPE_HIERARCHICAL;
+ private String type = Content.TYPE_DEFAULT;
String id;
String name;
String minimum = "1.3";
String maximum = "";
String created = "1.3";
- String content = "all";
- String modified = "1.3";
+ long modified = 1;
String resource = "";
String description = "";
String usage = "";
@@ -53,9 +52,20 @@
minimum = config.getAttribute("minimum", minimum);
maximum = config.getAttribute("maximum", maximum);
created = config.getAttribute("created", created);
- content = config.getAttribute("content", content);
- modified = config.getAttribute("modified", modified);
+ type = config.getAttribute("content", type);
+ try{
+ modified = Long.parseLong(config.getAttribute("modified", "" + modified));
+ }catch(NumberFormatException nfe){
+ modified = 1;
+ }
resource = config.getAttribute("resource", "");
+ if((resource.length() > 0) && !resource.endsWith("/" + id)){
+ if(resource.endsWith("/")){
+ resource += id;
+ }else{
+ resource += "/" + id;
+ }
+ }
// Description
Configuration descriptionConf = config.getChild("description");
description = descriptionConf.getValue("");
@@ -131,7 +141,7 @@
}
}
}
- public String getType() {
+ public String getContentType() {
return type;
}
public int getModified() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org