- change core.publication to core.publication.impl git-svn-id: https://svn.apache.org/repos/asf/lenya/trunk@1034526 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.lenya.core.publication/pom.xml b/org.apache.lenya.core.publication.impl/pom.xml similarity index 100% rename from org.apache.lenya.core.publication/pom.xml rename to org.apache.lenya.core.publication.impl/pom.xml
diff --git a/org.apache.lenya.core.publication/rcl.properties b/org.apache.lenya.core.publication.impl/rcl.properties similarity index 100% rename from org.apache.lenya.core.publication/rcl.properties rename to org.apache.lenya.core.publication.impl/rcl.properties
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Area.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Area.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Area.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Area.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/History.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/History.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/History.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/History.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/HistoryWrapper.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/HistoryWrapper.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/HistoryWrapper.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/HistoryWrapper.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/IdentityDocumentIdToPathMapper.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/IdentityDocumentIdToPathMapper.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/IdentityDocumentIdToPathMapper.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/IdentityDocumentIdToPathMapper.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/IdentityWrapper.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/IdentityWrapper.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/IdentityWrapper.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/IdentityWrapper.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/LockException.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/LockException.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/LockException.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/LockException.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Node.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Node.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Node.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Node.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PageEnvelope.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PageEnvelope.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PageEnvelope.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PageEnvelope.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeException.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeException.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeException.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeException.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeFactory.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeFactory.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeFactory.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PageEnvelopeFactory.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Proxy.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Proxy.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Proxy.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Proxy.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Publication.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Publication.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Publication.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Publication.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationException.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationException.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationException.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationException.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationUtil.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationUtil.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationUtil.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationUtil.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationsGenerator.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationsGenerator.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/PublicationsGenerator.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationsGenerator.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceType.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceType.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceType.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceType.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolver.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolver.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolver.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolver.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolverImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolverImpl.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolverImpl.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/ResourceTypeResolverImpl.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Revision.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Revision.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Revision.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Revision.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/RevisionWrapper.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/RevisionWrapper.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/RevisionWrapper.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/RevisionWrapper.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Session.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Session.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Session.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/Session.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/SingleLanguageIdentityMapper.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/SingleLanguageIdentityMapper.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/SingleLanguageIdentityMapper.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/SingleLanguageIdentityMapper.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/TransactionLock.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/TransactionLock.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/TransactionLock.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/TransactionLock.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/URLInformation.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/URLInformation.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/URLInformation.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/URLInformation.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/UriHandler.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/UriHandler.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/UriHandler.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/UriHandler.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/AllExistingSourceResolver.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/AllExistingSourceResolver.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/AllExistingSourceResolver.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/AllExistingSourceResolver.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/ExistingAncestorSourceResolver.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/ExistingAncestorSourceResolver.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/ExistingAncestorSourceResolver.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/ExistingAncestorSourceResolver.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/ExistingSourceResolver.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/ExistingSourceResolver.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/ExistingSourceResolver.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/ExistingSourceResolver.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/Instantiator.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/Instantiator.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/Instantiator.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/Instantiator.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/PublicationTemplateManager.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/PublicationTemplateManager.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/PublicationTemplateManager.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/PublicationTemplateManager.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/PublicationVisitor.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/PublicationVisitor.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/PublicationVisitor.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/PublicationVisitor.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/SourceVisitor.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/SourceVisitor.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/SourceVisitor.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/SourceVisitor.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/TemplatingException.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/TemplatingException.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/TemplatingException.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/TemplatingException.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/VisitingSourceResolver.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/VisitingSourceResolver.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/templating/VisitingSourceResolver.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/templating/VisitingSourceResolver.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/DocumentHelper.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/DocumentHelper.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/DocumentHelper.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/DocumentHelper.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/DocumentSet.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/DocumentSet.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/DocumentSet.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/DocumentSet.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/LanguageVersions.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/LanguageVersions.java similarity index 100% rename from org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/util/LanguageVersions.java rename to org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/util/LanguageVersions.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DocumentLocatorTest.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DocumentLocatorTest.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DocumentLocatorTest.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DocumentLocatorTest.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java
diff --git a/org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java b/org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java similarity index 100% rename from org.apache.lenya.core.publication/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java rename to org.apache.lenya.core.publication.impl/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java deleted file mode 100644 index bd3ad6e..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java +++ /dev/null
@@ -1,208 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ - -package org.apache.lenya.cms.publication; - -import java.net.MalformedURLException; - -import org.apache.avalon.framework.service.ServiceManager; -import org.apache.avalon.framework.service.Serviceable; -import org.apache.avalon.framework.thread.ThreadSafe; -import org.apache.cocoon.util.AbstractLogEnabled; -import org.apache.lenya.cms.site.SiteNode; - -/** - * Default document builder implementation. - * - * @version $Id$ - */ -public class DefaultDocumentBuilder extends AbstractLogEnabled implements DocumentBuilder, - Serviceable, ThreadSafe { - - /** - * Ctor. - */ - public DefaultDocumentBuilder() { - } - - /** - * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager) - */ - public void service(ServiceManager manager) { - this.manager = manager; - } - - protected ServiceManager manager; - - /** - * Removes all "."-separated extensions from a URL (e.g., - * <code>/foo.print.html</code> is transformed to <code>/foo</code>). - * @param url The URL to trim. - * @return A URL string. - */ - protected String removeExtensions(String url) { - int dotIndex = url.indexOf("."); - if (dotIndex > -1) { - url = url.substring(0, dotIndex); - } - return url; - } - - /** - * Returns the language of a URL. - * @param urlWithoutSuffix The URL without the suffix. - * @return A string. - */ - protected String getLanguage(String urlWithoutSuffix) { - - String language = ""; - String url = urlWithoutSuffix; - - int languageSeparatorIndex = url.lastIndexOf("_"); - if (languageSeparatorIndex > -1) { - String suffix = url.substring(languageSeparatorIndex + 1); - if (suffix.length() <= 5) { - language = suffix; - } - } - return language; - } - - /** - * Returns the extension of a URL. - * @param url The URL. - * @return The extension. - */ - protected String getExtension(String url) { - int startOfSuffix = url.lastIndexOf('.'); - String suffix = ""; - - if ((startOfSuffix > -1) && !url.endsWith(".")) { - suffix = url.substring(startOfSuffix + 1); - } - - return suffix; - } - - public boolean isDocument(Session session, String url) { - try { - DocumentLocator locator = getLocatorWithoutCheck(session, url); - if (locator != null) { - Publication pub = session.getPublication(locator.getPublicationId()); - String path = locator.getPath(); - Area area = pub.getArea(locator.getArea()); - if (area.getSite().contains(path)) { - SiteNode node = area.getSite().getNode(path); - if (node.hasLink(locator.getLanguage())) { - return true; - } - } - } - } catch (Exception e) { - throw new RuntimeException(e); - } - - return false; - } - - /** - * Builds the canonical document URL. - * @param session The document factory. - * @param locator The document locator. - * @return A string. - */ - protected String buildCanonicalDocumentUrl(Session session, DocumentLocator locator) { - - String languageSuffix = ""; - String language = locator.getLanguage(); - - Publication pub = session.getPublication(locator.getPublicationId()); - - if (!language.equals(pub.getDefaultLanguage())) { - languageSuffix = "_" + language; - } - - return locator.getPath() + languageSuffix + ".html"; - } - - public String buildCanonicalUrl(Session session, DocumentLocator doc) { - - String documentUrl = buildCanonicalDocumentUrl(session, doc); - String url = "/" + doc.getPublicationId() + "/" + doc.getArea() + documentUrl; - return url; - } - - public DocumentLocator getLocator(Session session, String webappUrl) throws MalformedURLException { - - DocumentLocator locator = getLocatorWithoutCheck(session, webappUrl); - if (locator == null) { - throw new ResourceNotFoundException("The webapp URL [" + webappUrl - + "] does not refer to a document!"); - } - return locator; - } - - /** - * Creates a document locator for a webapp URL without checking if the - * webapp URL refers to a locator first. - * @param session The document factory. - * @param webappUrl The webapp URL. - * @return A document locator or <code>null</code> if the URL doesn't - * refer to a locator. - * @throws MalformedURLException if the URL is not a webapp URL. - */ - protected DocumentLocator getLocatorWithoutCheck(Session session, String webappUrl) throws MalformedURLException { - - if (!webappUrl.startsWith("/")) { - return null; - } - if (webappUrl.substring(1).split("/").length < 3) { - return null; - } - - URLInformation info = new URLInformation(webappUrl); - - Publication publication = session.getPublication(info.getPublicationId()); - String documentURL = info.getDocumentUrl(); - documentURL = removeExtensions(documentURL); - - String language = getLanguage(documentURL); - String fullLanguage = "".equals(language) ? "" : ("_" + language); - documentURL = documentURL.substring(0, documentURL.length() - fullLanguage.length()); - - if ("".equals(language)) { - language = publication.getDefaultLanguage(); - } - - String path = documentURL; - - if (!path.startsWith("/")) { - throw new MalformedURLException("Path [" + path + "] does not start with '/'!"); - } - - return DocumentLocator.getLocator(publication.getId(), info.getArea(), path, language); - } - - /** - * @see org.apache.lenya.cms.publication.DocumentBuilder#isValidDocumentName(java.lang.String) - */ - public boolean isValidDocumentName(String documentName) { - return documentName.matches("[a-zA-Z0-9\\-]+"); - } - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentIdToPathMapper.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentIdToPathMapper.java deleted file mode 100644 index 1086670..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentIdToPathMapper.java +++ /dev/null
@@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ - -package org.apache.lenya.cms.publication; - -import java.io.File; - -/** - * Default DocumentIdToPathMapper implementation. - * - * @version $Id$ - */ -public class DefaultDocumentIdToPathMapper implements DocumentIdToPathMapper { - - /** - * The file name. - */ - public static final String BASE_FILENAME_PREFIX = "index"; - - /** - * @see org.apache.lenya.cms.publication.DocumentIdToPathMapper#getPath(java.lang.String, - * java.lang.String) - */ - public String getPath(String uuid, String language) { - if (uuid.startsWith("/")) { - return uuid.substring(1) + "/" + getFilename(language); - } - else { - return uuid + "/" + language; - } - } - - /** - * Constructs the filename for a given language. - * - * @param language The language. - * @return A string value. - */ - protected String getFilename(String language) { - String languageSuffix = ""; - if (language != null && !"".equals(language)) { - languageSuffix = "_" + language; - } - return BASE_FILENAME_PREFIX + languageSuffix; - } - - /** - * Returns the language for a certain file - * - * @param file the document file - * - * @return the language for the given document file or null if the file has no language. - */ - public String getLanguage(File file) { - String fileName = file.getName(); - String language = null; - - int lastDotIndex = fileName.lastIndexOf("."); - String suffix = fileName.substring(lastDotIndex); - - // check if the file is of the form index.html or index_en.html - - if (fileName.startsWith(BASE_FILENAME_PREFIX) && fileName.endsWith(suffix)) { - String languageSuffix = fileName.substring(BASE_FILENAME_PREFIX.length(), - fileName.indexOf(suffix)); - if (languageSuffix.length() > 0) { - // trim the leading '_' - language = languageSuffix.substring(1); - } - } - return language; - } -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Document.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Document.java deleted file mode 100644 index 0498b21..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/Document.java +++ /dev/null
@@ -1,307 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ - -package org.apache.lenya.cms.publication; - -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Date; - -import org.apache.lenya.cms.metadata.MetaDataOwner; -import org.apache.lenya.cms.publication.util.DocumentVisitor; -import org.apache.lenya.cms.site.Link; - -/** - * A CMS document. - * @version $Id$ - */ -public interface Document extends Node, MetaDataOwner { - - /** - * The document namespace URI. - */ - String NAMESPACE = "http://apache.org/cocoon/lenya/document/1.0"; - - /** - * The default namespace prefix. - */ - String DEFAULT_PREFIX = "lenya"; - - /** - * The transactionable type for document objects. - */ - String TRANSACTIONABLE_TYPE = "document"; - - /** - * <code>DOCUMENT_META_SUFFIX</code> The suffix for document meta Uris - */ - final String DOCUMENT_META_SUFFIX = ".meta"; - - /** - * Returns the date at which point the requested document is considered expired - * @return a string in RFC 1123 date format - * @throws DocumentException if an error occurs. - */ - Date getExpires() throws DocumentException; - - /** - * Returns the document name of this document. - * @return the document-name of this document. - */ - String getName(); - - /** - * Returns the publication this document belongs to. - * @return A publication object. - */ - Publication getPublication(); - - /** - * Returns the canonical web application URL. - * @return A string. - */ - String getCanonicalWebappURL(); - - /** - * Returns the canonical document URL. - * @return A string. - */ - String getCanonicalDocumentURL(); - - /** - * Returns the language of this document. - * Each document has one language associated to it. - * @return A string denoting the language. - */ - String getLanguage(); - - /** - * Returns all the languages this document is available in. - * A document has one associated language (@see Document#getLanguage) - * but there are possibly a number of other languages for which a - * document with the same document-uuid is also available in. - * - * @return An array of strings denoting the languages. - */ - String[] getLanguages(); - - /** - * Returns the date of the last modification of this document. - * @return A date denoting the date of the last modification. - * @throws DocumentException if an error occurs. - */ - long getLastModified() throws DocumentException; - - /** - * Returns the area this document belongs to. - * @return The area. - */ - String getArea(); - - /** - * Returns the extension in the URL without the dot. - * @return A string. - */ - String getExtension(); - - /** - * Returns the UUID. - * @return A string. - */ - String getUUID(); - - /** - * Check if a document with the given document-uuid, language and in the given - * area actually exists. - * - * @return true if the document exists, false otherwise - */ - boolean exists(); - - /** - * Check if a document exists with the given document-uuid and the given area - * independently of the given language. - * - * @return true if a document with the given document-uuid and area exists, false otherwise - */ - boolean existsInAnyLanguage(); - - /** - * Returns the URI to resolve the document's source. - * The source can only be used for read-only access. - * For write access, use {@link #getOutputStream()}. - * @return A string. - */ - String getSourceURI(); - - /** - * @return The output stream to write the document content to. - */ - OutputStream getOutputStream(); - - /** - * Accepts a document visitor. - * @param visitor The visitor. - * @throws Exception if an error occurs. - */ - void accept(DocumentVisitor visitor) throws Exception; - - /** - * Deletes the document. - * @throws DocumentException if an error occurs. - */ - void delete() throws DocumentException; - - /** - * @return The resource type of this document (formerly known as doctype) - * @throws DocumentException if the resource type has not been set. - */ - ResourceType getResourceType() throws DocumentException; - - /** - * @param resourceType The resource type of this document. - */ - void setResourceType(ResourceType resourceType); - - /** - * @return The source extension used by this document, without the dot. - */ - String getSourceExtension(); - - /** - * @param extension The source extension used by this document, without the dot. - */ - void setSourceExtension(String extension); - - /** - * Sets the mime type of this document. - * @param mimeType The mime type. - */ - void setMimeType(String mimeType); - - /** - * @return The mime type of this document. - * @throws DocumentException if the mime type has not been set. - */ - String getMimeType() throws DocumentException; - - /** - * @return The content length of the document. - */ - long getContentLength(); - - /** - * @return The document identifier for this document. - */ - DocumentIdentifier getIdentifier(); - - /** - * This is a shortcut to getLink().getNode().getPath(). - * @return The path of this document in the site structure. - * @throws DocumentException if the document is not linked in the site structure. - */ - String getPath() throws DocumentException; - - /** - * Checks if a certain translation (language version) of this document exists. - * @param language The language. - * @return A boolean value. - */ - boolean existsTranslation(String language); - - /** - * Returns a certain translation (language version) of this document. - * @param language The language. - * @return A document. - * @throws ResourceNotFoundException if the language version doesn't exist. - */ - Document getTranslation(String language) throws ResourceNotFoundException; - - /** - * Checks if this document exists in a certain area. - * @param area The area. - * @return A boolean value. - */ - boolean existsAreaVersion(String area); - - /** - * Returns the document in a certain area. - * @param area The area. - * @return A document. - * @throws ResourceNotFoundException if the area version doesn't exist. - */ - Document getAreaVersion(String area) throws ResourceNotFoundException; - - /** - * Checks if a translation of this document exists in a certain area. - * @param area The area. - * @param language The language. - * @return A boolean value. - */ - boolean existsVersion(String area, String language); - - /** - * Returns a translation of this document in a certain area. - * @param area The area. - * @param language The language. - * @return A document. - * @throws ResourceNotFoundException if the area version doesn't exist. - */ - Document getVersion(String area, String language) throws ResourceNotFoundException; - - /** - * @return A document locator. - */ - DocumentLocator getLocator(); - - /** - * @return The link to this document in the site structure. - * @throws DocumentException if the document is not referenced in the site structure. - */ - Link getLink() throws DocumentException; - - /** - * @return The area the document belongs to. - */ - Area area(); - - /** - * @return if the document is linked in the site structure. - */ - boolean hasLink(); - - /** - * @return The input stream to obtain the document's content. - */ - InputStream getInputStream(); - - /** - * @param i The revision number. - * @return A revision. - * @throws RepositoryException if the revision doesn't exist. - */ - Document getRevision(int i) throws RepositoryException; - - /** - * @return The revision number of this document. - */ - int getRevisionNumber(); - - History getHistory(); - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentBuildException.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentBuildException.java deleted file mode 100644 index 59ebdb8..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentBuildException.java +++ /dev/null
@@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ - -package org.apache.lenya.cms.publication; - -/** - * Document build exception. - * - * @version $Id$ - */ -public class DocumentBuildException extends PublicationException { - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Constructor. - */ - public DocumentBuildException() { - super(); - } - - /** - * Constructor. - * @param message A message. - */ - public DocumentBuildException(String message) { - super(message); - } - - /** - * Constructor. - * @param cause The cause of the exception. - */ - public DocumentBuildException(Throwable cause) { - super(cause); - } - - /** - * Constructor. - * @param message A message. - * @param cause The cause of the exception. - */ - public DocumentBuildException(String message, Throwable cause) { - super(message, cause); - } -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java deleted file mode 100644 index 7a99efa..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java +++ /dev/null
@@ -1,68 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.publication; - -import java.net.MalformedURLException; - -/** - * A document builder builds a document from a URL. - */ -public interface DocumentBuilder { - - /** - * The Avalon role. - */ - String ROLE = DocumentBuilder.class.getName(); - - /** - * Returns a document for a web application URL. - * @param factory The factory. - * @param webappUrl The web application URL. - * @return A document identifier. - * @throws MalformedURLException if the URL is not a webapp URL. - */ - DocumentLocator getLocator(Session session, String webappUrl) throws MalformedURLException; - - /** - * Checks if an URL corresponds to a CMS document. - * @param factory The document factory. - * @param url The URL of the form /{publication-id}/... - * @return A boolean value. - * @throws DocumentBuildException when something went wrong. - */ - boolean isDocument(Session session, String url); - - /** - * Builds an URL corresponding to a CMS document. - * @param factory The document factory. - * @param locator The locator. - * @return a String The corresponding URL. - */ - String buildCanonicalUrl(Session session, DocumentLocator locator); - - /** - * Checks if a document name is valid. - * @param documentName The document name. - * @return A boolean value. - */ - boolean isValidDocumentName(String documentName); - -} \ No newline at end of file
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentDoesNotExistException.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentDoesNotExistException.java deleted file mode 100644 index 7f4f15c..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentDoesNotExistException.java +++ /dev/null
@@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.publication; - -/** - * Document does not exist exception - */ -public class DocumentDoesNotExistException extends DocumentException { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Creates a new DocumentDoesNotExistException - * - */ - public DocumentDoesNotExistException() { - super(); - } - - /** - * Creates a new DocumentDoesNotExistException - * @param message the exception message - */ - public DocumentDoesNotExistException(String message) { - super(message); - } - - /** - * Creates a new DocumentDoesNotExistException - * @param message the exception message - * @param cause the cause of the exception - */ - public DocumentDoesNotExistException(String message, Throwable cause) { - super(message, cause); - } - - /** - * Creates a new DocumentDoesNotExistException - * @param cause the cause of the exception - */ - public DocumentDoesNotExistException(Throwable cause) { - super(cause); - } - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentException.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentException.java deleted file mode 100644 index 35ab77d..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentException.java +++ /dev/null
@@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.publication; - -/** - * Document exception - */ -public class DocumentException extends PublicationException { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Creates a new DocumentException - * - */ - public DocumentException() { - super(); - } - - /** - * Creates a new DocumentException - * - * @param message the exception message - */ - public DocumentException(String message) { - super(message); - } - - /** - * Creates a new DocumentException - * - * @param message the exception message - * @param cause the cause of the exception - */ - public DocumentException(String message, Throwable cause) { - super(message, cause); - } - - /** - * Creates a new DocumentException - * - * @param cause the cause of the exception - */ - public DocumentException(Throwable cause) { - super(cause); - } - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java deleted file mode 100644 index 048b8ae..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java +++ /dev/null
@@ -1,108 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -/** - * A DocumentIdentityMap avoids the multiple instanciation of a document object. - * - * @version $Id$ - */ -public interface DocumentFactory { - - /** - * Returns a document. - * @param identifier The identifier of the document. - * @return A document. - * @throws ResourceNotFoundException if the document does not exist. - */ - Document get(DocumentIdentifier identifier) throws ResourceNotFoundException; - - /** - * Returns a document. - * @param publication The publication. - * @param area The area. - * @param uuid The document ID. - * @param language The language. - * @return A document. - * @throws ResourceNotFoundException if the document does not exist. - */ - Document get(Publication publication, String area, String uuid, String language) - throws ResourceNotFoundException; - - /** - * Returns a revision of a document. - * @param publication The publication. - * @param area The area. - * @param uuid The document ID. - * @param language The language. - * @param revision The revision.. - * @return A document. - * @throws ResourceNotFoundException if the document does not exist. - */ - Document get(Publication publication, String area, String uuid, String language, int revision) - throws ResourceNotFoundException; - - /** - * Returns the document identified by a certain web application URL. - * @param webappUrl The web application URL. - * @return A document. - * @throws ResourceNotFoundException if an error occurs. - */ - Document getFromURL(String webappUrl) throws ResourceNotFoundException; - - /** - * Builds a document for the default language. - * @param publication The publication. - * @param area The area. - * @param uuid The document UUID. - * @return A document. - * @throws ResourceNotFoundException if an error occurs. - */ - Document get(Publication publication, String area, String uuid) - throws ResourceNotFoundException; - - /** - * Checks if a webapp URL represents a document. - * @param webappUrl A web application URL. - * @return A boolean value. - */ - boolean isDocument(String webappUrl); - - /** - * @return The session. - */ - Session getSession(); - - /** - * @param id The publication ID. - * @return A publication. - * @throws PublicationException if the publication does not exist. - */ - Publication getPublication(String id) throws PublicationException; - - /** - * @return All publication IDs. - */ - String[] getPublicationIds(); - - /** - * @param id The publication ID. - * @return If a publication with this ID exists. - */ - boolean existsPublication(String id); -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java deleted file mode 100644 index c0f333c..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java +++ /dev/null
@@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -/** - * Document factory builder. - */ -public interface DocumentFactoryBuilder { - - /** - * Creates a new document factory. - * @param session The session. - * @return A document identity map. - */ - DocumentFactory createDocumentFactory(Session session); - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilderImpl.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilderImpl.java deleted file mode 100644 index c92610c..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilderImpl.java +++ /dev/null
@@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -import org.apache.cocoon.util.AbstractLogEnabled; -import org.apache.excalibur.source.SourceResolver; -import org.apache.lenya.cms.metadata.MetaDataCache; -import org.apache.lenya.cms.repository.NodeFactory; - -/** - * Document factory builder implementation. - */ -public class DocumentFactoryBuilderImpl extends AbstractLogEnabled implements - DocumentFactoryBuilder { - - private PublicationManager pubManager; - private MetaDataCache metaDataCache; - private SourceResolver sourceResolver; - private NodeFactory nodeFactory; - private ResourceTypeResolver resourceTypeResolver; - - public DocumentFactory createDocumentFactory(Session session) { - DocumentFactoryImpl factory = new DocumentFactoryImpl(session); - factory.setMetaDataCache(getMetaDataCache()); - factory.setPublicationManager(getPublicationManager()); - factory.setSourceResolver(getSourceResolver()); - factory.setNodeFactory(this.nodeFactory); - factory.setResourceTypeResolver(this.resourceTypeResolver); - return factory; - } - - public void setPublicationManager(PublicationManager pubManager) { - this.pubManager = pubManager; - } - - protected PublicationManager getPublicationManager() { - return this.pubManager; - } - - public void setMetaDataCache(MetaDataCache metaDataCache) { - this.metaDataCache = metaDataCache; - } - - protected MetaDataCache getMetaDataCache() { - return metaDataCache; - } - - public SourceResolver getSourceResolver() { - return sourceResolver; - } - - public void setSourceResolver(SourceResolver sourceResolver) { - this.sourceResolver = sourceResolver; - } - - public void setNodeFactory(NodeFactory nodeFactory) { - this.nodeFactory = nodeFactory; - } - - public void setResourceTypeResolver(ResourceTypeResolver resourceTypeResolver) { - this.resourceTypeResolver = resourceTypeResolver; - } - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java deleted file mode 100644 index 4e557aa..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java +++ /dev/null
@@ -1,374 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -import java.util.Arrays; -import java.util.StringTokenizer; - -import org.apache.commons.lang.Validate; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.excalibur.source.SourceResolver; -import org.apache.lenya.cms.metadata.MetaDataCache; -import org.apache.lenya.cms.repository.NodeFactory; -import org.apache.lenya.cms.repository.RepositoryException; -import org.apache.lenya.cms.repository.RepositoryItem; -import org.apache.lenya.cms.repository.RepositoryItemFactory; -import org.apache.lenya.cms.repository.SessionHolder; - -/** - * A DocumentIdentityMap avoids the multiple instanciation of a document object. - * - * @version $Id: DocumentIdentityMap.java 264153 2005-08-29 15:11:14Z andreas $ - */ -public class DocumentFactoryImpl implements DocumentFactory, RepositoryItemFactory { - - private static final Log logger = LogFactory.getLog(DocumentFactoryImpl.class); - - private Session session; - private MetaDataCache metaDataCache; - private SourceResolver sourceResolver; - private NodeFactory nodeFactory; - private ResourceTypeResolver resourceTypeResolver; - - /** - * @return The session. - */ - public Session getSession() { - return this.session; - } - - /** - * Ctor. - * @param session The session to use. - */ - public DocumentFactoryImpl(Session session) { - this.session = session; - } - - /** - * Returns a document. - * @param publication The publication. - * @param area The area. - * @param uuid The document UUID. - * @param language The language. - * @return A document. - * @throws ResourceNotFoundException if an error occurs. - */ - public Document get(Publication publication, String area, String uuid, String language) - throws ResourceNotFoundException { - return get(publication, area, uuid, language, -1); - } - - public Document get(Publication publication, String area, String uuid, String language, - int revision) throws ResourceNotFoundException { - if (logger.isDebugEnabled()) - logger.debug( - "DocumentIdentityMap::get() called on publication [" + publication.getId() - + "], area [" + area + "], UUID [" + uuid + "], language [" + language - + "]"); - - String key = getKey(publication, area, uuid, language, revision); - - if (logger.isDebugEnabled()) - logger.debug( - "DocumentIdentityMap::get() got key [" + key + "] from DocumentFactory"); - - try { - return (Document) getRepositorySession().getRepositoryItem(this, key); - } catch (RepositoryException e) { - throw new ResourceNotFoundException(e); - } - } - - protected org.apache.lenya.cms.repository.Session getRepositorySession() { - SessionHolder holder = (SessionHolder) this.session; - return holder.getRepositorySession(); - } - - /** - * Returns the document identified by a certain web application URL. - * @param webappUrl The web application URL. - * @return A document. - * @throws ResourceNotFoundException if an error occurs. - */ - public Document getFromURL(String webappUrl) throws ResourceNotFoundException { - String key = getKey(webappUrl); - try { - return (Document) getRepositorySession().getRepositoryItem(this, key); - } catch (RepositoryException e) { - throw new ResourceNotFoundException(e); - } - } - - /** - * Builds a clone of a document for another language. - * @param document The document to clone. - * @param language The language of the target document. - * @return A document. - * @throws DocumentBuildException if an error occurs. - */ - public Document getLanguageVersion(Document document, String language) - throws DocumentBuildException { - return get(document.getPublication(), document.getArea(), document.getUUID(), language); - } - - /** - * Builds a clone of a document for another area. - * @param document The document to clone. - * @param area The area of the target document. - * @return A document. - * @throws ResourceNotFoundException if an error occurs. - */ - public Document getAreaVersion(Document document, String area) throws ResourceNotFoundException { - return get(document.getPublication(), area, document.getUUID(), document.getLanguage()); - } - - /** - * Builds a document for the default language. - * @param publication The publication. - * @param area The area. - * @param documentId The document ID. - * @return A document. - * @throws ResourceNotFoundException if an error occurs. - */ - public Document get(Publication publication, String area, String documentId) - throws ResourceNotFoundException { - return get(publication, area, documentId, publication.getDefaultLanguage()); - } - - /** - * Checks if a string represents a valid document ID. - * @param id The string. - * @return A boolean value. - */ - public boolean isValidDocumentId(String id) { - - if (!id.startsWith("/")) { - return false; - } - - String[] snippets = id.split("/"); - - if (snippets.length < 2) { - return false; - } - - for (int i = 1; i < snippets.length; i++) { - if (!snippets[i].matches("[a-zA-Z0-9\\-]+")) { - return false; - } - } - - return true; - } - - /** - * Checks if a webapp URL represents a document. - * @param webappUrl A web application URL. - * @return A boolean value. - * @throws ResourceNotFoundException if an error occurs. - */ - public boolean isDocument(String webappUrl) throws ResourceNotFoundException { - Validate.notNull(webappUrl); - try { - URLInformation info = new URLInformation(webappUrl); - String pubId = info.getPublicationId(); - String[] pubIds = getPublicationIds(); - if (pubId != null && Arrays.asList(pubIds).contains(pubId)) { - Publication pub = getPublication(pubId); - DocumentBuilder builder = pub.getDocumentBuilder(); - return builder.isDocument(this.session, webappUrl); - } else { - return false; - } - } catch (PublicationException e) { - throw new ResourceNotFoundException(e); - } - } - - /** - * Builds a document key. - * @param publication The publication. - * @param area The area. - * @param uuid The document UUID. - * @param language The language. - * @param revision - * @return A key. - */ - public String getKey(Publication publication, String area, String uuid, String language, - int revision) { - Validate.notNull(publication); - Validate.notNull(area); - Validate.notNull(uuid); - Validate.notNull(language); - return publication.getId() + ":" + area + ":" + uuid + ":" + language + ":" + revision; - } - - /** - * Builds a document key. - * @param webappUrl The web application URL. - * @return A key. - */ - public String getKey(String webappUrl) { - Validate.notNull(webappUrl); - try { - if (!isDocument(webappUrl)) { - throw new RuntimeException("No document for URL [" + webappUrl + "] found."); - } - DocumentLocator locator = getLocator(webappUrl); - Publication publication = getPublication(locator.getPublicationId()); - String area = locator.getArea(); - String uuid = publication.getArea(area).getSite().getNode(locator.getPath()).getUuid(); - return getKey(publication, area, uuid, locator.getLanguage(), -1); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - protected DocumentLocator getLocator(String webappUrl) { - DocumentLocator locator; - try { - URLInformation info = new URLInformation(webappUrl); - Publication publication = getPublication(info.getPublicationId()); - DocumentBuilder builder = publication.getDocumentBuilder(); - locator = builder.getLocator(this.session, webappUrl); - - } catch (Exception e) { - throw new RuntimeException(e); - } - return locator; - } - - /** - * @see org.apache.lenya.transaction.IdentifiableFactory#build(org.apache.lenya.transaction.IdentityMap, - * java.lang.String) - */ - public RepositoryItem buildItem(org.apache.lenya.cms.repository.Session session, String key) throws RepositoryException { - if (logger.isDebugEnabled()) - logger.debug("DocumentFactory::build() called with key [" + key + "]"); - - StringTokenizer tokenizer = new StringTokenizer(key, ":"); - String publicationId = tokenizer.nextToken(); - String area = tokenizer.nextToken(); - String uuid = tokenizer.nextToken(); - String language = tokenizer.nextToken(); - String revisionString = tokenizer.nextToken(); - int revision = Integer.valueOf(revisionString).intValue(); - - DocumentImpl document; - try { - Publication publication = getPublication(publicationId); - DocumentBuilder builder = publication.getDocumentBuilder(); - DocumentIdentifier identifier = new DocumentIdentifier(publicationId, area, uuid, - language); - document = buildDocument(identifier, revision, builder); - } catch (Exception e) { - throw new RepositoryException(e); - } - if (logger.isDebugEnabled()) - logger.debug("DocumentFactory::build() done."); - - return document; - } - - protected DocumentImpl buildDocument(DocumentIdentifier identifier, int revision, - DocumentBuilder builder) throws DocumentBuildException { - return createDocument(identifier, revision, builder); - } - - /** - * Creates a new document object. Override this method to create specific document objects, - * e.g., for different document IDs. - * @param identifier The identifier. - * @param revision The revision or -1 for the latest revision. - * @param builder The document builder. - * @return A document. - * @throws DocumentBuildException when something went wrong. - */ - protected DocumentImpl createDocument(DocumentIdentifier identifier, int revision, - DocumentBuilder builder) throws DocumentBuildException { - DocumentImpl doc = new DocumentImpl(session, identifier, revision); - doc.setMetaDataCache(getMetaDataCache()); - doc.setSourceResolver(getSourceResolver()); - doc.setNodeFactory(this.nodeFactory); - doc.setResourceTypeResolver(this.resourceTypeResolver); - return doc; - } - - public Document get(DocumentIdentifier identifier) throws ResourceNotFoundException { - try { - Publication pub = getPublication(identifier.getPublicationId()); - return get(pub, identifier.getArea(), identifier.getUUID(), identifier.getLanguage()); - } catch (PublicationException e) { - throw new ResourceNotFoundException(e); - } - } - - public String getItemType() { - return Document.TRANSACTIONABLE_TYPE; - } - - public Publication getPublication(String id) throws PublicationException { - return getPublicationManager().getPublication(this, id); - } - - public String[] getPublicationIds() { - return getPublicationManager().getPublicationIds(); - } - - private PublicationManager pubManager; - - protected void setPublicationManager(PublicationManager pubManager) { - this.pubManager = pubManager; - } - - protected PublicationManager getPublicationManager() { - return this.pubManager; - } - - public boolean existsPublication(String id) { - return Arrays.asList(getPublicationManager().getPublicationIds()).contains(id); - } - - protected MetaDataCache getMetaDataCache() { - return metaDataCache; - } - - public void setMetaDataCache(MetaDataCache metaDataCache) { - this.metaDataCache = metaDataCache; - } - - public SourceResolver getSourceResolver() { - return sourceResolver; - } - - public void setSourceResolver(SourceResolver sourceResolver) { - this.sourceResolver = sourceResolver; - } - - public void setNodeFactory(NodeFactory nodeFactory) { - Validate.notNull(nodeFactory, "node factory"); - this.nodeFactory = nodeFactory; - } - - public void setResourceTypeResolver(ResourceTypeResolver resourceTypeResolver) { - this.resourceTypeResolver = resourceTypeResolver; - } - -} \ No newline at end of file
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentIdToPathMapper.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentIdToPathMapper.java deleted file mode 100644 index 43fee73..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentIdToPathMapper.java +++ /dev/null
@@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.publication; - -/** - * Document Id to Path mapper interface - */ -public interface DocumentIdToPathMapper { - - /** - * Compute the document-path for a given publication, area and document-uuid. The file separator - * is the slash (/). - * - * @param uuid the UUID of the document - * @param language the language of the document - * - * @return the path to the document, without publication ID and area - */ - String getPath(String uuid, String language); - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentIdentifier.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentIdentifier.java deleted file mode 100644 index 38cac3e..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentIdentifier.java +++ /dev/null
@@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -/** - * Value object to identify documents. - */ -public class DocumentIdentifier { - - private String publicationId; - private String area; - private String language; - private String uuid; - - /** - * Ctor. - * @param pubId The publication ID. - * @param area The area. - * @param uuid The document UUID. - * @param language The language. - */ - public DocumentIdentifier(String pubId, String area, String uuid, String language) { - - if (uuid.startsWith("/") && uuid.split("-").length == 4) { - throw new IllegalArgumentException("The UUID [" + uuid + "] must not begin with a '/'!"); - } - if (uuid.indexOf("/") > 0) { - throw new IllegalArgumentException("The UUID [" + uuid - + "] must not contain a '/' after the first position!"); - } - - this.publicationId = pubId; - this.area = area; - this.language = language; - this.uuid = uuid; - } - - /** - * @return The UUID. - */ - public String getUUID() { - return this.uuid; - } - - /** - * @return The area. - */ - public String getArea() { - return area; - } - - /** - * @return The language. - */ - public String getLanguage() { - return language; - } - - /** - * @return The publication ID. - */ - public String getPublicationId() { - return publicationId; - } - - public boolean equals(Object obj) { - return (obj instanceof DocumentIdentifier) && obj.hashCode() == hashCode(); - } - - public int hashCode() { - return getKey().hashCode(); - } - - protected String getKey() { - return this.publicationId + ":" + this.area + ":" + this.uuid + ":" + this.language; - } - - public String toString() { - return getKey(); - } - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java deleted file mode 100644 index 282b510..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java +++ /dev/null
@@ -1,779 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ - -package org.apache.lenya.cms.publication; - -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.excalibur.source.SourceResolver; -import org.apache.lenya.cms.cocoon.source.SourceUtil; -import org.apache.lenya.cms.metadata.MetaData; -import org.apache.lenya.cms.metadata.MetaDataCache; -import org.apache.lenya.cms.metadata.MetaDataException; -import org.apache.lenya.cms.metadata.MetaDataWrapper; -import org.apache.lenya.cms.publication.util.DocumentVisitor; -import org.apache.lenya.cms.repository.ContentHolder; -import org.apache.lenya.cms.repository.Node; -import org.apache.lenya.cms.repository.NodeFactory; -import org.apache.lenya.cms.repository.RepositoryItem; -import org.apache.lenya.cms.repository.Session; -import org.apache.lenya.cms.repository.SessionHolder; -import org.apache.lenya.cms.site.Link; -import org.apache.lenya.cms.site.SiteException; -import org.apache.lenya.cms.site.SiteStructure; - -/** - * A typical CMS document. - * @version $Id$ - */ -public class DocumentImpl implements Document, RepositoryItem { - - private static final Log logger = LogFactory.getLog(DocumentImpl.class); - - private DocumentIdentifier identifier; - private org.apache.lenya.cms.publication.Session session; - private NodeFactory nodeFactory; - private ResourceTypeResolver resourceTypeResolver; - private int revision = -1; - - /** - * The meta data namespace. - */ - public static final String METADATA_NAMESPACE = "http://apache.org/lenya/metadata/document/1.0"; - - /** - * The name of the resource type attribute. A resource has a resource type; this information can - * be used e.g. for different rendering of different types. - */ - protected static final String METADATA_RESOURCE_TYPE = "resourceType"; - - /** - * The name of the mime type attribute. - */ - protected static final String METADATA_MIME_TYPE = "mimeType"; - - /** - * The name of the content type attribute. Any content managed by Lenya has a type; this - * information can be used e.g. to provide an appropriate management interface. - */ - protected static final String METADATA_CONTENT_TYPE = "contentType"; - - /** - * The number of seconds from the request that a document can be cached before it expires - */ - protected static final String METADATA_EXPIRES = "expires"; - - /** - * The extension to use for the document source. - */ - protected static final String METADATA_EXTENSION = "extension"; - - /** - * Creates a new instance of DefaultDocument. - * @param session The session the document belongs to. - * @param identifier The identifier. - * @param revision The revision number or -1 if the latest revision should be used. - */ - protected DocumentImpl(org.apache.lenya.cms.publication.Session session, - DocumentIdentifier identifier, int revision) { - - if (logger.isDebugEnabled()) { - logger.debug("DefaultDocument() creating new instance with id [" + identifier.getUUID() - + "], language [" + identifier.getLanguage() + "]"); - } - - if (identifier.getUUID() == null) { - throw new IllegalArgumentException("The UUID must not be null!"); - } - - this.identifier = identifier; - this.session = session; - this.revision = revision; - - if (logger.isDebugEnabled()) { - logger.debug("DefaultDocument() done building instance with _id [" - + identifier.getUUID() + "], _language [" + identifier.getLanguage() + "]"); - } - } - - /** - * @see org.apache.lenya.cms.publication.Document#getExpires() - */ - public Date getExpires() throws DocumentException { - Date expires = null; - long secs = 0; - - MetaData metaData = null; - String expiresMeta = null; - try { - metaData = this.getMetaData(METADATA_NAMESPACE); - expiresMeta = metaData.getFirstValue("expires"); - } catch (MetaDataException e) { - throw new DocumentException(e); - } - if (expiresMeta != null) { - secs = Long.parseLong(expiresMeta); - } else { - secs = -1; - } - - if (secs != -1) { - Date date = new Date(); - date.setTime(date.getTime() + secs * 1000l); - expires = date; - } else { - expires = this.getResourceType().getExpires(); - } - - return expires; - } - - /** - * @see org.apache.lenya.cms.publication.Document#getName() - */ - public String getName() { - try { - return getLink().getNode().getName(); - } catch (DocumentException e) { - throw new RuntimeException(e); - } - } - - private Publication publication; - - /** - * @see org.apache.lenya.cms.publication.Document#getPublication() - */ - public Publication getPublication() { - if (this.publication == null) { - this.publication = getSession().getPublication(getIdentifier().getPublicationId()); - } - return this.publication; - } - - /** - * @see org.apache.lenya.cms.publication.Document#getLastModified() - */ - public long getLastModified() throws DocumentException { - try { - return getRepositoryNode().getLastModified(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new DocumentException(e); - } - } - - public String getLanguage() { - return this.identifier.getLanguage(); - } - - public String[] getLanguages() { - - List documentLanguages = new ArrayList(); - String[] allLanguages = getPublication().getLanguages(); - - if (logger.isDebugEnabled()) { - logger.debug("Number of languages of this publication: " + allLanguages.length); - } - - for (int i = 0; i < allLanguages.length; i++) { - if (existsTranslation(allLanguages[i])) { - documentLanguages.add(allLanguages[i]); - } - } - - return (String[]) documentLanguages.toArray(new String[documentLanguages.size()]); - } - - public String getArea() { - return this.identifier.getArea(); - } - - private String extension = null; - private String defaultExtension = "html"; - - /** - * @see org.apache.lenya.cms.publication.Document#getExtension() - */ - public String getExtension() { - if (extension == null) { - String sourceExtension = getSourceExtension(); - if (sourceExtension.equals("xml") || sourceExtension.equals("")) { - logger.info("Default extension will be used: " + defaultExtension); - return defaultExtension; - } else { - return sourceExtension; - } - - } - return this.extension; - } - - /** - * @see org.apache.lenya.cms.publication.Document#getUUID() - */ - public String getUUID() { - return getIdentifier().getUUID(); - } - - private String defaultSourceExtension = "xml"; - - /** - * @see org.apache.lenya.cms.publication.Document#getSourceExtension() - */ - public String getSourceExtension() { - String sourceExtension; - try { - sourceExtension = getMetaData(METADATA_NAMESPACE).getFirstValue(METADATA_EXTENSION); - } catch (Exception e) { - throw new RuntimeException(e); - } - if (sourceExtension == null) { - logger.warn("No source extension for document [" + this + "]. The extension \"" - + defaultSourceExtension + "\" will be used as default!"); - sourceExtension = defaultSourceExtension; - } - return sourceExtension; - } - - /** - * Sets the extension of the file in the URL. - * @param _extension A string. - */ - protected void setExtension(String _extension) { - Validate.notNull(_extension); - Validate.isTrue(!_extension.startsWith("."), "Extension must start with a dot"); - checkWritability(); - this.extension = _extension; - } - - public boolean exists() throws ResourceNotFoundException { - try { - return getRepositoryNode().exists(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new ResourceNotFoundException(e); - } - } - - public boolean existsInAnyLanguage() throws ResourceNotFoundException { - String[] languages = getLanguages(); - - if (languages.length > 0) { - if (logger.isDebugEnabled()) { - logger.debug("Document (" + this + ") exists in at least one language: " - + languages.length); - } - String[] allLanguages = getPublication().getLanguages(); - if (languages.length == allLanguages.length) - // TODO: This is not entirely true, because the publication - // could assume the - // languages EN and DE, but the document could exist for the - // languages DE and FR! - if (logger.isDebugEnabled()) { - logger.debug("Document (" + this - + ") exists even in all languages of this publication"); - } - return true; - } else { - if (logger.isDebugEnabled()) { - logger.debug("Document (" + this + ") does NOT exist in any language"); - } - return false; - } - - } - - public DocumentIdentifier getIdentifier() { - return this.identifier; - } - - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object object) { - if (getClass().isInstance(object)) { - DocumentImpl document = (DocumentImpl) object; - return document.getIdentifier().equals(getIdentifier()); - } - return false; - } - - /** - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - - String key = getPublication().getId() + ":" + getPublication().getPubBaseUri() + ":" - + getArea() + ":" + getUUID() + ":" + getLanguage(); - - return key.hashCode(); - } - - /** - * @see java.lang.Object#toString() - */ - public String toString() { - return getIdentifier().toString(); - } - - /** - * @see org.apache.lenya.cms.publication.Document#getCanonicalWebappURL() - */ - public String getCanonicalWebappURL() { - return "/" + getPublication().getId() + "/" + getArea() + getCanonicalDocumentURL(); - } - - /** - * @see org.apache.lenya.cms.publication.Document#getCanonicalDocumentURL() - */ - public String getCanonicalDocumentURL() { - try { - DocumentBuilder builder = getPublication().getDocumentBuilder(); - String webappUrl = builder.buildCanonicalUrl(getSession(), getLocator()); - String prefix = "/" + getPublication().getId() + "/" + getArea(); - return webappUrl.substring(prefix.length()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public org.apache.lenya.cms.publication.Session getSession() { - return this.session; - } - - public void accept(DocumentVisitor visitor) throws Exception { - visitor.visitDocument(this); - } - - /** - * @see org.apache.lenya.cms.publication.Document#delete() - */ - public void delete() throws DocumentException { - if (hasLink()) { - throw new DocumentException("Can't delete document [" + this - + "], it's still referenced in the site structure."); - } - try { - getRepositoryNode().delete(); - } catch (Exception e) { - throw new DocumentException(e); - } - } - - protected static final String IDENTIFIABLE_TYPE = "document"; - - private ResourceType resourceType; - private MetaDataCache metaDataCache; - private SourceResolver resolver; - - /** - * Convenience method to read the document's resource type from the meta-data. - * @see Document#getResourceType() - */ - public ResourceType getResourceType() throws DocumentException { - if (this.resourceType == null) { - String name; - try { - name = getMetaData(METADATA_NAMESPACE).getFirstValue(METADATA_RESOURCE_TYPE); - } catch (MetaDataException e) { - throw new DocumentException(e); - } - if (name == null) { - throw new DocumentException("No resource type defined for document [" + this + "]!"); - } - this.resourceType = this.resourceTypeResolver.getResourceType(name); - } - return this.resourceType; - } - - public MetaData getMetaData(String namespaceUri) throws MetaDataException { - MetaData meta; - try { - meta = new MetaDataWrapper(getContentHolder().getMetaData(namespaceUri)); - } catch (org.apache.lenya.cms.repository.metadata.MetaDataException e) { - throw new MetaDataException(e); - } - if (getRepositorySession().isModifiable()) { - return meta; - } else { - String cacheKey = getPublication().getId() + ":" + getArea() + ":" + getUUID() + ":" - + getLanguage(); - return getMetaDataCache().getMetaData(cacheKey, meta, namespaceUri); - } - } - - protected MetaDataCache getMetaDataCache() { - return this.metaDataCache; - } - - public String[] getMetaDataNamespaceUris() throws MetaDataException { - try { - return getContentHolder().getMetaDataNamespaceUris(); - } catch (org.apache.lenya.cms.repository.metadata.MetaDataException e) { - throw new MetaDataException(e); - } - } - - public String getMimeType() throws DocumentException { - try { - String mimeType = getMetaData(METADATA_NAMESPACE).getFirstValue(METADATA_MIME_TYPE); - if (mimeType == null) { - mimeType = ""; - } - return mimeType; - } catch (MetaDataException e) { - throw new DocumentException(e); - } - } - - public long getContentLength() { - try { - return getContentHolder().getContentLength(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RuntimeException(e); - } - } - - public void setMimeType(String mimeType) { - checkWritability(); - try { - getMetaData(METADATA_NAMESPACE).setValue(METADATA_MIME_TYPE, mimeType); - } catch (MetaDataException e) { - throw new RuntimeException(e); - } - } - - public DocumentLocator getLocator() { - SiteStructure structure = area().getSite(); - if (!structure.containsByUuid(getUUID(), getLanguage())) { - throw new RuntimeException("The document [" + this - + "] is not referenced in the site structure."); - } - try { - return DocumentLocator.getLocator(getPublication().getId(), getArea(), structure - .getByUuid(getUUID(), getLanguage()).getNode().getPath(), getLanguage()); - } catch (SiteException e) { - throw new RuntimeException(e); - } - } - - public String getPath() throws DocumentException { - return getLink().getNode().getPath(); - } - - public boolean existsAreaVersion(String area) { - String sourceUri = getSourceURI(getPublication(), area, getUUID(), getLanguage()); - try { - return SourceUtil.exists(sourceUri, this.resolver); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public boolean existsTranslation(String language) { - return area().contains(getUUID(), language); - } - - public Document getAreaVersion(String area) throws ResourceNotFoundException { - return getPublication().getArea(area).getDocument(getUUID(), getLanguage()); - } - - public Document getTranslation(String language) throws ResourceNotFoundException { - return area().getDocument(getUUID(), language); - } - - private Node repositoryNode; - - public Node getRepositoryNode() { - if (this.repositoryNode == null) { - SessionHolder holder = (SessionHolder) getSession(); - this.repositoryNode = getRepositoryNode(getNodeFactory(), - holder.getRepositorySession(), getSourceURI()); - } - return this.repositoryNode; - } - - protected ContentHolder getContentHolder() { - Node node = getRepositoryNode(); - if (isRevisionSpecified()) { - try { - return node.getHistory().getRevision(revision); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RuntimeException(e); - } - } else { - return node; - } - } - - protected static Node getRepositoryNode(NodeFactory nodeFactory, Session session, - String sourceUri) { - try { - return (Node) session.getRepositoryItem(nodeFactory, sourceUri); - } catch (Exception e) { - throw new RuntimeException("Creating repository node failed: ", e); - } - } - - /** - * @see org.apache.lenya.cms.publication.Document#getSourceURI() - */ - public String getSourceURI() { - return getSourceURI(getPublication(), getArea(), getUUID(), getLanguage()); - } - - protected static String getSourceURI(Publication pub, String area, String uuid, String language) { - String path = pub.getPathMapper().getPath(uuid, language); - return pub.getContentUri(area) + "/" + path; - } - - public boolean existsVersion(String area, String language) { - String sourceUri = getSourceURI(getPublication(), area, getUUID(), language); - try { - return SourceUtil.exists(sourceUri, getSourceResolver()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public Document getVersion(String area, String language) throws ResourceNotFoundException { - return getPublication().getArea(area).getDocument(getUUID(), language); - } - - public Link getLink() throws DocumentException { - SiteStructure structure = area().getSite(); - try { - if (structure.containsByUuid(getUUID(), getLanguage())) { - return structure.getByUuid(getUUID(), getLanguage()); - } else { - throw new DocumentException("The document [" + this - + "] is not referenced in the site structure [" + structure + "]."); - } - } catch (Exception e) { - throw new DocumentException(e); - } - } - - public boolean hasLink() { - return area().getSite().containsByUuid(getUUID(), getLanguage()); - } - - public Area area() { - return getPublication().getArea(getArea()); - } - - public void setResourceType(ResourceType resourceType) { - Validate.notNull(resourceType); - checkWritability(); - try { - MetaData meta = getMetaData(DocumentImpl.METADATA_NAMESPACE); - meta.setValue(DocumentImpl.METADATA_RESOURCE_TYPE, resourceType.getName()); - } catch (MetaDataException e) { - throw new RuntimeException(e); - } - } - - public void setSourceExtension(String extension) { - Validate.notNull(extension); - Validate.isTrue(!extension.startsWith("."), "Extension must start with a dot"); - checkWritability(); - try { - MetaData meta = getMetaData(DocumentImpl.METADATA_NAMESPACE); - meta.setValue(DocumentImpl.METADATA_EXTENSION, extension); - } catch (MetaDataException e) { - throw new RuntimeException(e); - } - } - - public OutputStream getOutputStream() { - checkWritability(); - try { - return getRepositoryNode().getOutputStream(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RuntimeException(e); - } - } - - protected void checkWritability() { - if (isRevisionSpecified()) { - throw new UnsupportedOperationException(); - } - } - - protected boolean isRevisionSpecified() { - return this.revision != -1; - } - - public InputStream getInputStream() { - try { - return getRepositoryNode().getInputStream(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RuntimeException(e); - } - } - - public Session getRepositorySession() { - return ((SessionHolder) getSession()).getRepositorySession(); - } - - public int getRevisionNumber() { - if (!isRevisionSpecified()) { - throw new UnsupportedOperationException( - "This is not a particular revision of the document [" + this + "]."); - } - return this.revision; - } - - public void setMetaDataCache(MetaDataCache metaDataCache) { - this.metaDataCache = metaDataCache; - } - - public SourceResolver getSourceResolver() { - return resolver; - } - - public void setSourceResolver(SourceResolver resolver) { - this.resolver = resolver; - } - - public NodeFactory getNodeFactory() { - return nodeFactory; - } - - public void setNodeFactory(NodeFactory nodeFactory) { - this.nodeFactory = nodeFactory; - } - - public void checkin() throws RepositoryException { - try { - getRepositoryNode().checkin(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public boolean isCheckedOutBySession(String sessionId, String userId) - throws RepositoryException { - try { - return getRepositoryNode().isCheckedOutBySession(sessionId, userId); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public void checkout() throws RepositoryException { - try { - getRepositoryNode().checkout(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public String getCheckoutUserId() throws RepositoryException { - try { - return getRepositoryNode().getCheckoutUserId(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public boolean isCheckedOut() throws RepositoryException { - try { - return getRepositoryNode().isCheckedOut(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public void lock() throws RepositoryException { - try { - getRepositoryNode().lock(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public void registerDirty() throws RepositoryException { - try { - getRepositoryNode().registerDirty(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public void unlock() throws RepositoryException { - try { - getRepositoryNode().unlock(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - private History history; - - public History getHistory() { - if (this.history == null) { - this.history = new HistoryWrapper(getRepositoryNode().getHistory()); - } - return this.history; - } - - public boolean isLocked() { - // TODO Auto-generated method stub - return false; - } - - public Document getRevision(int i) { - return area().getDocument(getUUID(), getLanguage(), i); - } - - public void forceCheckIn() throws RepositoryException { - try { - getRepositoryNode().forceCheckIn(); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public void rollback(int revision) throws RepositoryException { - try { - getRepositoryNode().rollback(revision); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public void checkout(boolean checkoutRestrictedToSession) throws RepositoryException { - try { - getRepositoryNode().checkout(checkoutRestrictedToSession); - } catch (org.apache.lenya.cms.repository.RepositoryException e) { - throw new RepositoryException(e); - } - } - - public void setResourceTypeResolver(ResourceTypeResolver resourceTypeResolver) { - this.resourceTypeResolver = resourceTypeResolver; - } - -} \ No newline at end of file
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentLocator.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentLocator.java deleted file mode 100644 index c215ddf..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentLocator.java +++ /dev/null
@@ -1,210 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -import java.util.Map; -import java.util.WeakHashMap; - - -/** - * A DocumentLocator describes a document based on its path in the site structure. The actual - * document doesn't have to exist. - */ -public class DocumentLocator { - - private static Map locators = new WeakHashMap(); - - /** - * Returns a specific document locator. - * @param pubId The publication ID. - * @param area The area of the document. - * @param path The path of the document in the site structure. - * @param language The language of the document. - * @return A document locator. - */ - public static DocumentLocator getLocator(String pubId, String area, String path, String language) { - String key = DocumentLocator.getKey(pubId, area, path, language); - DocumentLocator locator = (DocumentLocator) locators.get(key); - if (locator == null) { - locator = new DocumentLocator(pubId, area, path, language); - locators.put(key, locator); - } - return locator; - } - - protected static final String getKey(String pubId, String area, String path, String language) { - return pubId + ":" + area + ":" + path + ":" + language; - } - - private String pubId; - private String area; - private String path; - private String language; - - protected DocumentLocator(String pubId, String area, String path, String language) { - this.path = path; - this.pubId = pubId; - this.area = area; - this.language = language; - } - - /** - * @return The area of the document. - */ - public String getArea() { - return area; - } - - /** - * @return The language of the document. - */ - public String getLanguage() { - return language; - } - - /** - * @return The path of the document in the site structure. - */ - public String getPath() { - return path; - } - - /** - * @return The publication ID. - */ - public String getPublicationId() { - return pubId; - } - - /** - * Returns a locator with the same publication ID, area, and language, but a different path in - * the site structure. - * @param path The path. - * @return A document locator. - */ - public DocumentLocator getPathVersion(String path) { - return DocumentLocator.getLocator(getPublicationId(), getArea(), path, getLanguage()); - } - - /** - * Returns a descendant of this locator. - * @param relativePath The relative path which must not begin with a slash and must not be - * empty. - * @return A document locator. - */ - public DocumentLocator getDescendant(String relativePath) { - if (relativePath.length() == 0) { - throw new IllegalArgumentException("The relative path must not be empty!"); - } - if (relativePath.startsWith("/")) { - throw new IllegalArgumentException("The relative path must not start with a slash!"); - } - return getPathVersion(getPath() + "/" + relativePath); - } - - /** - * Returns a child of this locator. - * @param step The relative path to the child, it must not contain a slash. - * @return A document locator. - */ - public DocumentLocator getChild(String step) { - if (step.indexOf("/") > -1) { - throw new IllegalArgumentException("The step [" + step + "] must not contain a slash!"); - } - return getDescendant(step); - } - - /** - * Returns the parent of this locator. - * @return A document locator or <code>null</code> if this is the root locator. - */ - public DocumentLocator getParent() { - int lastSlashIndex = getPath().lastIndexOf("/"); - if (lastSlashIndex > -1) { - String parentPath = getPath().substring(0, lastSlashIndex); - return getPathVersion(parentPath); - } else { - return null; - } - } - - /** - * Returns the parent of this locator. - * @param defaultPath The path of the locator to return if this is the root locator. - * @return A document locator. - */ - public DocumentLocator getParent(String defaultPath) { - DocumentLocator parent = getParent(); - if (parent != null) { - return parent; - } else { - return getPathVersion(defaultPath); - } - } - - /** - * Returns a locator with the same publication ID, area, and path, but with a different - * language. - * @param language The language. - * @return A document locator. - */ - public DocumentLocator getLanguageVersion(String language) { - return DocumentLocator.getLocator(getPublicationId(), getArea(), getPath(), language); - } - - protected String getKey() { - return DocumentLocator.getKey(getPublicationId(), getArea(), getPath(), getLanguage()); - } - - public boolean equals(Object obj) { - if (!(obj instanceof DocumentLocator)) { - return false; - } - DocumentLocator locator = (DocumentLocator) obj; - return locator.getKey().equals(getKey()); - } - - public int hashCode() { - return getKey().hashCode(); - } - - public String toString() { - return getKey(); - } - - /** - * Returns a locator with the same publication ID, path, and language, but with a different - * area. - * @param area The area. - * @return A document locator. - */ - public DocumentLocator getAreaVersion(String area) { - return DocumentLocator.getLocator(getPublicationId(), area, getPath(), getLanguage()); - } - - public Document getDocument(Session session) throws ResourceNotFoundException { - try { - Publication pub = session.getPublication(getPublicationId()); - return pub.getArea(getArea()).getSite().getNode(getPath()).getLink(getLanguage()) - .getDocument(); - } catch (PublicationException e) { - throw new ResourceNotFoundException(e); - } - } - -}
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java deleted file mode 100644 index 77fab08..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java +++ /dev/null
@@ -1,252 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -import org.apache.lenya.cms.publication.util.DocumentSet; - -/** - * Helper to manage documents. It takes care of attachments etc. - * - * @version $Id$ - */ -public interface DocumentManager { - - /** - * The Avalon component role. - */ - String ROLE = DocumentManager.class.getName(); - - /** - * Copies a document from one location to another location. - * @param sourceDocument The document to copy. - * @param destination The destination document. - * @throws PublicationException if a document which destinationDocument depends on does not - * exist. - */ - void copy(Document sourceDocument, DocumentLocator destination) throws PublicationException; - - /** - * Copies a document to another area. - * @param sourceDocument The document to copy. - * @param destinationArea The destination area. - * @throws PublicationException if a document which the destination document depends on does not - * exist. - */ - void copyToArea(Document sourceDocument, String destinationArea) throws PublicationException; - - /** - * Copies a document set to another area. - * @param documentSet The document set to copy. - * @param destinationArea The destination area. - * @throws PublicationException if a document which one of the destination documents depends on - * does not exist. - */ - void copyToArea(DocumentSet documentSet, String destinationArea) throws PublicationException; - - /** - * Creates a new document in the same publication the <code>parentDocument</code> belongs to - * with the given parameters: - * - * @param sourceDocument The document to initialize the contents and meta data from. - * @param area The target area. - * @param path The target path. - * @param language The target language. - * @param extension The extension to use for the document source. - * @param navigationTitle navigation title - * @param visibleInNav determines the visibility of a node in the navigation - * @return The added document. - * - * @throws DocumentBuildException if the document can not be created - * @throws PublicationException if the document is already contained. - */ - Document add(Document sourceDocument, String area, String path, String language, - String extension, String navigationTitle, boolean visibleInNav) - throws DocumentBuildException, PublicationException; - - /** - * Creates a new document with the given parameters: - * @param resourceType the document type (aka resource type) of the new document - * @param contentSourceUri The URI to read the content from. - * @param pub The publication. - * @param area The area. - * @param path The path. - * @param language The language. - * @param extension The extension to use for the document source, without the leading dot. - * @param navigationTitle The navigation title. - * @param visibleInNav The navigation visibility. - * @return The added document. - * - * @throws DocumentBuildException if the document can not be created - * @throws PublicationException if the document is already contained. - */ - Document add(ResourceType resourceType, String contentSourceUri, - Publication pub, String area, String path, String language, String extension, - String navigationTitle, boolean visibleInNav) throws DocumentBuildException, - PublicationException; - - /** - * Creates a new document without adding it to the site structure. - * @param resourceType the document type (aka resource type) of the new document - * @param contentSourceUri The URI to read the content from. - * @param pub The publication. - * @param area The area. - * @param language The language. - * @param extension The extension to use for the document source, without the leading dot. - * @return The added document. - * - * @throws DocumentBuildException if the document can not be created - * @throws PublicationException if the document is already contained. - */ - Document add(ResourceType resourceType, String contentSourceUri, - Publication pub, String area, String language, String extension) - throws DocumentBuildException, PublicationException; - - /** - * Adds a new version of a document with a different language and / or in a different area. - * - * @param sourceDocument The document to initialize the contents and meta data from. - * @param area The area. - * @param language The language of the new document. - * @return The added document. - * - * @throws DocumentBuildException if the document can not be created - * @throws PublicationException if the document is already contained. - */ - Document addVersion(Document sourceDocument, String area, String language) - throws DocumentBuildException, PublicationException; - - /** - * Adds a new version of a document with a different language and / or in a different area. - * - * @param sourceDocument The document to initialize the contents and meta data from. - * @param area The area. - * @param language The language of the new document. - * @param addToSite If the new version should be added to the site structure. - * @return The added document. - * - * @throws DocumentBuildException if the document can not be created - * @throws PublicationException if the document is already contained. - */ - Document addVersion(Document sourceDocument, String area, String language, boolean addToSite) - throws DocumentBuildException, PublicationException; - - /** - * Deletes a document from the content repository and from the site structure. - * @param document The document to delete. - * @throws PublicationException when something went wrong. - */ - void delete(Document document) throws PublicationException; - - /** - * Moves a document from one location to another. - * @param sourceDocument The source document. - * @param destination The destination document. - * @throws PublicationException if a document which the destination document depends on does not - * exist. - */ - void move(Document sourceDocument, DocumentLocator destination) throws PublicationException; - - /** - * Moves a document set from one location to another. A source is moved to the destination of - * the same position in the set. - * @param sources The source documents. - * @param destinations The destination documents. - * @throws PublicationException if a document which the destination document depends on does not - * exist. - */ - void move(DocumentSet sources, DocumentSet destinations) throws PublicationException; - - /** - * Copies a document set from one location to another. A source is copied to the destination of - * the same position in the set. - * @param sources The source documents. - * @param destinations The destination documents. - * @throws PublicationException if a document which the destination document depends on does not - * exist. - */ - void copy(DocumentSet sources, DocumentSet destinations) throws PublicationException; - - /** - * Moves a document to another location, incl. all requiring documents. If a sitetree is used, - * this means that the whole subtree is moved. - * @param sourceArea The source area. - * @param sourcePath The source path. - * @param targetArea The target area. - * @param targetPath The target path. - * @throws PublicationException if an error occurs. - */ - void moveAll(Area sourceArea, String sourcePath, Area targetArea, String targetPath) - throws PublicationException; - - /** - * Moves all language versions of a document to another location. - * @param sourceArea The source area. - * @param sourcePath The source path. - * @param targetArea The target area. - * @param targetPath The target path. - * @throws PublicationException if the documents could not be moved. - */ - void moveAllLanguageVersions(Area sourceArea, String sourcePath, Area targetArea, - String targetPath) throws PublicationException; - - /** - * Copies a document to another location, incl. all requiring documents. If a sitetree is used, - * this means that the whole subtree is copied. - * @param sourceArea The source area. - * @param sourcePath The source path. - * @param targetArea The target area. - * @param targetPath The target path. - * @throws PublicationException if an error occurs. - */ - void copyAll(Area sourceArea, String sourcePath, Area targetArea, String targetPath) - throws PublicationException; - - /** - * Copies all language versions of a document to another location. - * @param sourceArea The source area. - * @param sourcePath The source path. - * @param targetArea The target area. - * @param targetPath The target path. - * @throws PublicationException if the documents could not be copied. - */ - void copyAllLanguageVersions(Area sourceArea, String sourcePath, Area targetArea, - String targetPath) throws PublicationException; - - /** - * Deletes a document, incl. all requiring documents. If a sitetree is used, this means that the - * whole subtree is deleted. - * @param document The document. - * @throws PublicationException if an error occurs. - */ - void deleteAll(Document document) throws PublicationException; - - /** - * Deletes all language versions of a document. - * @param document The document. - * @throws PublicationException if the documents could not be copied. - */ - void deleteAllLanguageVersions(Document document) throws PublicationException; - - /** - * Deletes a set of documents. - * @param documents The documents. - * @throws PublicationException if an error occurs. - */ - void delete(DocumentSet documents) throws PublicationException; - -} \ No newline at end of file
diff --git a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java b/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java deleted file mode 100644 index f49d155..0000000 --- a/org.apache.lenya.core.publication/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java +++ /dev/null
@@ -1,862 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * - */ -package org.apache.lenya.cms.publication; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.cocoon.spring.configurator.WebAppContextUtils; -import org.apache.cocoon.util.AbstractLogEnabled; -import org.apache.commons.io.IOUtils; -import org.apache.commons.io.output.ByteArrayOutputStream; -import org.apache.excalibur.source.Source; -import org.apache.excalibur.source.SourceResolver; -import org.apache.lenya.cms.metadata.MetaData; -import org.apache.lenya.cms.metadata.MetaDataException; -import org.apache.lenya.cms.publication.util.DocumentSet; -import org.apache.lenya.cms.publication.util.DocumentVisitor; -import org.apache.lenya.cms.repository.Node; -import org.apache.lenya.cms.repository.NodeFactory; -import org.apache.lenya.cms.repository.UUIDGenerator; -import org.apache.lenya.cms.site.Link; -import org.apache.lenya.cms.site.NodeIterator; -import org.apache.lenya.cms.site.NodeSet; -import org.apache.lenya.cms.site.SiteException; -import org.apache.lenya.cms.site.SiteManager; -import org.apache.lenya.cms.site.SiteNode; -import org.apache.lenya.cms.site.SiteStructure; -import org.apache.lenya.cms.site.SiteUtil; - -/** - * DocumentManager implementation. - * - * @version $Id$ - */ -public class DocumentManagerImpl extends AbstractLogEnabled implements DocumentManager { - - private SourceResolver sourceResolver; - private UUIDGenerator uuidGenerator; - private NodeFactory nodeFactory; - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#add(org.apache.lenya.cms.publication.Document, - * java.lang.String, java.lang.String, java.lang.String, java.lang.String, - * java.lang.String, boolean) - */ - public Document add(Document sourceDocument, String area, String path, String language, - String extension, String navigationTitle, boolean visibleInNav) - throws DocumentBuildException, PublicationException { - - Document document = add(sourceDocument.getResourceType(), sourceDocument.getInputStream(), - sourceDocument.getPublication(), area, path, language, extension, navigationTitle, - visibleInNav, sourceDocument.getMimeType()); - - copyMetaData(sourceDocument, document); - return document; - } - - /** - * Copies meta data from one document to another. If the destination document is a different - * area version, the meta data are duplicated (i.e., onCopy = delete is neglected). - * @param source - * @param destination - * @throws PublicationException - */ - protected void copyMetaData(Document source, Document destination) throws PublicationException { - - boolean duplicate = source.getUUID().equals(destination.getUUID()) - && source.getLanguage().equals(destination.getLanguage()) - && !source.getArea().equals(destination.getArea()); - - try { - String[] uris = source.getMetaDataNamespaceUris(); - for (int i = 0; i < uris.length; i++) { - if (duplicate) { - destination.getMetaData(uris[i]).forcedReplaceBy(source.getMetaData(uris[i])); - } else { - destination.getMetaData(uris[i]).replaceBy(source.getMetaData(uris[i])); - } - } - } catch (MetaDataException e) { - throw new PublicationException(e); - } - } - - public Document add(ResourceType documentType, String initialContentsURI, Publication pub, - String area, String path, String language, String extension, String navigationTitle, - boolean visibleInNav) throws DocumentBuildException, DocumentException, - PublicationException { - - Area areaObj = pub.getArea(area); - SiteStructure site = areaObj.getSite(); - if (site.contains(path) && site.getNode(path).hasLink(language)) { - throw new DocumentException("The link [" + path + ":" + language - + "] is already contained in site [" + site + "]"); - } - - Document document = add(documentType, initialContentsURI, pub, area, language, extension); - - addToSiteManager(path, document, navigationTitle, visibleInNav); - return document; - } - - protected Document add(ResourceType documentType, InputStream initialContentsStream, - Publication pub, String area, String path, String language, String extension, - String navigationTitle, boolean visibleInNav, String mimeType) - throws DocumentBuildException, DocumentException, PublicationException { - - Area areaObj = pub.getArea(area); - SiteStructure site = areaObj.getSite(); - if (site.contains(path) && site.getNode(path).hasLink(language)) { - throw new DocumentException("The link [" + path + ":" + language - + "] is already contained in site [" + site + "]"); - } - - Document document = add(documentType, initialContentsStream, pub, area, language, - extension, mimeType); - - addToSiteManager(path, document, navigationTitle, visibleInNav); - return document; - } - - public Document add(ResourceType documentType, String initialContentsURI, Publication pub, - String area, String language, String extension) throws DocumentBuildException, - DocumentException, PublicationException { - - String uuid = getUuidGenerator().nextUUID(); - Source source = null; - try { - source = getSourceResolver().resolveURI(initialContentsURI); - return add(documentType, uuid, source.getInputStream(), pub, area, language, extension, - getMimeType(source)); - } catch (Exception e) { - throw new PublicationException(e); - } finally { - if (source != null) { - getSourceResolver().release(source); - } - } - } - - protected String getMimeType(Source source) { - String mimeType = source.getMimeType(); - if (mimeType == null) { - mimeType = ""; - } - return mimeType; - } - - protected Document add(ResourceType documentType, InputStream initialContentsStream, - Publication pub, String area, String language, String extension, String mimeType) - throws DocumentBuildException, DocumentException, PublicationException { - - String uuid = getUuidGenerator().nextUUID(); - return add(documentType, uuid, initialContentsStream, pub, area, language, extension, - mimeType); - } - - protected Document add(ResourceType documentType, String uuid, InputStream stream, - Publication pub, String area, String language, String extension, String mimeType) - throws DocumentBuildException { - try { - - Area areaObj = pub.getArea(area); - if (areaObj.contains(uuid, language)) { - throw new DocumentBuildException("The document [" + pub.getId() + ":" + area + ":" - + uuid + ":" + language + "] already exists!"); - } - - Document document = areaObj.getDocument(uuid, language); - document.lock(); - - document.setResourceType(documentType); - document.setSourceExtension(extension); - document.setMimeType(mimeType); - - // Write Lenya-internal meta-data - MetaData lenyaMetaData = document.getMetaData(DocumentImpl.METADATA_NAMESPACE); - lenyaMetaData.setValue(DocumentImpl.METADATA_CONTENT_TYPE, "xml"); - - if (getLogger().isDebugEnabled()) { - getLogger().debug("Create"); - getLogger().debug(" document: [" + document + "]"); - } - - create(stream, document); - return document; - } catch (Exception e) { - throw new DocumentBuildException("call to creator for new document failed", e); - } - } - - protected void create(InputStream stream, Document document) throws Exception { - - // Read initial contents as DOM - if (getLogger().isDebugEnabled()) - getLogger().debug( - "DefaultCreator::create(), ready to read initial contents from URI [" + stream - + "]"); - - copy(getSourceResolver(), stream, document); - } - - protected void copy(SourceResolver resolver, InputStream sourceInputStream, Document destination) - throws IOException { - - boolean useBuffer = true; - - OutputStream destOutputStream = null; - try { - destOutputStream = destination.getOutputStream(); - - if (useBuffer) { - final ByteArrayOutputStream sourceBos = new ByteArrayOutputStream(); - IOUtils.copy(sourceInputStream, sourceBos); - IOUtils.write(sourceBos.toByteArray(), destOutputStream); - } else { - IOUtils.copy(sourceInputStream, destOutputStream); - } - } finally { - if (destOutputStream != null) { - destOutputStream.flush(); - destOutputStream.close(); - } - if (sourceInputStream != null) { - sourceInputStream.close(); - } - } - } - - protected void addToSiteManager(String path, Document document, String navigationTitle, - boolean visibleInNav) throws PublicationException { - addToSiteManager(path, document, navigationTitle, visibleInNav, null); - } - - protected void addToSiteManager(String path, Document document, String navigationTitle, - boolean visibleInNav, String followingSiblingPath) throws PublicationException { - SiteStructure site = document.area().getSite(); - if (!site.contains(path) && followingSiblingPath != null) { - site.add(path, followingSiblingPath); - } - site.add(path, document); - document.getLink().setLabel(navigationTitle); - document.getLink().getNode().setVisible(visibleInNav); - } - - /** - * Template method to copy a document. Override {@link #copyDocumentSource(Document, Document)} - * to implement access to a custom repository. - * @see org.apache.lenya.cms.publication.DocumentManager#copy(org.apache.lenya.cms.publication.Document, - * org.apache.lenya.cms.publication.DocumentLocator) - */ - public void copy(Document sourceDoc, DocumentLocator destination) throws PublicationException { - - if (!destination.getPublicationId().equals(sourceDoc.getPublication().getId())) { - throw new PublicationException("Can't copy to a different publication!"); - } - - SiteStructure destSite = sourceDoc.getPublication().getArea(destination.getArea()) - .getSite(); - String destPath = destination.getPath(); - if (destSite.contains(destination.getPath(), destination.getLanguage())) { - Document destDoc = destSite.getNode(destPath).getLink(destination.getLanguage()) - .getDocument(); - copyDocumentSource(sourceDoc, destDoc); - copyInSiteStructure(sourceDoc, destDoc, destPath); - } else { - add(sourceDoc, destination.getArea(), destPath, destination.getLanguage(), sourceDoc - .getExtension(), sourceDoc.getLink().getLabel(), sourceDoc.getLink().getNode() - .isVisible()); - } - - } - - protected void copyInSiteStructure(Document sourceDoc, Document destDoc, String destPath) - throws PublicationException, DocumentException, SiteException { - - String destArea = destDoc.getArea(); - - SiteStructure destSite = sourceDoc.getPublication().getArea(destArea).getSite(); - - if (sourceDoc.hasLink()) { - if (destDoc.hasLink()) { - Link srcLink = sourceDoc.getLink(); - Link destLink = destDoc.getLink(); - destLink.setLabel(srcLink.getLabel()); - destLink.getNode().setVisible(srcLink.getNode().isVisible()); - } else { - String label = sourceDoc.getLink().getLabel(); - boolean visible = sourceDoc.getLink().getNode().isVisible(); - if (destSite.contains(sourceDoc.getLink().getNode().getPath())) { - addToSiteManager(destPath, destDoc, label, visible); - } else { - - String followingSiblingPath = null; - - if (sourceDoc.getPath().equals(destPath)) { - SiteStructure sourceSite = sourceDoc.area().getSite(); - - SiteNode[] sourceSiblings; - SiteNode sourceNode = sourceDoc.getLink().getNode(); - if (sourceNode.isTopLevel()) { - sourceSiblings = sourceSite.getTopLevelNodes(); - } else if (sourceNode.getParent() != null) { - sourceSiblings = sourceNode.getParent().getChildren(); - } else { - sourceSiblings = new SiteNode[1]; - sourceSiblings[0] = sourceNode; - } - - final int sourcePos = Arrays.asList(sourceSiblings).indexOf(sourceNode); - - int pos = sourcePos; - while (followingSiblingPath == null && pos < sourceSiblings.length) { - String siblingPath = sourceSiblings[pos].getPath(); - if (destSite.contains(siblingPath)) { - followingSiblingPath = siblingPath; - } - pos++; - } - } - - if (followingSiblingPath == null) { - addToSiteManager(destPath, destDoc, label, visible); - } else { - addToSiteManager(destPath, destDoc, label, visible, followingSiblingPath); - } - } - } - } - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#delete(org.apache.lenya.cms.publication.Document) - */ - public void delete(Document document) throws PublicationException { - if (!document.exists()) { - throw new PublicationException("Document [" + document + "] does not exist!"); - } - - if (document.hasLink()) { - document.getLink().delete(); - } - - document.delete(); - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#move(org.apache.lenya.cms.publication.Document, - * org.apache.lenya.cms.publication.DocumentLocator) - */ - public void move(Document sourceDocument, DocumentLocator destination) - throws PublicationException { - - if (!destination.getArea().equals(sourceDocument.getArea())) { - throw new PublicationException("Can't move to a different area!"); - } - - SiteStructure site = sourceDocument.area().getSite(); - if (site.contains(destination.getPath())) { - throw new PublicationException("The path [" + destination - + "] is already contained in this publication!"); - } - - String label = sourceDocument.getLink().getLabel(); - boolean visible = sourceDocument.getLink().getNode().isVisible(); - sourceDocument.getLink().delete(); - - site.add(destination.getPath(), sourceDocument); - sourceDocument.getLink().setLabel(label); - sourceDocument.getLink().getNode().setVisible(visible); - - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#copyToArea(org.apache.lenya.cms.publication.Document, - * java.lang.String) - */ - public void copyToArea(Document sourceDoc, String destinationArea) throws PublicationException { - String language = sourceDoc.getLanguage(); - copyToVersion(sourceDoc, destinationArea, language); - } - - protected void copyToVersion(Document sourceDoc, String destinationArea, String language) - throws DocumentException, DocumentBuildException, PublicationException, SiteException { - - Document destDoc; - if (sourceDoc.existsAreaVersion(destinationArea)) { - destDoc = sourceDoc.getAreaVersion(destinationArea); - copyDocumentSource(sourceDoc, destDoc); - } else { - destDoc = addVersion(sourceDoc, destinationArea, language); - } - - if (sourceDoc.hasLink()) { - copyInSiteStructure(sourceDoc, destDoc, sourceDoc.getPath()); - } - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#copyToArea(org.apache.lenya.cms.publication.util.DocumentSet, - * java.lang.String) - */ - public void copyToArea(DocumentSet documentSet, String destinationArea) - throws PublicationException { - Document[] documents = documentSet.getDocuments(); - for (int i = 0; i < documents.length; i++) { - copyToArea(documents[i], destinationArea); - } - } - - public void moveAll(Area sourceArea, String sourcePath, Area targetArea, String targetPath) - throws PublicationException { - SiteStructure site = sourceArea.getSite(); - - SiteNode root = site.getNode(sourcePath); - List subsite = preOrder(root); - - for (Iterator n = subsite.iterator(); n.hasNext();) { - SiteNode node = (SiteNode) n.next(); - String subPath = node.getPath().substring(sourcePath.length()); - targetArea.getSite().add(targetPath + subPath); - } - Collections.reverse(subsite); - for (Iterator n = subsite.iterator(); n.hasNext();) { - SiteNode node = (SiteNode) n.next(); - String subPath = node.getPath().substring(sourcePath.length()); - moveAllLanguageVersions(sourceArea, sourcePath + subPath, targetArea, targetPath - + subPath); - } - } - - protected List preOrder(SiteNode node) { - List list = new ArrayList(); - list.add(node); - SiteNode[] children = node.getChildren(); - for (int i = 0; i < children.length; i++) { - list.addAll(preOrder(children[i])); - } - return list; - } - - public void moveAllLanguageVersions(Area sourceArea, String sourcePath, Area targetArea, - String targetPath) throws PublicationException { - - SiteNode sourceNode = sourceArea.getSite().getNode(sourcePath); - String[] languages = sourceNode.getLanguages(); - for (int i = 0; i < languages.length; i++) { - Link sourceLink = sourceNode.getLink(languages[i]); - String label = sourceLink.getLabel(); - Document sourceDoc = sourceLink.getDocument(); - sourceLink.delete(); - - Document targetDoc; - if (sourceArea.getName().equals(targetArea.getName())) { - targetDoc = sourceDoc; - } else { - targetDoc = addVersion(sourceDoc, targetArea.getName(), sourceDoc.getLanguage()); - copyRevisions(sourceDoc, targetDoc); - sourceDoc.delete(); - } - - Link link = targetArea.getSite().add(targetPath, targetDoc); - link.setLabel(label); - assert targetDoc.getLink().getLabel().equals(label); - } - SiteNode targetNode = targetArea.getSite().getNode(targetPath); - targetNode.setVisible(sourceNode.isVisible()); - } - - protected void copyRevisions(Document sourceDoc, Document targetDoc) - throws PublicationException { - try { - Node targetNode = ((DocumentImpl) targetDoc).getRepositoryNode(); - targetNode.copyRevisionsFrom(((DocumentImpl) sourceDoc).getRepositoryNode()); - } catch (Exception e) { - throw new PublicationException(e); - } - } - - public void copyAll(Area sourceArea, String sourcePath, Area targetArea, String targetPath) - throws PublicationException { - - SiteStructure site = sourceArea.getSite(); - SiteNode root = site.getNode(sourcePath); - - List preOrder = preOrder(root); - for (Iterator i = preOrder.iterator(); i.hasNext();) { - SiteNode node = (SiteNode) i.next(); - String nodeSourcePath = node.getPath(); - String nodeTargetPath = targetPath + nodeSourcePath.substring(sourcePath.length()); - copyAllLanguageVersions(sourceArea, nodeSourcePath, targetArea, nodeTargetPath); - } - } - - public void copyAllLanguageVersions(Area sourceArea, String sourcePath, Area targetArea, - String targetPath) throws PublicationException { - Publication pub = sourceArea.getPublication(); - - SiteNode sourceNode = sourceArea.getSite().getNode(sourcePath); - String[] languages = sourceNode.getLanguages(); - - Document targetDoc = null; - - for (int i = 0; i < languages.length; i++) { - Document sourceVersion = sourceNode.getLink(languages[i]).getDocument(); - DocumentLocator targetLocator = DocumentLocator.getLocator(pub.getId(), targetArea - .getName(), targetPath, languages[i]); - if (targetDoc == null) { - copy(sourceVersion, targetLocator.getLanguageVersion(languages[i])); - targetDoc = targetArea.getSite().getNode(targetPath).getLink(languages[i]) - .getDocument(); - } else { - targetDoc = addVersion(targetDoc, targetLocator.getArea(), languages[i]); - addToSiteManager(targetLocator.getPath(), targetDoc, sourceVersion.getLink() - .getLabel(), sourceVersion.getLink().getNode().isVisible()); - copyDocumentSource(sourceVersion, targetDoc); - } - } - } - - /** - * Copies a document source. - * @param sourceDocument The source document. - * @param destinationDocument The destination document. - * @throws PublicationException when something went wrong. - */ - public void copyDocumentSource(Document sourceDocument, Document destinationDocument) - throws PublicationException { - copyContent(sourceDocument, destinationDocument); - copyMetaData(sourceDocument, destinationDocument); - } - - protected void copyContent(Document sourceDocument, Document destinationDocument) - throws PublicationException { - boolean useBuffer = true; - - OutputStream destOutputStream = null; - InputStream sourceInputStream = null; - try { - try { - sourceInputStream = sourceDocument.getInputStream(); - destOutputStream = destinationDocument.getOutputStream(); - - if (useBuffer) { - final ByteArrayOutputStream sourceBos = new ByteArrayOutputStream(); - IOUtils.copy(sourceInputStream, sourceBos); - IOUtils.write(sourceBos.toByteArray(), destOutputStream); - } else { - IOUtils.copy(sourceInputStream, destOutputStream); - } - } finally { - if (destOutputStream != null) { - destOutputStream.flush(); - destOutputStream.close(); - } - if (sourceInputStream != null) { - sourceInputStream.close(); - } - } - } catch (Exception e) { - throw new PublicationException(e); - } - } - - /** - * Abstract base class for document visitors which operate on a source and target document. - */ - public static abstract class SourceTargetVisitor implements DocumentVisitor { - - private DocumentLocator rootSource; - private DocumentLocator rootTarget; - private DocumentManager manager; - - /** - * Ctor. - * @param manager The document manager. - * @param source The root source. - * @param target The root target. - */ - public SourceTargetVisitor(DocumentManager manager, Document source, DocumentLocator target) { - this.manager = manager; - this.rootSource = source.getLocator(); - this.rootTarget = target; - } - - /** - * @return the root source - */ - protected DocumentLocator getRootSource() { - return rootSource; - } - - /** - * @return the root target - */ - protected DocumentLocator getRootTarget() { - return rootTarget; - } - - /** - * @return the document manager - */ - protected DocumentManager getDocumentManager() { - return this.manager; - } - - /** - * Returns the target corresponding to a source relatively to the root target document. - * @param source The source. - * @return A document. - * @throws DocumentBuildException if the target could not be built. - */ - protected DocumentLocator getTarget(Document source) throws DocumentBuildException { - DocumentLocator sourceLocator = source.getLocator(); - String rootSourcePath = getRootSource().getPath(); - if (sourceLocator.getPath().equals(rootSourcePath)) { - return rootTarget; - } else { - String relativePath = sourceLocator.getPath().substring(rootSourcePath.length()); - return rootTarget.getDescendant(relativePath); - } - } - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#deleteAll(org.apache.lenya.cms.publication.Document) - */ - public void deleteAll(Document document) throws PublicationException { - NodeSet subsite = SiteUtil.getSubSite(document.getLink().getNode()); - for (NodeIterator i = subsite.descending(); i.hasNext();) { - SiteNode node = i.next(); - String[] languages = node.getLanguages(); - for (int l = 0; l < languages.length; l++) { - Document doc = node.getLink(languages[l]).getDocument(); - delete(doc); - } - } - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#deleteAllLanguageVersions(org.apache.lenya.cms.publication.Document) - */ - public void deleteAllLanguageVersions(Document document) throws PublicationException { - String[] languages = document.getLanguages(); - for (int i = 0; i < languages.length; i++) { - delete(document.getTranslation(languages[i])); - } - } - - /** - * Visitor to delete documents. - */ - public static class DeleteVisitor implements DocumentVisitor { - - private DocumentManager manager; - - /** - * Ctor. - * @param manager The document manager. - */ - public DeleteVisitor(DocumentManager manager) { - this.manager = manager; - } - - protected DocumentManager getDocumentManager() { - return this.manager; - } - - /** - * @see org.apache.lenya.cms.publication.util.DocumentVisitor#visitDocument(org.apache.lenya.cms.publication.Document) - */ - public void visitDocument(Document document) throws PublicationException { - getDocumentManager().deleteAllLanguageVersions(document); - } - - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#delete(org.apache.lenya.cms.publication.util.DocumentSet) - */ - public void delete(DocumentSet documents) throws PublicationException { - - if (documents.isEmpty()) { - return; - } - - DocumentSet set = new DocumentSet(documents.getDocuments()); - sortAscending(set); - set.reverse(); - - DocumentVisitor visitor = new DeleteVisitor(this); - try { - set.visit(visitor); - } catch (Exception e) { - throw new PublicationException(e); - } - - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#move(org.apache.lenya.cms.publication.util.DocumentSet, - * org.apache.lenya.cms.publication.util.DocumentSet) - */ - public void move(DocumentSet sources, DocumentSet destinations) throws PublicationException { - copy(sources, destinations); - delete(sources); - /* - * Document[] sourceDocs = sources.getDocuments(); Document[] targetDocs = - * destinations.getDocuments(); - * - * if (sourceDocs.length != targetDocs.length) { throw new PublicationException( "The number - * of source and destination documents must be equal!"); } - * - * Map source2target = new HashMap(); for (int i = 0; i < sourceDocs.length; i++) { - * source2target.put(sourceDocs[i], targetDocs[i]); } - * - * DocumentSet sortedSources = new DocumentSet(sourceDocs); - * SiteUtil.sortAscending(this.manager, sortedSources); Document[] sortedSourceDocs = - * sortedSources.getDocuments(); - * - * for (int i = 0; i < sortedSourceDocs.length; i++) { move(sortedSourceDocs[i], (Document) - * source2target.get(sortedSourceDocs[i])); } - */ - } - - /** - * @see org.apache.lenya.cms.publication.DocumentManager#copy(org.apache.lenya.cms.publication.util.DocumentSet, - * org.apache.lenya.cms.publication.util.DocumentSet) - */ - public void copy(DocumentSet sources, DocumentSet destinations) throws PublicationException { - Document[] sourceDocs = sources.getDocuments(); - Document[] targetDocs = destinations.getDocuments(); - - if (sourceDocs.length != targetDocs.length) { - throw new PublicationException( - "The number of source and destination documents must be equal!"); - } - - Map source2target = new HashMap(); - for (int i = 0; i < sourceDocs.length; i++) { - source2target.put(sourceDocs[i], targetDocs[i]); - } - - DocumentSet sortedSources = new DocumentSet(sourceDocs); - sortAscending(sortedSources); - Document[] sortedSourceDocs = sortedSources.getDocuments(); - - for (int i = 0; i < sortedSourceDocs.length; i++) { - copy(sortedSourceDocs[i], ((Document) source2target.get(sortedSourceDocs[i])) - .getLocator()); - } - } - - protected void sortAscending(DocumentSet set) throws PublicationException { - - if (!set.isEmpty()) { - - Document[] docs = set.getDocuments(); - int n = docs.length; - - Publication pub = docs[0].getPublication(); - SiteManager siteManager = (SiteManager) WebAppContextUtils - .getCurrentWebApplicationContext().getBean( - SiteManager.class.getName() + "/" + pub.getSiteManagerHint()); - - Set nodes = new HashSet(); - for (int i = 0; i < docs.length; i++) { - nodes.add(docs[i].getLink().getNode()); - } - - SiteNode[] ascending = siteManager.sortAscending((SiteNode[]) nodes - .toArray(new SiteNode[nodes.size()])); - - set.clear(); - for (int i = 0; i < ascending.length; i++) { - for (int d = 0; d < docs.length; d++) { - if (docs[d].getPath().equals(ascending[i].getPath())) { - set.add(docs[d]); - } - } - } - - if (set.getDocuments().length != n) { - throw new IllegalStateException("Number of documents has changed!"); - } - - } - } - - public Document addVersion(Document sourceDocument, String area, String language, - boolean addToSiteStructure) throws DocumentBuildException, PublicationException { - Document document = addVersion(sourceDocument, area, language); - - if (addToSiteStructure && sourceDocument.hasLink()) { - String path = sourceDocument.getPath(); - boolean visible = sourceDocument.getLink().getNode().isVisible(); - addToSiteManager(path, document, sourceDocument.getLink().getLabel(), visible); - } - - return document; - } - - public Document addVersion(Document sourceDocument, String area, String language) - throws DocumentBuildException, DocumentException, PublicationException { - Document document = add(sourceDocument.getResourceType(), sourceDocument.getUUID(), - sourceDocument.getInputStream(), sourceDocument.getPublication(), area, language, - sourceDocument.getSourceExtension(), sourceDocument.getMimeType()); - copyMetaData(sourceDocument, document); - - return document; - } - - public SourceResolver getSourceResolver() { - return sourceResolver; - } - - public void setSourceResolver(SourceResolver sourceResolver) { - this.sourceResolver = sourceResolver; - } - - public UUIDGenerator getUuidGenerator() { - return uuidGenerator; - } - - public void setUuidGenerator(UUIDGenerator uuidGenerator) { - this.uuidGenerator = uuidGenerator; - } - - public NodeFactory getNodeFactory() { - return nodeFactory; - } - - public void setNodeFactory(NodeFactory nodeFactory) { - this.nodeFactory = nodeFactory; - } - -}