This broke something. Clean build of Lenya plus Cocoon
results in:
Message: Failed to process pipeline at <map:serialize>
-
file:/home/rfrovarp/lenya-1.4.x/build/lenya/webapp/sitemap.x
map:663:41
at <map:transform> -
file:/home/rfrovarp/lenya-1.4.x/build/lenya/webapp/sitemap.x
map:548:76
at <map:transform> -
file:/home/rfrovarp/lenya-1.4.x/build/lenya/webapp/sitemap.x
map:545:70
at <map:transform type="i18n"> -
file:/home/rfrovarp/lenya-1.4.x/build/lenya/webapp/sitemap.x
map:542:34
at <map:transform> -
file:/home/rfrovarp/lenya-1.4.x/build/lenya/webapp/sitemap.x
map:657:72
at <map:generate type="notifying"> -
file:/home/rfrovarp/lenya-1.4.x/build/lenya/webapp/sitemap.x
map:656:39
Sender: org.apache.cocoon.servlet.CocoonServlet
Source: Cocoon Servlet
Request URI
index.html
cause
java.lang.NullPointerException
request-uri
/index.html
stacktrace
java.lang.NullPointerException
at
org.apache.lenya.cms.cocoon.source.FallbackSourceFactory.get
Source(FallbackSourceFactory.java:130)
at
org.apache.excalibur.source.impl.SourceResolverImpl.resolveU
RI(SourceResolverImpl.java:208)
at
org.apache.cocoon.components.CocoonComponentManager.resolveU
RI(CocoonComponentManager.java:558)
at
org.apache.cocoon.environment.AbstractEnvironment.resolveURI
(AbstractEnvironment.java:553)
at
org.apache.cocoon.environment.AbstractEnvironment.resolveURI
(AbstractEnvironment.java:540)
at
org.apache.cocoon.transformation.TraxTransformer.setup(TraxT
ransformer.java:310)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipe
line.setupPipeline(AbstractProcessingPipeline.java:398)
at
org.apache.cocoon.components.pipeline.impl.AbstractCachingPr
ocessingPipeline.setupPipeline(AbstractCachingProcessingPipe
line.java:717)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipe
line.preparePipeline(AbstractProcessingPipeline.java:501)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipe
line.process(AbstractProcessingPipeline.java:453)
at
org.apache.cocoon.components.treeprocessor.sitemap.Serialize
Node.invoke(SerializeNode.java:121)
at
org.apache.cocoon.components.treeprocessor.AbstractParentPro
cessingNode.invokeNodes(AbstractParentProcessingNode.java:69
)
at
org.apache.cocoon.components.treeprocessor.sitemap.HandleErr
orsNode.invoke(HandleErrorsNode.java:89)
at
org.apache.cocoon.components.treeprocessor.sitemap.ErrorHand
lerHelper.prepareErrorHandler(ErrorHandlerHelper.java:182)
at
org.apache.cocoon.components.treeprocessor.sitemap.ErrorHand
lerHelper.prepareErrorHandler(ErrorHandlerHelper.java:135)
at
org.apache.cocoon.components.treeprocessor.sitemap.ErrorHand
lerHelper.invokeErrorHandler(ErrorHandlerHelper.java:108)
at
org.apache.cocoon.components.treeprocessor.sitemap.Pipelines
Node.invoke(PipelinesNode.java:100)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProce
ssor.process(ConcreteTreeProcessor.java:235)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProce
ssor.process(ConcreteTreeProcessor.java:177)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.pro
cess(TreeProcessor.java:253)
at org.apache.cocoon.Cocoon.process(Cocoon.java:699)
at
org.apache.cocoon.servlet.CocoonServlet.service(CocoonServle
t.java:1154)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder
.java:427)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(Web
ApplicationHandler.java:475)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandl
er.java:567)
at
org.mortbay.http.HttpContext.handle(HttpContext.java:1565)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebAp
plicationContext.java:635)
at
org.mortbay.http.HttpContext.handle(HttpContext.java:1517)
at
org.mortbay.jetty.plus.PlusWebAppContext.handle(PlusWebAppCo
ntext.java:158)
at org.mortbay.http.HttpServer.service(HttpServer.java:954)
at
org.mortbay.http.HttpConnection.service(HttpConnection.java:
814)
at
org.mortbay.http.HttpConnection.handleNext(HttpConnection.ja
va:981)
at
org.mortbay.http.HttpConnection.handle(HttpConnection.java:8
31)
at
org.mortbay.http.SocketListener.handleConnection(SocketListe
ner.java:244)
at
org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:3
57)
at
org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:5
34)
andreas apache.org wrote:
> Author: andreas
> Date: Fri Dec 15 09:01:14 2006
> New Revision: 487598
>
> URL:
http://svn.apache.org/viewvc?view=rev&rev=487598
> Log:
> Allow to use extensions instead of regexps in
BypassableAccessController, various refactorings to improve
performance, e.g. avoid duplicate source resolving
>
> Added:
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/VisitingSourceResolver.java
> - copied, changed from r482993,
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/URIResolver.java
> Removed:
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/URIResolver.java
> Modified:
>
lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/D
ocumentFactoryImpl.java
>
lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/T
estPageEnvelope.java
>
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/Revi
sionControllerAction.java
>
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/AbstractPageEnvelopeModule.java
>
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/PageEnvelopeModule.java
>
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHe
lperImpl.java
>
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Fall
backSourceFactory.java
>
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Temp
lateFallbackSourceFactory.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velope.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velopeFactory.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/URLInf
ormation.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/AllExistingSourceResolver.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingAncestorSourceResolver.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingSourceResolver.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/SourceVisitor.java
>
lenya/trunk/src/java/org/apache/lenya/cms/publication/util/D
ocumentLanguagesHelper.java
>
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure
.java
>
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
>
lenya/trunk/src/java/org/apache/lenya/cms/site/simple/Docume
ntStore.java
>
lenya/trunk/src/modules-core/ac-impl/config/cocoon-xconf/byp
assable-access-controller.xconf
>
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/ac/impl/BypassableAccessController.java
>
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/cms/ac/DocumentPolicyManagerWrapper.java
>
lenya/trunk/src/modules-core/linking/java/src/org/apache/len
ya/cms/cocoon/transformation/LinkRewritingTransformer.java
>
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apa
che/lenya/cms/site/usecases/ChangeNodeID.java
>
lenya/trunk/src/modules-core/templating-impl/java/src/org/ap
ache/lenya/cms/publication/templating/PublicationTemplateMan
agerImpl.java
>
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree/DefaultSiteTree.java
>
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree2/SiteTreeImpl.java
> lenya/trunk/src/targets/webapp-build.xml
>
> Modified:
lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/D
ocumentFactoryImpl.java
> URL: http://
svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/l
enya/cms/publication/DocumentFactoryImpl.java?view=diff&
rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/D
ocumentFactoryImpl.java (original)
> +++
lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/D
ocumentFactoryImpl.java Fri Dec 15 09:01:14 2006
>  -17,6 +17,8 
> */
> package org.apache.lenya.cms.publication;
>
> +import java.util.StringTokenizer;
> +
> import
org.apache.avalon.framework.container.ContainerUtil;
> import
org.apache.avalon.framework.logger.AbstractLogEnabled;
> import org.apache.avalon.framework.logger.Logger;
>  -181,7 +183,11 
> DocumentBuilder builder =
publication.getDocumentBuilder();
> if (builder.isDocument(webappUrl)) {
> DocumentLocator locator =
builder.getLocator(this, webappUrl);
> - return
SiteUtil.contains(this.manager, this, locator);
> + String area = locator.getArea();
> + String path = locator.getPath();
> + String language =
locator.getLanguage();
> + SiteStructure site =
publication.getArea(area).getSite();
> + return site.contains(path,
language);
> } else {
> return false;
> }
>  -216,7 +222,7 
> String uuid = null;
> try {
> Publication publication =
getPublication(locator.getPublicationId());
> - if (SiteUtil.isDocument(this.manager,
this, webappUrl)) {
> + if (SiteUtil.isDocument(this, webappUrl))
{
> uuid =
publication.getArea(area).getSite().getNode(locator.getPath(
)).getUuid();
> } else {
> UUIDGenerator generator =
(UUIDGenerator) this.manager.lookup(UUIDGenerator.ROLE);
>  -250,11 +256,11 
> if (getLogger().isDebugEnabled())
>
getLogger().debug("DocumentFactory::build() called with
key [" + key + "]");
>
> - String[] snippets = key.split(":");
> - String publicationId = snippets[0];
> - String area = snippets[1];
> - String uuid = snippets[2];
> - String language = snippets[3];
> + StringTokenizer tokenizer = new
StringTokenizer(key, ":");
> + String publicationId = tokenizer.nextToken();
> + String area = tokenizer.nextToken();
> + String uuid = tokenizer.nextToken();
> + String language = tokenizer.nextToken();
>
> Document document;
> try {
>
> Modified:
lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/T
estPageEnvelope.java
> URL: http://svn
.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/leny
a/cms/publication/TestPageEnvelope.java?view=diff&rev=48
7598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/T
estPageEnvelope.java (original)
> +++
lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/T
estPageEnvelope.java Fri Dec 15 09:01:14 2006
>  -38,7 +38,7 
> */
> public TestPageEnvelope(Publication publication,
String url, ServiceManager manager,
> Logger logger) throws
PageEnvelopeException {
> - super(manager);
> + super();
> setContext("");
>
> try {
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/Revi
sionControllerAction.java
> URL: http:
//svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/leny
a/cms/cocoon/acting/RevisionControllerAction.java?view=diff&
amp;rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/Revi
sionControllerAction.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/Revi
sionControllerAction.java Fri Dec 15 09:01:14 2006
>  -33,7 +33,6 
> import org.apache.lenya.ac.User;
> import org.apache.lenya.cms.publication.Document;
> import
org.apache.lenya.cms.publication.DocumentFactory;
> -import
org.apache.lenya.cms.publication.DocumentManager;
> import org.apache.lenya.cms.publication.DocumentUtil;
> import org.apache.lenya.cms.publication.PageEnvelope;
> import
org.apache.lenya.cms.publication.PageEnvelopeFactory;
>  -47,7 +46,8 
> /**
> * Revision controller action.
> *
> - * version $Id$
> + * version $Id: RevisionControllerAction.java 487290
2006-12-14 18:18:35Z
> + * andreas $
> */
> public class RevisionControllerAction extends
ServiceableAction {
>
>  -59,8 +59,8 
>
> /**
> * see
org.apache.cocoon.acting.Action#act(org.apache.cocoon.enviro
nment.Redirector,
> - *
org.apache.cocoon.environment.SourceResolver, java.util.Map,
java.lang.String,
> - *
org.apache.avalon.framework.parameters.Parameters)
> + *
org.apache.cocoon.environment.SourceResolver, java.util.Map,
> + * java.lang.String,
org.apache.avalon.framework.parameters.Parameters)
> */
> public Map act(Redirector redirector,
SourceResolver resolver, Map objectModel, String src,
> Parameters parameters) throws Exception {
>  -81,17 +81,15 
> } catch (Exception e) {
> throw new AccessControlException(e);
> }
> - org.apache.lenya.cms.repository.Session
repoSession = RepositoryUtil.getSession(this.manager,
> - request);
> + org.apache.lenya.cms.repository.Session
repoSession = RepositoryUtil.getSession(
> + this.manager, request);
>
> DocumentFactory factory =
DocumentUtil.createDocumentFactory(this.manager,
repoSession);
> Document document = null;
>
> try {
> publication =
PublicationUtil.getPublication(this.manager, objectModel);
> - envelope =
PageEnvelopeFactory.getInstance().getPageEnvelope(this.manag
er,
> - factory,
> - objectModel,
> + envelope =
PageEnvelopeFactory.getInstance().getPageEnvelope(factory,
objectModel,
> publication);
> document = envelope.getDocument();
> } catch (Exception e) {
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/AbstractPageEnvelopeModule.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/
java/org/apache/lenya/cms/cocoon/components/modules/input/Ab
stractPageEnvelopeModule.java?view=diff&rev=487598&r
1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/AbstractPageEnvelopeModule.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/AbstractPageEnvelopeModule.java Fri Dec 15
09:01:14 2006
>  -74,7 +74,7 
> try {
> DocumentFactory factory =
getDocumentFactory();
> Publication pub =
PublicationUtil.getPublicationFromUrl(this.manager, factory,
webappUrl);
> - envelope =
PageEnvelopeFactory.getInstance().getPageEnvelope(this.manag
er,
> + envelope =
PageEnvelopeFactory.getInstance().getPageEnvelope(
> factory,
> contextPath,
> webappUrl,
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/PageEnvelopeModule.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org
/apache/lenya/cms/cocoon/components/modules/input/PageEnvelo
peModule.java?view=diff&rev=487598&r1=487597&r2=
487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/PageEnvelopeModule.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/
modules/input/PageEnvelopeModule.java Fri Dec 15 09:01:14
2006
>  -41,8 +41,8 
> import org.apache.lenya.util.ServletHelper;
>
> /**
> - * 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
> * deprecated use DocumentInfoModule instead.
>  -53,7 +53,8 
>
> /**
> * see
org.apache.cocoon.components.modules.input.InputModule#getAt
tribute(java.lang.String,
> - *
org.apache.avalon.framework.configuration.Configuration,
java.util.Map)
> + *
org.apache.avalon.framework.configuration.Configuration,
> + * java.util.Map)
> */
> public Object getAttribute(final String
attributeName, Configuration modeConf, Map objectModel)
> throws ConfigurationException {
>  -84,50 +85,50 
> value =
envelope.getPublication().getBreadcrumbPrefix();
> } else if
(name.equals(PageEnvelope.DOCUMENT_PATH)) {
> value = getPath(envelope,
objectModel);
> - }
> -
> - Document document =
envelope.getDocument();
> - if (document != null) {
> - if
(name.equals(PageEnvelope.DOCUMENT)) {
> - value = document;
> - } else if
(name.equals(PageEnvelope.DOCUMENT_ID)) {
> - getLogger().warn(
> - "This attribute is
deprecated."
> - + " Use
document-path or document-uuid instead!");
> - value = document.getId();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_PARENT)) {
> - value =
document.getLocator().getParent().getPath();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_NAME)) {
> - value = document.getName();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_LABEL)) {
> - value =
document.getLink().getLabel();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_URL)) {
> - value =
document.getCanonicalDocumentURL();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_URL_WITHOUT_LANGUAGE)) {
> - value =
document.getCanonicalWebappURL();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_FILE)) {
> - value = document.getFile();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_EXTENSION)) {
> - value = document.getExtension();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_SOURCE_EXTENSION)) {
> - value =
document.getSourceExtension();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_UUID)) {
> - value = document.getUUID();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_LANGUAGE)) {
> - value = document.getLanguage();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_LANGUAGES)) {
> - value = document.getLanguages();
> - } else if
(name.equals(PageEnvelope.DOCUMENT_LANGUAGES_CSV)) {
> - value =
StringUtils.join(document.getLanguages(), ',');
> - } else if
(name.equals(PageEnvelope.DOCUMENT_LASTMODIFIED)) {
> - Date date = new
Date(document.getLastModified());
> - value = new
SimpleDateFormat(DATE_FORMAT).format(date);
> - } else if
(name.equals(PageEnvelope.DOCUMENT_TYPE)) {
> - ResourceType resourceType =
document.getResourceType();
> - if (resourceType == null) {
> - value = null;
> - } else {
> - value =
resourceType.getName();
> + } else {
> + Document document =
envelope.getDocument();
> + if (document != null) {
> + if
(name.equals(PageEnvelope.DOCUMENT)) {
> + value = document;
> + } else if
(name.equals(PageEnvelope.DOCUMENT_ID)) {
> + getLogger().warn(
> + "This attribute
is deprecated."
> + + " Use
document-path or document-uuid instead!");
> + value = document.getId();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_PARENT)) {
> + value =
document.getLocator().getParent().getPath();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_NAME)) {
> + value = document.getName();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_LABEL)) {
> + value =
document.getLink().getLabel();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_URL)) {
> + value =
document.getCanonicalDocumentURL();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_URL_WITHOUT_LANGUAGE)) {
> + value =
document.getCanonicalWebappURL();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_FILE)) {
> + value = document.getFile();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_EXTENSION)) {
> + value =
document.getExtension();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_SOURCE_EXTENSION)) {
> + value =
document.getSourceExtension();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_UUID)) {
> + value = document.getUUID();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_LANGUAGE)) {
> + value =
document.getLanguage();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_LANGUAGES)) {
> + value =
document.getLanguages();
> + } else if
(name.equals(PageEnvelope.DOCUMENT_LANGUAGES_CSV)) {
> + value =
StringUtils.join(document.getLanguages(), ',');
> + } else if
(name.equals(PageEnvelope.DOCUMENT_LASTMODIFIED)) {
> + Date date = new
Date(document.getLastModified());
> + value = new
SimpleDateFormat(DATE_FORMAT).format(date);
> + } else if
(name.equals(PageEnvelope.DOCUMENT_TYPE)) {
> + ResourceType resourceType =
document.getResourceType();
> + if (resourceType == null) {
> + value = null;
> + } else {
> + value =
resourceType.getName();
> + }
> }
> }
> }
>  -174,7 +175,8 
>
> /**
> * see
org.apache.cocoon.components.modules.input.InputModule#getAt
tributeValues(java.lang.String,
> - *
org.apache.avalon.framework.configuration.Configuration,
java.util.Map)
> + *
org.apache.avalon.framework.configuration.Configuration,
> + * java.util.Map)
> */
> public Object[] getAttributeValues(String name,
Configuration modeConf, Map objectModel)
> throws ConfigurationException {
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHe
lperImpl.java
> URL: http://svn.apache
.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon
/flow/FlowHelperImpl.java?view=diff&rev=487598&r1=48
7597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHe
lperImpl.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHe
lperImpl.java Fri Dec 15 09:01:14 2006
>  -73,7 +73,7 
> DocumentFactory map =
DocumentUtil.createDocumentFactory(this.manager, session);
> PageEnvelopeFactory factory =
PageEnvelopeFactory.getInstance();
> Publication publication =
PublicationUtil.getPublication(this.manager, request);
> - return
factory.getPageEnvelope(this.manager, map,
cocoon.getObjectModel(), publication);
> + return factory.getPageEnvelope(map,
cocoon.getObjectModel(), publication);
> } catch (Exception e) {
> throw new PageEnvelopeException(e);
> }
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Fall
backSourceFactory.java
> URL: http://s
vn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/c
ms/cocoon/source/FallbackSourceFactory.java?view=diff&re
v=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Fall
backSourceFactory.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Fall
backSourceFactory.java Fri Dec 15 09:01:14 2006
>  -45,7 +45,7 
> import
org.apache.lenya.cms.publication.URLInformation;
> import
org.apache.lenya.cms.publication.templating.ExistingSourceRe
solver;
> import
org.apache.lenya.cms.publication.templating.PublicationTempl
ateManager;
> -import
org.apache.lenya.cms.publication.templating.URIResolver;
> +import
org.apache.lenya.cms.publication.templating.VisitingSourceRe
solver;
>
> /**
> * Source factory following the fallback principle.
>  -68,8 +68,6 
> public Source getSource(final String location, Map
parameters) throws IOException,
> MalformedURLException {
>
> - String resolvedUri = null;
> -
> long startTime = new
GregorianCalendar().getTimeInMillis();
>
> // Remove the protocol and the first '//'
>  -103,7 +101,7 
> PublicationManager pubMgr = null;
> PublicationTemplateManager templateManager =
null;
> SourceResolver sourceResolver = null;
> - Source source;
> + Source source = null;
> try {
> sourceResolver = (SourceResolver)
this.manager.lookup(SourceResolver.ROLE);
>
>  -123,16 +121,16 
> DocumentFactory factory =
DocumentUtil.getDocumentFactory(this.manager, request);
> Publication pub =
pubMgr.getPublication(factory, publicationId);
> if (pub.exists()) {
> - URIResolver resolver =
getSourceVisitor();
> + VisitingSourceResolver resolver =
getSourceVisitor();
> templateManager.visit(pub, path,
resolver);
> - resolvedUri = resolver.getURI();
> + source = resolver.getSource();
> }
>
> if (getLogger().isDebugEnabled()) {
> - getLogger().debug("Resolved URI:
[" + resolvedUri + "]");
> + getLogger().debug("Resolved URI:
[" + source.getURI() + "]");
> }
>
> - if (resolvedUri == null) {
> + if (source == null) {
> if
(path.startsWith("lenya/modules/")) {
> ModuleManager moduleMgr = null;
> try {
>  -140,7 +138,7 
> final String moduleShortcut =
path.split("/")[2];
> String baseUri =
moduleMgr.getBaseURI(moduleShortcut);
> final String modulePath =
path.substring(("lenya/modules/" +
moduleShortcut).length());
> - resolvedUri = baseUri +
modulePath;
> + source =
sourceResolver.resolveURI(baseUri + modulePath);
> } finally {
> if (moduleMgr != null) {
>
this.manager.release(moduleMgr);
>  -148,12 +146,10 
> }
> } else {
> String contextUri =
"context://" + path;
> - resolvedUri = contextUri;
> + source =
sourceResolver.resolveURI(contextUri);
> }
> }
>
> - source =
sourceResolver.resolveURI(resolvedUri);
> -
> } catch (Exception e) {
> throw new RuntimeException("Resolving
path [" + location + "] failed: ", e);
> } finally {
>  -178,7 +174,7 
> return source;
> }
>
> - protected URIResolver getSourceVisitor() {
> + protected VisitingSourceResolver
getSourceVisitor() {
> return new ExistingSourceResolver();
> }
>
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Temp
lateFallbackSourceFactory.java
> URL:
http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache
/lenya/cms/cocoon/source/TemplateFallbackSourceFactory.java?
view=diff&rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Temp
lateFallbackSourceFactory.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/Temp
lateFallbackSourceFactory.java Fri Dec 15 09:01:14 2006
>  -18,7 +18,7 
> package org.apache.lenya.cms.cocoon.source;
>
> import
org.apache.lenya.cms.publication.templating.ExistingAncestor
SourceResolver;
> -import
org.apache.lenya.cms.publication.templating.URIResolver;
> +import
org.apache.lenya.cms.publication.templating.VisitingSourceRe
solver;
>
> /**
> * Source factory following the fallback principle,
resolving the existing ancestor of the existing resource.
>  -34,7 +34,7 
> super();
> }
>
> - protected URIResolver getSourceVisitor() {
> + protected VisitingSourceResolver
getSourceVisitor() {
> return new ExistingAncestorSourceResolver();
> }
>
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velope.java
> URL: http://svn.apache.o
rg/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publicat
ion/PageEnvelope.java?view=diff&rev=487598&r1=487597
&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velope.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velope.java Fri Dec 15 09:01:14 2006
>  -22,7 +22,6 
>
> import java.io.File;
>
> -import
org.apache.avalon.framework.service.ServiceManager;
> import org.apache.cocoon.environment.Request;
> import org.apache.lenya.cms.rc.RCEnvironment;
> import org.apache.lenya.cms.site.SiteUtil;
>  -163,19 +162,15 
> private String area;
> private Publication publication;
>
> - private ServiceManager manager;
> -
> /**
> * Constructor.
> * param manager The service manager.
> */
> - protected PageEnvelope(ServiceManager manager) {
> - this.manager = manager;
> + protected PageEnvelope() {
> }
>
> /**
> * Creates a page envelope from an object model.
> - * param manager The service manager.
> * param map The identity map to use.
> * param contextPath The servlet context
prefix.
> * param webappUrl The web application URL.
>  -183,14 +178,13 
> * param publication The publication.
> * throws PageEnvelopeException when
something went wrong.
> */
> - public PageEnvelope(ServiceManager manager,
DocumentFactory map, String contextPath,
> + public PageEnvelope(DocumentFactory map, String
contextPath,
> String webappUrl, File servletContext,
Publication publication)
> throws PageEnvelopeException {
> this.factory = map;
> this.context = contextPath;
> this.webappUrl = webappUrl;
> this.publication = publication;
> - this.manager = manager;
> }
>
> private String webappUrl;
>  -289,7 +283,7 
> if (!documentChecked) {
> try {
> documentChecked = true;
> - if (SiteUtil.isDocument(this.manager,
getDocumentFactory(), this.webappUrl)) {
> + if
(SiteUtil.isDocument(getDocumentFactory(), this.webappUrl))
{
> this.document =
getDocumentFactory().getFromURL(this.webappUrl);
> }
> } catch (final Exception e) {
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velopeFactory.java
> URL: http://svn.a
pache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/p
ublication/PageEnvelopeFactory.java?view=diff&rev=487598
&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velopeFactory.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEn
velopeFactory.java Fri Dec 15 09:01:14 2006
>  -23,7 +23,6 
> import java.io.File;
> import java.util.Map;
>
> -import
org.apache.avalon.framework.service.ServiceManager;
> import org.apache.cocoon.environment.Context;
> import
org.apache.cocoon.environment.ObjectModelHelper;
> import org.apache.cocoon.environment.Request;
>  -55,31 +54,24 
>
> /**
> * Returns the page envelope for the object model
of a Cocoon component.
> - * param manager The service manager.
> * param map The document identity map to
use.
> * param objectModel The object model.
> * param pub The publication.
> * return A page envelope.
> * throws PageEnvelopeException if something
went wrong.
> */
> - public PageEnvelope getPageEnvelope(ServiceManager
manager, DocumentFactory map,
> - Map objectModel, Publication pub) throws
PageEnvelopeException {
> + public PageEnvelope
getPageEnvelope(DocumentFactory map, Map objectModel,
Publication pub)
> + throws PageEnvelopeException {
> Request request =
ObjectModelHelper.getRequest(objectModel);
> String contextPath = request.getContextPath();
> Context context =
ObjectModelHelper.getContext(objectModel);
> String webappUrl =
ServletHelper.getWebappURI(request);
> String servletContextPath =
context.getRealPath("");
> - return getPageEnvelope(manager,
> - map,
> - contextPath,
> - webappUrl,
> - new File(servletContextPath),
> - pub);
> + return getPageEnvelope(map, contextPath,
webappUrl, new File(servletContextPath), pub);
> }
>
> /**
> * Creates a page envelope.
> - * param manager The service manager.
> * param map The document identity map to
use.
> * param contextPath The servlet context
prefix.
> * param webappUrl The web application URL.
>  -88,15 +80,9 
> * return A page envelope.
> * throws PageEnvelopeException if something
went wrong.
> */
> - public PageEnvelope getPageEnvelope(ServiceManager
manager, DocumentFactory map,
> - String contextPath, String webappUrl, File
servletContext, Publication pub)
> - throws PageEnvelopeException {
> - PageEnvelope envelope = new
PageEnvelope(manager,
> - map,
> - contextPath,
> - webappUrl,
> - servletContext,
> - pub);
> + public PageEnvelope
getPageEnvelope(DocumentFactory map, String contextPath,
String webappUrl,
> + File servletContext, Publication pub)
throws PageEnvelopeException {
> + PageEnvelope envelope = new PageEnvelope(map,
contextPath, webappUrl, servletContext, pub);
> return envelope;
> }
>
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/URLInf
ormation.java
> URL: http://svn.apache
.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/public
ation/URLInformation.java?view=diff&rev=487598&r1=48
7597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/URLInf
ormation.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/URLInf
ormation.java Fri Dec 15 09:01:14 2006
>  -30,11 +30,21 
> private String completeArea = null;
> private String documentUrl = null;
>
> + private String url;
> +
> /**
> * Returns the area (without the
"webdav" prefix).
> * return A string.
> */
> public String getArea() {
> + if (this.area == null) {
> + String completeArea = getCompleteArea();
> + if
(completeArea.equals(Publication.DAV_AREA)) {
> + this.area =
Publication.AUTHORING_AREA;
> + } else {
> + this.area = completeArea;
> + }
> + }
> return this.area;
> }
>
>  -43,6 +53,14 
> * return A string.
> */
> public String getCompleteArea() {
> + if (this.completeArea == null) {
> + String pubUrl =
this.url.substring(getPublicationId().length());
> + if (pubUrl.startsWith("/")) {
> + this.completeArea =
extractBeforeSlash(pubUrl.substring(1));
> + } else {
> + this.completeArea = null;
> + }
> + }
> return this.completeArea;
> }
>
>  -51,6 +69,14 
> * return A string.
> */
> public String getDocumentUrl() {
> + if (this.documentUrl == null) {
> + String pubId = getPublicationId();
> + String area = getArea();
> + if (pubId != null && area != null)
{
> + String prefix = pubId + "/"
+ area;
> + this.documentUrl =
this.url.substring(prefix.length());
> + }
> + }
> return this.documentUrl;
> }
>
>  -59,41 +85,38 
> * return A string.
> */
> public String getPublicationId() {
> + if (this.publicationId == null) {
> + this.publicationId =
extractBeforeSlash(this.url);
> + }
> return this.publicationId;
> }
>
> + protected String extractBeforeSlash(String
remaining) {
> +
> + if (remaining.length() == 0) {
> + return null;
> + }
> +
> + String step;
> + int slashIndex = remaining.indexOf('/');
> + if (slashIndex == -1) {
> + step = remaining;
> + } else {
> + step = remaining.substring(0, slashIndex);
> + }
> + return step;
> + }
> +
> /**
> * Ctor.
> * param webappUrl A webapp URL (without
context prefix).
> */
> public URLInformation(String webappUrl) {
> -
> +
> if (!webappUrl.startsWith("/")) {
> throw new RuntimeException("The URL
[" + webappUrl + "] doesn't start with a
slash!");
> }
>
> - String url = webappUrl.substring(1);
> -
> - String[] fragments = url.split("/");
> - if (fragments.length > 0) {
> - this.publicationId = fragments[0];
> -
> - if (fragments.length > 1) {
> - this.completeArea = fragments[1];
> -
> - if (url.length() >
(this.publicationId + "/" +
this.completeArea).length()) {
> - this.documentUrl =
url.substring((this.publicationId + "/" +
this.completeArea).length());
> - } else {
> - this.documentUrl = "";
> - }
> -
> - if
(this.completeArea.equals(Publication.DAV_AREA)) {
> - this.area =
Publication.AUTHORING_AREA;
> - } else {
> - this.area = this.completeArea;
> - }
> - }
> - }
> + this.url = webappUrl.substring(1);
> }
> -
> }
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/AllExistingSourceResolver.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/a
pache/lenya/cms/publication/templating/AllExistingSourceReso
lver.java?view=diff&rev=487598&r1=487597&r2=4875
98
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/AllExistingSourceResolver.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/AllExistingSourceResolver.java Fri Dec 15 09:01:14 2006
>  -21,20 +21,31 
> import java.util.List;
>
> import org.apache.excalibur.source.Source;
> +import org.apache.excalibur.source.SourceResolver;
>
> /**
> * Source visitor to obtain all existing sources.
> */
> public class AllExistingSourceResolver implements
SourceVisitor {
>
> - public void visit(Source source) {
> - if (source.exists()) {
> - this.uris.add(source.getURI());
> + public void visit(SourceResolver resolver, String
sourceUri) {
> + Source source = null;
> + try {
> + source = resolver.resolveURI(sourceUri);
> + if (source.exists()) {
> + this.uris.add(sourceUri);
> + }
> + } catch (Exception e) {
> + throw new RuntimeException(e);
> + } finally {
> + if (source != null) {
> + resolver.release(source);
> + }
> }
> }
> -
> +
> private List uris = new ArrayList();
> -
> +
> /**
> * return All existing source URIs.
> */
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingAncestorSourceResolver.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/
org/apache/lenya/cms/publication/templating/ExistingAncestor
SourceResolver.java?view=diff&rev=487598&r1=487597&a
mp;r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingAncestorSourceResolver.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingAncestorSourceResolver.java Fri Dec 15 09:01:14
2006
>  -19,15 +19,16 
> package org.apache.lenya.cms.publication.templating;
>
> import org.apache.excalibur.source.Source;
> +import org.apache.excalibur.source.SourceResolver;
>
> /**
> * Source visitor to obtain the first existing source.
> *
> * version $Id: ExistingSourceResolver.java 179568
2005-06-02 09:27:26Z jwkaltz $
> */
> -public class ExistingAncestorSourceResolver implements
URIResolver {
> -
> - private String uri;
> +public class ExistingAncestorSourceResolver implements
VisitingSourceResolver {
> +
> + private Source source;
>
> /**
> * Ctor.
>  -35,25 +36,31 
> public ExistingAncestorSourceResolver() {
> super();
> }
> -
> +
> /**
> - * Returns the URI of the first existing source.
> - * return The URI
> + * return the ancestor of the first existing
source.
> */
> - public String getURI() {
> - return this.uri;
> + public Source getSource() {
> + return this.source;
> }
>
> private int matches = 0;
>
> - /**
> - * see
org.apache.lenya.cms.publication.templating.SourceVisitor#vi
sit(org.apache.excalibur.source.Source)
> - */
> - public void visit(Source source) {
> - if (source.exists()) {
> - matches++;
> - if (matches == 2) {
> - this.uri = source.getURI();
> + public void visit(SourceResolver resolver, String
sourceUri) {
> + Source source = null;
> + try {
> + source = resolver.resolveURI(sourceUri);
> + if (source.exists()) {
> + matches++;
> + if (matches == 2) {
> + this.source = source;
> + }
> + }
> + } catch (Exception e) {
> + throw new RuntimeException(e);
> + } finally {
> + if (source != null) {
> + resolver.release(source);
> }
> }
> }
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingSourceResolver.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apac
he/lenya/cms/publication/templating/ExistingSourceResolver.j
ava?view=diff&rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingSourceResolver.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/ExistingSourceResolver.java Fri Dec 15 09:01:14 2006
>  -19,15 +19,16 
> package org.apache.lenya.cms.publication.templating;
>
> import org.apache.excalibur.source.Source;
> +import org.apache.excalibur.source.SourceResolver;
>
> /**
> * Source visitor to obtain the first existing source.
> *
> * version $Id$
> */
> -public class ExistingSourceResolver implements
URIResolver {
> -
> - private String uri;
> +public class ExistingSourceResolver implements
VisitingSourceResolver {
> +
> + private Source source;
>
> /**
> * Ctor.
>  -35,21 +36,29 
> public ExistingSourceResolver() {
> super();
> }
> -
> +
> /**
> - * Returns the URI of the first existing source.
> - * return The URI
> + * return the first existing source.
> */
> - public String getURI() {
> - return this.uri;
> + public Source getSource() {
> + return this.source;
> }
> -
> - /**
> - * see
org.apache.lenya.cms.publication.templating.SourceVisitor#vi
sit(org.apache.excalibur.source.Source)
> - */
> - public void visit(Source source) {
> - if (this.uri == null &&
source.exists()) {
> - this.uri = source.getURI();
> +
> + public void visit(SourceResolver resolver, String
sourceUri) {
> + if (this.source == null) {
> + Source source = null;
> + try {
> + source =
resolver.resolveURI(sourceUri);
> + if (source.exists()) {
> + this.source = source;
> + }
> + } catch (Exception e) {
> + throw new RuntimeException(e);
> + } finally {
> + if (source != null) {
> + resolver.release(source);
> + }
> + }
> }
> }
>
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/SourceVisitor.java
> URL: http://
svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/
cms/publication/templating/SourceVisitor.java?view=diff&
rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/SourceVisitor.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/SourceVisitor.java Fri Dec 15 09:01:14 2006
>  -17,7 +17,7 
> */
> package org.apache.lenya.cms.publication.templating;
>
> -import org.apache.excalibur.source.Source;
> +import org.apache.excalibur.source.SourceResolver;
>
> /**
> * version $Id$
>  -25,9 +25,12 
> public interface SourceVisitor {
>
> /**
> - * Visits a source.
> - * param source The source.
> + * Visits a source. We pass the resolver and the
URI so that the visitor can
> + * decide if it wants to resolve the source
(mainly for performance
> + * reasons).
> + * param resolver The resolver.
> + * param sourceUri The source URI.
> */
> - void visit(Source source);
> + void visit(SourceResolver resolver, String
sourceUri);
>
> }
>
> Copied:
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/VisitingSourceResolver.java (from r482993,
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/URIResolver.java)
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/java
/org/apache/lenya/cms/publication/templating/VisitingSourceR
esolver.java?view=diff&rev=487598&p1=lenya/trunk/src
/java/org/apache/lenya/cms/publication/templating/URIResolve
r.java&r1=482993&p2=lenya/trunk/src/java/org/apache/
lenya/cms/publication/templating/VisitingSourceResolver.java
&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/URIResolver.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/templa
ting/VisitingSourceResolver.java Fri Dec 15 09:01:14 2006
>  -17,14 +17,16 
> */
> package org.apache.lenya.cms.publication.templating;
>
> +import org.apache.excalibur.source.Source;
> +
> /**
> * URI resolver.
> */
> -public interface URIResolver extends SourceVisitor {
> +public interface VisitingSourceResolver extends
SourceVisitor {
>
> /**
> - * return The resolved URI.
> + * return The resolved source.
> */
> - String getURI();
> + Source getSource();
>
> }
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/publication/util/D
ocumentLanguagesHelper.java
> URL: htt
p://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/le
nya/cms/publication/util/DocumentLanguagesHelper.java?view=d
iff&rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/publication/util/D
ocumentLanguagesHelper.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/publication/util/D
ocumentLanguagesHelper.java Fri Dec 15 09:01:14 2006
>  -103,7 +103,8 
> 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)) {
> + Publication pub =
factory.getPublication(locator.getPublicationId());
> + if
(pub.getArea(version.getArea()).getSite().contains(version.g
etPath(), version.getLanguage())) {
>
availableLanguages.add(languages[i]);
> }
> }
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure
.java
> URL: http://svn.apache.org/vie
wvc/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStruc
ture.java?view=diff&rev=487598&r1=487597&r2=4875
98
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure
.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure
.java Fri Dec 15 09:01:14 2006
>  -64,6 +64,14 
> boolean contains(String path);
>
> /**
> + * Checks if a link is contained for a certain
path and language.
> + * param path The path.
> + * param language The language.
> + * return A boolean value.
> + */
> + boolean contains(String path, String language);
> +
> + /**
> * Checks if the structure contains a link with a
certain UUID and language.
> * param uuid The UUID.
> * param language The language.
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
> URL: http://svn.apache.org/viewvc/l
enya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java?
view=diff&rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
(original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
Fri Dec 15 09:01:14 2006
>  -24,7 +24,6 
> import
org.apache.avalon.framework.service.ServiceManager;
> import
org.apache.avalon.framework.service.ServiceSelector;
> import org.apache.lenya.cms.publication.Document;
> -import
org.apache.lenya.cms.publication.DocumentBuildException;
> import
org.apache.lenya.cms.publication.DocumentBuilder;
> import
org.apache.lenya.cms.publication.DocumentFactory;
> import
org.apache.lenya.cms.publication.DocumentLocator;
>  -112,46 +111,15 
> }
> }
>
> - public static boolean contains(ServiceManager
manager, DocumentFactory factory,
> - DocumentLocator locator) throws
SiteException {
> - SiteManager siteManager = null;
> - ServiceSelector selector = null;
> -
> - try {
> - selector = (ServiceSelector)
manager.lookup(SiteManager.ROLE + "Selector");
> - Publication pub =
factory.getPublication(locator.getPublicationId());
> - String siteManagerHint =
pub.getSiteManagerHint();
> - siteManager = (SiteManager)
selector.select(siteManagerHint);
> - SiteStructure site =
siteManager.getSiteStructure(factory, pub,
locator.getArea());
> - String path = locator.getPath();
> - String language = locator.getLanguage();
> - return site.contains(path) &&
site.getNode(path).hasLink(language);
> - } catch (SiteException e) {
> - throw e;
> - } catch (Exception e) {
> - throw new SiteException(e);
> - } finally {
> - if (selector != null) {
> - if (siteManager != null) {
> - selector.release(siteManager);
> - }
> - manager.release(selector);
> - }
> - }
> - }
> -
> - public static boolean isDocument(ServiceManager
manager, DocumentFactory factory,
> - String webappUrl) throws SiteException {
> + public static boolean isDocument(DocumentFactory
factory, String webappUrl)
> + throws SiteException {
>
> URLInformation info = new
URLInformation(webappUrl);
> try {
> Publication pub =
factory.getPublication(info.getPublicationId());
> if (pub.exists()) {
> DocumentBuilder builder =
pub.getDocumentBuilder();
> - if (builder.isDocument(webappUrl)) {
> - DocumentLocator locator =
builder.getLocator(factory, webappUrl);
> - return contains(manager, factory,
locator);
> - }
> + return builder.isDocument(webappUrl);
> }
> return false;
> } catch (SiteException e) {
>  -164,15 +132,18 
> public static Document getDocument(ServiceManager
manager, DocumentFactory factory,
> String webappUrl) throws SiteException {
>
> - DocumentLocator locator = getLocator(manager,
factory, webappUrl);
> - if (contains(manager, factory, locator)) {
> - try {
> + try {
> + DocumentLocator locator =
getLocator(manager, factory, webappUrl);
> + Publication pub =
factory.getPublication(locator.getPublicationId());
> + String path = locator.getPath();
> + String lang = locator.getLanguage();
> + if
(pub.getArea(locator.getArea()).getSite().contains(path,
lang)) {
> return factory.get(locator);
> - } catch (DocumentBuildException e) {
> - throw new SiteException(e);
> + } else {
> + throw new SiteException("No
document for webapp URL [" + webappUrl +
"]");
> }
> - } else {
> - throw new SiteException("No document
for webapp URL [" + webappUrl + "]");
> + } catch (Exception e) {
> + throw new SiteException(e);
> }
> }
>
>
> Modified:
lenya/trunk/src/java/org/apache/lenya/cms/site/simple/Docume
ntStore.java
> URL: http://svn.apache.
org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/si
mple/DocumentStore.java?view=diff&rev=487598&r1=4875
97&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/java/org/apache/lenya/cms/site/simple/Docume
ntStore.java (original)
> +++
lenya/trunk/src/java/org/apache/lenya/cms/site/simple/Docume
ntStore.java Fri Dec 15 09:01:14 2006
>  -302,4 +302,16 
> return (SiteNode[]) topLevelNodes.toArray(new
SiteNode[topLevelNodes.size()]);
> }
>
> + public boolean contains(String path, String
language) {
> + if (contains(path)) {
> + SiteNode node;
> + try {
> + node = getNode(path);
> + } catch (SiteException e) {
> + throw new RuntimeException(e);
> + }
> + return node.hasLink(language);
> + }
> + return false;
> + }
> }
>
> Modified:
lenya/trunk/src/modules-core/ac-impl/config/cocoon-xconf/byp
assable-access-controller.xconf
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/a
c-impl/config/cocoon-xconf/bypassable-access-controller.xcon
f?view=diff&rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/modules-core/ac-impl/config/cocoon-xconf/byp
assable-access-controller.xconf (original)
> +++
lenya/trunk/src/modules-core/ac-impl/config/cocoon-xconf/byp
assable-access-controller.xconf Fri Dec 15 09:01:14 2006
>  -24,7 +24,13 
> <xconf xpath="/cocoon"
unless="/cocoon/component[ role =
'org.apache.lenya.ac.AccessController/bypassable']">
> <component
logger="lenya.ac.accesscontroller.bypassable"
>
class="org.apache.lenya.ac.impl.BypassableAccessControl
ler"
> -
role="org.apache.lenya.ac.AccessController/bypassable&q
uot;>
> -
<public>.*[.]css|.*[.]jpg|.*[.]gif|.*[.]png|.*[.]rng|.
*[.]xsl</public>
> +
role="org.apache.lenya.ac.AccessController/bypassable&q
uot;>
> +
> +
<public-extensions>css,jpg,gif,png,rng,xsl</public-
extensions>
> +
> + <!-- bad performance, use only for complex
patterns
> +
<public>.*[.]css|.*[.]jpg|.*[.]gif|.*[.]png|.*[.]rng|.
*[.]xsl</public>
> + -->
> +
> </component>
> </xconf>
>
> Modified:
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/ac/impl/BypassableAccessController.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/mod
ules-core/ac-impl/java/src/org/apache/lenya/ac/impl/Bypassab
leAccessController.java?view=diff&rev=487598&r1=4875
97&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/ac/impl/BypassableAccessController.java (original)
> +++
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/ac/impl/BypassableAccessController.java Fri Dec 15
09:01:14 2006
>  -46,6 +46,7 
> }
>
> private List publicMatchers = new ArrayList();
> + private List publicExtensions = new ArrayList();
>
> /**
> * see
org.apache.avalon.framework.configuration.Configurable#confi
gure(org.apache.avalon.framework.configuration.Configuration
)
>  -70,6 +71,19 
> getLogger().debug("CONFIGURATION:
public: " + publicHref);
> }
> }
> +
> + Configuration[] extensionConfigs =
conf.getChildren("public-extensions");
> + for (int i = 0; i <
extensionConfigs.length; i++) {
> + String extensionString =
extensionConfigs[i].getValue();
> + String[] extensions =
extensionString.split(",");
> + for (int e = 0; e < extensions.length;
e++) {
> + String ext = extensions[e].trim();
> + if (!ext.startsWith(".")) {
> + ext = "." + ext;
> + }
> + this.publicExtensions.add(ext);
> + }
> + }
>
> }
>
>  -149,6 +163,13 
> }
> authorized = true;
> }
> + i++;
> + }
> +
> + i = 0;
> + while (!authorized && i <
this.publicExtensions.size()) {
> + String ext = (String)
this.publicExtensions.get(i);
> + authorized = uri.endsWith(ext);
> i++;
> }
>
>
> Modified:
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/cms/ac/DocumentPolicyManagerWrapper.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/mo
dules-core/ac-impl/java/src/org/apache/lenya/cms/ac/Document
PolicyManagerWrapper.java?view=diff&rev=487598&r1=48
7597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/cms/ac/DocumentPolicyManagerWrapper.java (original)
> +++
lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/len
ya/cms/ac/DocumentPolicyManagerWrapper.java Fri Dec 15
09:01:14 2006
>  -71,11 +71,13 
>
> /**
> * Returns the URI which is used to obtain the
policy for a webapp URL.
> + * param controller The accreditable manager.
> * param webappUrl The webapp URL.
> * return A string.
> * throws AccessControlException when
something went wrong.
> */
> - protected String getPolicyURL(String webappUrl)
throws AccessControlException {
> + protected String getPolicyURL(String webappUrl)
> + throws AccessControlException {
>
> if (getLogger().isDebugEnabled()) {
> getLogger().debug("Resolving policy
for webapp URL [" + webappUrl + "]");
>  -130,6 +132,20 
> getLogger().debug(" Using URL:
[" + url + "]");
> }
> return url;
> + }
> +
> + protected String getPolicyUrlFast(String
webappUrl)
> + throws AccessControlException {
> + String strippedUrl = strip(strip(webappUrl,
'.'), '_');
> + return strippedUrl;
> + }
> +
> + protected String strip(String strippedUrl, char
delimiter) {
> + int lastDotIndex =
strippedUrl.lastIndexOf(delimiter);
> + if (lastDotIndex != -1) {
> + strippedUrl = strippedUrl.substring(0,
lastDotIndex);
> + }
> + return strippedUrl;
> }
>
> /**
>
> Modified:
lenya/trunk/src/modules-core/linking/java/src/org/apache/len
ya/cms/cocoon/transformation/LinkRewritingTransformer.java
> URL: http://svn.apache.org/viewvc/len
ya/trunk/src/modules-core/linking/java/src/org/apache/lenya/
cms/cocoon/transformation/LinkRewritingTransformer.java?view
=diff&rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/modules-core/linking/java/src/org/apache/len
ya/cms/cocoon/transformation/LinkRewritingTransformer.java
(original)
> +++
lenya/trunk/src/modules-core/linking/java/src/org/apache/len
ya/cms/cocoon/transformation/LinkRewritingTransformer.java
Fri Dec 15 09:01:14 2006
>  -36,6 +36,7 
> import org.apache.lenya.ac.Policy;
> import org.apache.lenya.ac.PolicyManager;
> import org.apache.lenya.cms.linking.LinkResolver;
> +import org.apache.lenya.cms.linking.LinkTarget;
> import org.apache.lenya.cms.publication.Document;
> import
org.apache.lenya.cms.publication.DocumentFactory;
> import org.apache.lenya.cms.publication.DocumentUtil;
>  -56,7 +57,7 
> * <p>
> * This transformer is applied to an XHMTL document.
It processes all links
> * following the { link LinkResolver} syntax
which are denoted by
> - * { link ResourceType#getLinkAttributeXPaths()}.
> + * { link
org.apache.lenya.cms.publication.ResourceType#getLinkAttribu
teXPaths()}.
> * </p>
> * <p>
> * These links are resolved using the following rules:
>  -209,8 +210,9 
> if (linkUriAndQuery.length
> 1) {
> queryString =
linkUriAndQuery[1];
> }
> - Document targetDocument =
this.linkResolver.resolve(doc, linkUri).getDocument();
> - if (targetDocument != null) {
> + LinkTarget target =
this.linkResolver.resolve(doc, linkUri);
> + if (target.exists()) {
> + Document targetDocument =
target.getDocument();
> String extension =
targetDocument.getExtension();
> if (extension.length()
> 0) {
> extension =
"." + extension;
>
> Modified:
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apa
che/lenya/cms/site/usecases/ChangeNodeID.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/
modules-core/sitemanagement/java/src/org/apache/lenya/cms/si
te/usecases/ChangeNodeID.java?view=diff&rev=487598&r
1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apa
che/lenya/cms/site/usecases/ChangeNodeID.java (original)
> +++
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apa
che/lenya/cms/site/usecases/ChangeNodeID.java Fri Dec 15
09:01:14 2006
>  -32,6 +32,7 
> import org.apache.lenya.cms.site.NodeSet;
> import org.apache.lenya.cms.site.SiteException;
> import org.apache.lenya.cms.site.SiteNode;
> +import org.apache.lenya.cms.site.SiteStructure;
> import org.apache.lenya.cms.site.SiteUtil;
> import org.apache.lenya.cms.usecase.DocumentUsecase;
> import org.apache.lenya.cms.usecase.UsecaseException;
>  -127,7 +128,9 
> addErrorMessage("The document ID is
not valid.");
> } else {
> DocumentLocator target =
getTargetLocator();
> - if (SiteUtil.contains(this.manager,
getDocumentFactory(), target)) {
> + Publication pub =
getDocumentFactory().getPublication(target.getPublicationId(
));
> + SiteStructure site =
pub.getArea(target.getArea()).getSite();
> + if (site.contains(target.getPath(),
target.getLanguage())) {
> addErrorMessage("The document
does already exist.");
> }
> }
>
> Modified:
lenya/trunk/src/modules-core/templating-impl/java/src/org/ap
ache/lenya/cms/publication/templating/PublicationTemplateMan
agerImpl.java
> URL: http://svn.apache
.org/viewvc/lenya/trunk/src/modules-core/templating-impl/jav
a/src/org/apache/lenya/cms/publication/templating/Publicatio
nTemplateManagerImpl.java?view=diff&rev=487598&r1=48
7597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/modules-core/templating-impl/java/src/org/ap
ache/lenya/cms/publication/templating/PublicationTemplateMan
agerImpl.java (original)
> +++
lenya/trunk/src/modules-core/templating-impl/java/src/org/ap
ache/lenya/cms/publication/templating/PublicationTemplateMan
agerImpl.java Fri Dec 15 09:01:14 2006
>  -28,7 +28,6 
> import
org.apache.avalon.framework.service.ServiceManager;
> import
org.apache.avalon.framework.service.ServiceSelector;
> import
org.apache.avalon.framework.service.Serviceable;
> -import org.apache.excalibur.source.Source;
> import org.apache.excalibur.source.SourceResolver;
> import org.apache.lenya.cms.publication.Publication;
> import
org.apache.lenya.cms.publication.PublicationException;
>  -36,7 +35,8 
> /**
> * Manager for publication templates.
> *
> - * version $Id$
> + * version $Id: PublicationTemplateManagerImpl.java
474729 2006-11-14 11:07:44Z
> + * andreas $
> */
> public class PublicationTemplateManagerImpl extends
AbstractLogEnabled implements
> PublicationTemplateManager, Serviceable {
>  -49,7 +49,8 
>
> /**
> * see
org.apache.lenya.cms.publication.templating.PublicationTempl
ateManager#visit(org.apache.lenya.cms.publication.Publicatio
n,
> - * java.lang.String,
org.apache.lenya.cms.publication.templating.SourceVisitor)
> + * java.lang.String,
> + *
org.apache.lenya.cms.publication.templating.SourceVisitor)
> */
> public void visit(Publication publication, String
path, SourceVisitor visitor) {
>
>  -65,18 +66,7 
> getLogger().debug("Trying to
resolve URI [" + uri + "]");
> }
>
> - Source source = null;
> - try {
> - source = resolver.resolveURI(uri);
> - visitor.visit(source);
> - } catch (Exception e) {
> - getLogger().error("Could not
resolve URI [" + uri + "]: ", e);
> - throw e;
> - } finally {
> - if (source != null) {
> - resolver.release(source);
> - }
> - }
> + visitor.visit(resolver, uri);
> }
>
> } catch (Exception e) {
>  -100,7 +90,8 
>
> /**
> * Returns the publication.
> - * return A publication. protected
Publication getPublication1() { return this.publication; }
> + * return A publication. protected
Publication getPublication1() { return
> + * this.publication; }
> */
>
> /**
>  -188,7 +179,8 
>
> /**
> * see
org.apache.lenya.cms.publication.templating.PublicationTempl
ateManager#getSelectableHint(org.apache.lenya.cms.publicatio
n.Publication,
> - *
org.apache.avalon.framework.service.ServiceSelector,
java.lang.String)
> + *
org.apache.avalon.framework.service.ServiceSelector,
> + * java.lang.String)
> */
> public Object getSelectableHint(Publication
publication, ServiceSelector selector,
> final String originalHint) throws
ServiceException {
>  -254,8 +246,8 
> }
>
> /**
> - * return The publication hint that could be
selected or <code>null</code> if no hint
> - * could be selected.
> + * return The publication hint that could be
selected or
> + * <code>null</code> if no
hint could be selected.
> */
> public Object getSelectableHint() {
> return this.selectableHint;
>
> Modified:
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree/DefaultSiteTree.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/site
tree/java/src/org/apache/lenya/cms/site/tree/DefaultSiteTree
.java?view=diff&rev=487598&r1=487597&r2=487598
a>
>
============================================================
==================
> ---
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree/DefaultSiteTree.java (original)
> +++
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree/DefaultSiteTree.java Fri Dec 15 09:01:14 2006
>  -624,4 +624,17 
> return root;
> }
>
> + public boolean contains(String path, String
language) {
> + if (contains(path)) {
> + SiteNode node;
> + try {
> + node = getNode(path);
> + } catch (SiteException e) {
> + throw new RuntimeException(e);
> + }
> + return node.hasLink(language);
> + }
> + return false;
> + }
> +
> }
>
> Modified:
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree2/SiteTreeImpl.java
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetr
ee/java/src/org/apache/lenya/cms/site/tree2/SiteTreeImpl.jav
a?view=diff&rev=487598&r1=487597&r2=487598
>
============================================================
==================
> ---
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree2/SiteTreeImpl.java (original)
> +++
lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/c
ms/site/tree2/SiteTreeImpl.java Fri Dec 15 09:01:14 2006
>  -382,4 +382,16 
> parent.moveUp(node.getName());
> }
>
> + public boolean contains(String path, String
language) {
> + if (contains(path)) {
> + SiteNode node;
> + try {
> + node = getNode(path);
> + } catch (SiteException e) {
> + throw new RuntimeException(e);
> + }
> + return node.hasLink(language);
> + }
> + return false;
> + }
> }
>
> Modified: lenya/trunk/src/targets/webapp-build.xml
> URL: http://svn.apache.org/viewvc/lenya/trunk/src/targe
ts/webapp-build.xml?view=diff&rev=487598&r1=487597&a
mp;r2=487598
>
============================================================
==================
> --- lenya/trunk/src/targets/webapp-build.xml (original)
> +++ lenya/trunk/src/targets/webapp-build.xml Fri Dec 15
09:01:14 2006
>  -33,6 +33,19 
> </antcall>
> </target>
>
> + <target name="compile-impl"
description="compile and deploy core
implementation">
> + <path id="classpath.impl">
> + <path refid="classpath"/>
> + <fileset
dir="${build.webapp}/WEB-INF/lib"
includes="lenya-*-api.jar"/>
> + </path>
> + <antcall target="compile-src">
> + <param name="compile.src.dir"
value="${src.java.impl.dir}"/>
> + <param name="compile.dest.dir"
value="${build.dir}/impl"/>
> + <param name="compile.classpath"
value="classpath.impl"/>
> + <param name="jar.name"
value="impl"/>
> + </antcall>
> + </target>
> +
> <!--
> This target creates a webapp directory which exactly
mirrors how
> the war file will look. It is used to create the war
file for
>  -128,19 +141,7 
> </delete>
>
> <antcall target="compile-api"/>
> -
> - <path id="classpath.impl">
> - <path refid="classpath"/>
> - <fileset
dir="${build.webapp}/WEB-INF/lib"
includes="lenya-*-api.jar"/>
> - </path>
> -
> - <!-- compile core implementation -->
> - <antcall target="compile-src">
> - <param name="compile.src.dir"
value="${src.java.impl.dir}"/>
> - <param name="compile.dest.dir"
value="${build.dir}/impl"/>
> - <param name="compile.classpath"
value="classpath.impl"/>
> - <param name="jar.name"
value="impl"/>
> - </antcall>
> + <antcall target="compile-impl"/>
>
> <!--
> <antcall target="deploy-modules"/>
>
>
>
>
------------------------------------------------------------
---------
> To unsubscribe, e-mail: commits-unsubscribe lenya.apache.org
> For additional commands, e-mail: commits-help lenya.apache.org
>
>
>
------------------------------------------------------------
---------
To unsubscribe, e-mail: dev-unsubscribe lenya.apache.org
For additional commands, e-mail: dev-help lenya.apache.org
|