You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2009/02/09 19:49:21 UTC

svn commit: r742672 [3/6] - in /lenya/trunk: org.apache.lenya.core.ac/src/main/java/org/apache/lenya/cms/ac/ org.apache.lenya.core.acusecases/src/main/java/org/apache/lenya/cms/ac/usecases/ org.apache.lenya.core.administration/src/main/java/org/apache/...

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java Mon Feb  9 18:49:13 2009
@@ -26,9 +26,9 @@
 import java.util.List;
 
 import org.apache.cocoon.spring.configurator.WebAppContextUtils;
-import org.apache.cocoon.util.AbstractLogEnabled;
 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;
@@ -48,10 +48,12 @@
  * A typical CMS document.
  * @version $Id$
  */
-public class DocumentImpl extends AbstractLogEnabled implements Document {
+public class DocumentImpl implements Document {
+
+    private static final Log logger = LogFactory.getLog(DocumentImpl.class);
 
     private DocumentIdentifier identifier;
-    private DocumentFactory factory;
+    private org.apache.lenya.cms.publication.Session session;
     private NodeFactory nodeFactory;
     private int revision = -1;
 
@@ -89,19 +91,16 @@
 
     /**
      * Creates a new instance of DefaultDocument.
-     * @param manager The service manager.
-     * @param map The identity map the document belongs to.
+     * @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.
-     * @param _logger a logger
      */
-    protected DocumentImpl(DocumentFactory map, DocumentIdentifier identifier, int revision,
-            Log logger) {
+    protected DocumentImpl(org.apache.lenya.cms.publication.Session session,
+            DocumentIdentifier identifier, int revision) {
 
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug(
-                    "DefaultDocument() creating new instance with id [" + identifier.getUUID()
-                            + "], language [" + identifier.getLanguage() + "]");
+        if (logger.isDebugEnabled()) {
+            logger.debug("DefaultDocument() creating new instance with id [" + identifier.getUUID()
+                    + "], language [" + identifier.getLanguage() + "]");
         }
 
         if (identifier.getUUID() == null) {
@@ -109,13 +108,12 @@
         }
 
         this.identifier = identifier;
-        this.factory = map;
+        this.session = session;
         this.revision = revision;
 
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug(
-                    "DefaultDocument() done building instance with _id [" + identifier.getUUID()
-                            + "], _language [" + identifier.getLanguage() + "]");
+        if (logger.isDebugEnabled()) {
+            logger.debug("DefaultDocument() done building instance with _id ["
+                    + identifier.getUUID() + "], _language [" + identifier.getLanguage() + "]");
         }
     }
 
@@ -169,11 +167,7 @@
      */
     public Publication getPublication() {
         if (this.publication == null) {
-            try {
-                this.publication = getFactory().getPublication(getIdentifier().getPublicationId());
-            } catch (PublicationException e) {
-                throw new RuntimeException(e);
-            }
+            this.publication = getSession().getPublication(getIdentifier().getPublicationId());
         }
         return this.publication;
     }
@@ -194,23 +188,17 @@
                 getLanguage());
     }
 
-    /**
-     * @see org.apache.lenya.cms.publication.Document#getLanguage()
-     */
     public String getLanguage() {
         return this.identifier.getLanguage();
     }
 
-    /**
-     * @see org.apache.lenya.cms.publication.Document#getLanguages()
-     */
-    public String[] getLanguages() throws DocumentException {
+    public String[] getLanguages() {
 
         List documentLanguages = new ArrayList();
         String[] allLanguages = getPublication().getLanguages();
 
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug("Number of languages of this publication: " + allLanguages.length);
+        if (logger.isDebugEnabled()) {
+            logger.debug("Number of languages of this publication: " + allLanguages.length);
         }
 
         for (int i = 0; i < allLanguages.length; i++) {
@@ -222,9 +210,6 @@
         return (String[]) documentLanguages.toArray(new String[documentLanguages.size()]);
     }
 
-    /**
-     * @see org.apache.lenya.cms.publication.Document#getArea()
-     */
     public String getArea() {
         return this.identifier.getArea();
     }
@@ -239,7 +224,7 @@
         if (extension == null) {
             String sourceExtension = getSourceExtension();
             if (sourceExtension.equals("xml") || sourceExtension.equals("")) {
-                getLogger().info("Default extension will be used: " + defaultExtension);
+                logger.info("Default extension will be used: " + defaultExtension);
                 return defaultExtension;
             } else {
                 return sourceExtension;
@@ -269,9 +254,8 @@
             throw new RuntimeException(e);
         }
         if (sourceExtension == null) {
-            getLogger().warn(
-                    "No source extension for document [" + this + "]. The extension \""
-                            + defaultSourceExtension + "\" will be used as default!");
+            logger.warn("No source extension for document [" + this + "]. The extension \""
+                    + defaultSourceExtension + "\" will be used as default!");
             sourceExtension = defaultSourceExtension;
         }
         return sourceExtension;
@@ -282,34 +266,27 @@
      * @param _extension A string.
      */
     protected void setExtension(String _extension) {
-    	Validate.notNull(_extension);
+        Validate.notNull(_extension);
         Validate.isTrue(!_extension.startsWith("."), "Extension must start with a dot");
         checkWritability();
         this.extension = _extension;
     }
 
-    /**
-     * @see org.apache.lenya.cms.publication.Document#exists()
-     */
-    public boolean exists() throws DocumentException {
+    public boolean exists() throws ResourceNotFoundException {
         try {
             return getRepositoryNode().exists();
         } catch (RepositoryException e) {
-            throw new DocumentException(e);
+            throw new ResourceNotFoundException(e);
         }
     }
 
-    /**
-     * @see org.apache.lenya.cms.publication.Document#existsInAnyLanguage()
-     */
-    public boolean existsInAnyLanguage() throws DocumentException {
+    public boolean existsInAnyLanguage() throws ResourceNotFoundException {
         String[] languages = getLanguages();
 
         if (languages.length > 0) {
-            if (getLogger().isDebugEnabled()) {
-                getLogger().debug(
-                        "Document (" + this + ") exists in at least one language: "
-                                + languages.length);
+            if (logger.isDebugEnabled()) {
+                logger.debug("Document (" + this + ") exists in at least one language: "
+                        + languages.length);
             }
             String[] allLanguages = getPublication().getLanguages();
             if (languages.length == allLanguages.length)
@@ -317,15 +294,14 @@
                 // could assume the
                 // languages EN and DE, but the document could exist for the
                 // languages DE and FR!
-                if (getLogger().isDebugEnabled()) {
-                    getLogger().debug(
-                            "Document (" + this
-                                    + ") exists even in all languages of this publication");
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Document (" + this
+                            + ") exists even in all languages of this publication");
                 }
             return true;
         } else {
-            if (getLogger().isDebugEnabled()) {
-                getLogger().debug("Document (" + this + ") does NOT exist in any language");
+            if (logger.isDebugEnabled()) {
+                logger.debug("Document (" + this + ") does NOT exist in any language");
             }
             return false;
         }
@@ -366,13 +342,6 @@
     }
 
     /**
-     * @see org.apache.lenya.cms.publication.Document#getFactory()
-     */
-    public DocumentFactory getFactory() {
-        return this.factory;
-    }
-
-    /**
      * @see org.apache.lenya.cms.publication.Document#getCanonicalWebappURL()
      */
     public String getCanonicalWebappURL() {
@@ -385,7 +354,7 @@
     public String getCanonicalDocumentURL() {
         try {
             DocumentBuilder builder = getPublication().getDocumentBuilder();
-            String webappUrl = builder.buildCanonicalUrl(getFactory(), getLocator());
+            String webappUrl = builder.buildCanonicalUrl(getSession(), getLocator());
             String prefix = "/" + getPublication().getId() + "/" + getArea();
             return webappUrl.substring(prefix.length());
         } catch (Exception e) {
@@ -393,10 +362,11 @@
         }
     }
 
-    /**
-     * @see org.apache.lenya.cms.publication.Document#accept(org.apache.lenya.cms.publication.util.DocumentVisitor)
-     */
-    public void accept(DocumentVisitor visitor) throws PublicationException {
+    public org.apache.lenya.cms.publication.Session getSession() {
+        return this.session;
+    }
+
+    public void accept(DocumentVisitor visitor) throws Exception {
         visitor.visitDocument(this);
     }
 
@@ -444,7 +414,7 @@
 
     public MetaData getMetaData(String namespaceUri) throws MetaDataException {
         MetaData meta = getContentHolder().getMetaData(namespaceUri);
-        if (getSession().isModifiable()) {
+        if (getRepositorySession().isModifiable()) {
             return meta;
         } else {
             String cacheKey = getPublication().getId() + ":" + getArea() + ":" + getUUID() + ":"
@@ -473,20 +443,20 @@
         }
     }
 
-    public long getContentLength() throws DocumentException {
+    public long getContentLength() {
         try {
             return getContentHolder().getContentLength();
         } catch (RepositoryException e) {
-            throw new DocumentException(e);
+            throw new RuntimeException(e);
         }
     }
 
-    public void setMimeType(String mimeType) throws DocumentException {
+    public void setMimeType(String mimeType) {
         checkWritability();
         try {
             getMetaData(METADATA_NAMESPACE).setValue(METADATA_MIME_TYPE, mimeType);
         } catch (MetaDataException e) {
-            throw new DocumentException(e);
+            throw new RuntimeException(e);
         }
     }
 
@@ -521,20 +491,12 @@
         return area().contains(getUUID(), language);
     }
 
-    public Document getAreaVersion(String area) throws DocumentException {
-        try {
-            return getFactory().get(getPublication(), area, getUUID(), getLanguage());
-        } catch (DocumentBuildException e) {
-            throw new DocumentException(e);
-        }
+    public Document getAreaVersion(String area) throws ResourceNotFoundException {
+        return getPublication().getArea(area).getDocument(getUUID(), getLanguage());
     }
 
-    public Document getTranslation(String language) throws DocumentException {
-        try {
-            return getFactory().get(getPublication(), getArea(), getUUID(), language);
-        } catch (DocumentBuildException e) {
-            throw new DocumentException(e);
-        }
+    public Document getTranslation(String language) throws ResourceNotFoundException {
+        return area().getDocument(getUUID(), language);
     }
 
     private Node repositoryNode;
@@ -544,7 +506,8 @@
      */
     public Node getRepositoryNode() {
         if (this.repositoryNode == null) {
-            this.repositoryNode = getRepositoryNode(getNodeFactory(), getFactory(), getSourceURI());
+            this.repositoryNode = getRepositoryNode(getNodeFactory(), (Session) getSession(),
+                    getSourceURI());
         }
         return this.repositoryNode;
     }
@@ -562,9 +525,8 @@
         }
     }
 
-    protected static Node getRepositoryNode(NodeFactory nodeFactory, DocumentFactory docFactory,
+    protected static Node getRepositoryNode(NodeFactory nodeFactory, Session session,
             String sourceUri) {
-        Session session = docFactory.getSession();
         try {
             return (Node) session.getRepositoryItem(nodeFactory, sourceUri);
         } catch (Exception e) {
@@ -593,12 +555,8 @@
         }
     }
 
-    public Document getVersion(String area, String language) throws DocumentException {
-        try {
-            return getFactory().get(getPublication(), area, getUUID(), language);
-        } catch (DocumentBuildException e) {
-            throw new DocumentException(e);
-        }
+    public Document getVersion(String area, String language) throws ResourceNotFoundException {
+        return getPublication().getArea(area).getDocument(getUUID(), language);
     }
 
     public Link getLink() throws DocumentException {
@@ -620,15 +578,11 @@
     }
 
     public Area area() {
-        try {
-            return getPublication().getArea(getArea());
-        } catch (PublicationException e) {
-            throw new RuntimeException(e);
-        }
+        return getPublication().getArea(getArea());
     }
 
     public void setResourceType(ResourceType resourceType) {
-    	Validate.notNull(resourceType);
+        Validate.notNull(resourceType);
         checkWritability();
         try {
             MetaData meta = getMetaData(DocumentImpl.METADATA_NAMESPACE);
@@ -639,7 +593,7 @@
     }
 
     public void setSourceExtension(String extension) {
-    	Validate.notNull(extension);
+        Validate.notNull(extension);
         Validate.isTrue(!extension.startsWith("."), "Extension must start with a dot");
         checkWritability();
         try {
@@ -677,8 +631,8 @@
         }
     }
 
-    public Session getSession() {
-        return getFactory().getSession();
+    public Session getRepositorySession() {
+        return (Session) getSession();
     }
 
     public int getRevisionNumber() {
@@ -709,4 +663,13 @@
         this.nodeFactory = nodeFactory;
     }
 
+    public void checkin() throws RepositoryException {
+        getRepositoryNode().checkin();
+    }
+
+    public boolean isCheckedOutBySession(org.apache.lenya.cms.publication.Session session)
+            throws RepositoryException {
+        return getRepositoryNode().isCheckedOutBySession((Session) session);
+    }
+
 }
\ No newline at end of file

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java Mon Feb  9 18:49:13 2009
@@ -42,7 +42,6 @@
 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.RepositoryException;
 import org.apache.lenya.cms.repository.UUIDGenerator;
 import org.apache.lenya.cms.site.Link;
 import org.apache.lenya.cms.site.NodeIterator;
@@ -73,9 +72,9 @@
             String extension, String navigationTitle, boolean visibleInNav)
             throws DocumentBuildException, PublicationException {
 
-        Document document = add(sourceDocument.getFactory(), sourceDocument.getResourceType(),
-                sourceDocument.getInputStream(), sourceDocument.getPublication(), area, path,
-                language, extension, navigationTitle, visibleInNav, sourceDocument.getMimeType());
+        Document document = add(sourceDocument.getResourceType(), sourceDocument.getInputStream(),
+                sourceDocument.getPublication(), area, path, language, extension, navigationTitle,
+                visibleInNav, sourceDocument.getMimeType());
 
         copyMetaData(sourceDocument, document);
         return document;
@@ -108,16 +107,10 @@
         }
     }
 
-    /**
-     * @see org.apache.lenya.cms.publication.DocumentManager#add(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.publication.ResourceType, java.lang.String,
-     *      org.apache.lenya.cms.publication.Publication, java.lang.String, java.lang.String,
-     *      java.lang.String, java.lang.String, java.lang.String, boolean)
-     */
-    public Document add(DocumentFactory factory, ResourceType documentType,
-            String initialContentsURI, Publication pub, String area, String path, String language,
-            String extension, String navigationTitle, boolean visibleInNav)
-            throws DocumentBuildException, DocumentException, PublicationException {
+    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();
@@ -126,17 +119,16 @@
                     + "] is already contained in site [" + site + "]");
         }
 
-        Document document = add(factory, documentType, initialContentsURI, pub, area, language,
-                extension);
+        Document document = add(documentType, initialContentsURI, pub, area, language, extension);
 
         addToSiteManager(path, document, navigationTitle, visibleInNav);
         return document;
     }
 
-    protected Document add(DocumentFactory factory, ResourceType documentType,
-            InputStream initialContentsStream, Publication pub, String area, String path,
-            String language, String extension, String navigationTitle, boolean visibleInNav,
-            String mimeType) throws DocumentBuildException, DocumentException, PublicationException {
+    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();
@@ -145,24 +137,23 @@
                     + "] is already contained in site [" + site + "]");
         }
 
-        Document document = add(factory, documentType, initialContentsStream, pub, area, language,
+        Document document = add(documentType, initialContentsStream, pub, area, language,
                 extension, mimeType);
 
         addToSiteManager(path, document, navigationTitle, visibleInNav);
         return document;
     }
 
-    public Document add(DocumentFactory factory, ResourceType documentType,
-            String initialContentsURI, Publication pub, String area, String language,
-            String extension) throws DocumentBuildException, DocumentException,
-            PublicationException {
+    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(factory, documentType, uuid, source.getInputStream(), pub, area, language,
-                    extension, getMimeType(source));
+            return add(documentType, uuid, source.getInputStream(), pub, area, language, extension,
+                    getMimeType(source));
         } catch (Exception e) {
             throw new PublicationException(e);
         } finally {
@@ -180,27 +171,27 @@
         return mimeType;
     }
 
-    protected Document add(DocumentFactory factory, ResourceType documentType,
-            InputStream initialContentsStream, Publication pub, String area, String language,
-            String extension, String mimeType) throws DocumentBuildException, DocumentException,
-            PublicationException {
+    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(factory, documentType, uuid, initialContentsStream, pub, area, language,
-                extension, mimeType);
+        return add(documentType, uuid, initialContentsStream, pub, area, language, extension,
+                mimeType);
     }
 
-    protected Document add(DocumentFactory factory, ResourceType documentType, String uuid,
-            InputStream stream, Publication pub, String area, String language, String extension,
-            String mimeType) throws DocumentBuildException {
+    protected Document add(ResourceType documentType, String uuid, InputStream stream,
+            Publication pub, String area, String language, String extension, String mimeType)
+            throws DocumentBuildException {
         try {
 
-            if (exists(factory, pub, area, uuid, language)) {
+            Area areaObj = pub.getArea(area);
+            if (areaObj.contains(uuid, language)) {
                 throw new DocumentBuildException("The document [" + pub.getId() + ":" + area + ":"
                         + uuid + ":" + language + "] already exists!");
             }
 
-            Document document = factory.get(pub, area, uuid, language);
+            Document document = areaObj.getDocument(uuid, language);
             Node node = document.getRepositoryNode();
             node.lock();
 
@@ -676,11 +667,9 @@
      * @see org.apache.lenya.cms.publication.DocumentManager#deleteAllLanguageVersions(org.apache.lenya.cms.publication.Document)
      */
     public void deleteAllLanguageVersions(Document document) throws PublicationException {
-        DocumentFactory identityMap = document.getFactory();
         String[] languages = document.getLanguages();
         for (int i = 0; i < languages.length; i++) {
-            DocumentLocator version = document.getLocator().getLanguageVersion(languages[i]);
-            delete(identityMap.get(version));
+            delete(document.getTranslation(languages[i]));
         }
     }
 
@@ -726,7 +715,11 @@
         set.reverse();
 
         DocumentVisitor visitor = new DeleteVisitor(this);
-        set.visit(visitor);
+        try {
+            set.visit(visitor);
+        } catch (Exception e) {
+            throw new PublicationException(e);
+        }
 
     }
 
@@ -792,8 +785,9 @@
             int n = docs.length;
 
             Publication pub = docs[0].getPublication();
-            SiteManager siteManager = (SiteManager) WebAppContextUtils.getCurrentWebApplicationContext()
-                .getBean(SiteManager.class.getName() + "/" + pub.getSiteManagerHint());
+            SiteManager siteManager = (SiteManager) WebAppContextUtils
+                    .getCurrentWebApplicationContext().getBean(
+                            SiteManager.class.getName() + "/" + pub.getSiteManagerHint());
 
             Set nodes = new HashSet();
             for (int i = 0; i < docs.length; i++) {
@@ -834,26 +828,14 @@
 
     public Document addVersion(Document sourceDocument, String area, String language)
             throws DocumentBuildException, DocumentException, PublicationException {
-        Document document = add(sourceDocument.getFactory(), sourceDocument.getResourceType(),
-                sourceDocument.getUUID(), sourceDocument.getInputStream(), sourceDocument
-                        .getPublication(), area, language, sourceDocument.getSourceExtension(),
-                sourceDocument.getMimeType());
+        Document document = add(sourceDocument.getResourceType(), sourceDocument.getUUID(),
+                sourceDocument.getInputStream(), sourceDocument.getPublication(), area, language,
+                sourceDocument.getSourceExtension(), sourceDocument.getMimeType());
         copyMetaData(sourceDocument, document);
 
         return document;
     }
 
-    public boolean exists(DocumentFactory factory, Publication pub, String area, String uuid,
-            String language) throws PublicationException {
-        String sourceUri = DocumentImpl.getSourceURI(pub, area, uuid, language);
-        try {
-            Node node = DocumentImpl.getRepositoryNode(getNodeFactory(), factory, sourceUri);
-            return node.exists();
-        } catch (RepositoryException e) {
-            throw new PublicationException(e);
-        }
-    }
-
     public SourceResolver getSourceResolver() {
         return sourceResolver;
     }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationConfiguration.java Mon Feb  9 18:49:13 2009
@@ -33,7 +33,6 @@
 import org.apache.cocoon.util.AbstractLogEnabled;
 import org.apache.commons.lang.Validate;
 import org.apache.lenya.cms.repository.Node;
-import org.apache.lenya.cms.repository.Session;
 
 /**
  * A publication's configuration. Keep in sync with
@@ -546,7 +545,7 @@
         return getId();
     }
 
-    public Area getArea(String name) throws PublicationException {
+    public Area getArea(String name) throws ResourceNotFoundException {
         throw new IllegalStateException("Not implemented!");
     }
 
@@ -579,7 +578,7 @@
         return this.name;
     }
 
-    public Session getSession() {
+    public Session getRepositorySession() {
         throw new UnsupportedOperationException();
     }
 
@@ -730,4 +729,8 @@
         return (String[]) this.modules.toArray(new String[this.modules.size()]);
     }
 
+    public Session getSession() {
+        throw new UnsupportedOperationException();
+    }
+
 }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationFactory.java Mon Feb  9 18:49:13 2009
@@ -29,22 +29,19 @@
 public class PublicationFactory implements RepositoryItemFactory {
 
     private PublicationConfiguration config;
-    private DocumentFactoryBuilder documentFactoryBuilder;
     private NodeFactory nodeFactory;
 
     /**
      * @param config The publication configuration.
      */
-    public PublicationFactory(DocumentFactoryBuilder builder, NodeFactory nodeFactory,
-            PublicationConfiguration config) {
+    public PublicationFactory(NodeFactory nodeFactory, PublicationConfiguration config) {
         this.config = config;
-        this.documentFactoryBuilder = builder;
         this.nodeFactory = nodeFactory;
     }
 
     public RepositoryItem buildItem(Session session, String key) throws RepositoryException {
-        DocumentFactory factory = this.documentFactoryBuilder.createDocumentFactory(session);
-        return new PublicationImpl(factory, this.nodeFactory, config);
+        return new PublicationImpl((org.apache.lenya.cms.publication.Session) session,
+                this.nodeFactory, config);
     }
 
     public String getItemType() {

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java Mon Feb  9 18:49:13 2009
@@ -29,22 +29,22 @@
 import org.apache.cocoon.spring.configurator.WebAppContextUtils;
 import org.apache.cocoon.util.AbstractLogEnabled;
 import org.apache.lenya.cms.repository.NodeFactory;
-import org.apache.lenya.cms.repository.Session;
+import org.apache.lenya.cms.repository.RepositoryItem;
 
 /**
  * A publication.
  * @version $Id$
  */
-public class PublicationImpl extends AbstractLogEnabled implements Publication {
+public class PublicationImpl extends AbstractLogEnabled implements Publication, RepositoryItem {
 
     private PublicationConfiguration delegate;
-    private DocumentFactory factory;
     private NodeFactory nodeFactory;
+    private Session session;
 
-    protected PublicationImpl(DocumentFactory factory, NodeFactory nodeFactory,
+    protected PublicationImpl(Session session, NodeFactory nodeFactory,
             PublicationConfiguration delegate) {
         this.delegate = delegate;
-        this.factory = factory;
+        this.session = session;
         this.nodeFactory = nodeFactory;
     }
 
@@ -135,13 +135,9 @@
             this.allResourceTypes.addAll(Arrays.asList(this.delegate.getResourceTypeNames()));
             String templateId = getTemplateId();
             if (templateId != null) {
-                try {
-                    Publication template = getFactory().getPublication(templateId);
-                    String[] templateTypes = template.getResourceTypeNames();
-                    this.allResourceTypes.addAll(Arrays.asList(templateTypes));
-                } catch (PublicationException e) {
-                    throw new RuntimeException(e);
-                }
+                Publication template = getSession().getPublication(templateId);
+                String[] templateTypes = template.getResourceTypeNames();
+                this.allResourceTypes.addAll(Arrays.asList(templateTypes));
             }
         }
         return (String[]) this.allResourceTypes.toArray(new String[this.allResourceTypes.size()]);
@@ -167,12 +163,8 @@
         String schema = this.delegate.getWorkflowSchema(resourceType);
         if (schema == null && getTemplateId() != null) {
             String templateId = getTemplateId();
-            try {
-                Publication template = getFactory().getPublication(templateId);
-                schema = template.getWorkflowSchema(resourceType);
-            } catch (PublicationException e) {
-                throw new RuntimeException(e);
-            }
+            Publication template = getSession().getPublication(templateId);
+            schema = template.getWorkflowSchema(resourceType);
         }
         return schema;
     }
@@ -187,9 +179,9 @@
 
     private Map areas = new HashMap();
 
-    public Area getArea(String name) throws PublicationException {
+    public Area getArea(String name) {
         if (!this.areas.containsKey(name)) {
-            Area area = new AreaImpl(this.factory, this.nodeFactory, this, name);
+            Area area = new AreaImpl(this.session, this.nodeFactory, this, name);
             this.areas.put(name, area);
         }
         return (Area) this.areas.get(name);
@@ -199,10 +191,6 @@
         return delegate.getAreaNames();
     }
 
-    public DocumentFactory getFactory() {
-        return this.factory;
-    }
-
     public boolean equals(Object obj) {
         if (!getClass().isInstance(obj)) {
             return false;
@@ -222,8 +210,8 @@
         return delegate.getName();
     }
 
-    public Session getSession() {
-        return getFactory().getSession();
+    public org.apache.lenya.cms.repository.Session getRepositorySession() {
+        return (org.apache.lenya.cms.repository.Session) getSession();
     }
 
     public void addLanguage(String language) {
@@ -246,4 +234,8 @@
         this.delegate.setName(name);
     }
 
+    public org.apache.lenya.cms.publication.Session getSession() {
+        return this.session;
+    }
+
 }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java Mon Feb  9 18:49:13 2009
@@ -35,6 +35,7 @@
 import org.apache.commons.lang.Validate;
 import org.apache.lenya.cms.repository.NodeFactory;
 import org.apache.lenya.cms.repository.RepositoryException;
+import org.apache.lenya.cms.repository.Session;
 
 /**
  * Factory for creating publication objects.
@@ -42,7 +43,6 @@
 public final class PublicationManagerImpl extends AbstractLogEnabled implements PublicationManager {
 
     private Map id2config;
-    private DocumentFactoryBuilder documentFactoryBuilder;
     private NodeFactory nodeFactory;
 
     protected synchronized Map getId2config() throws PublicationException {
@@ -72,8 +72,7 @@
     }
 
     public Publication getPublication(DocumentFactory factory, String id)
-    throws PublicationException
-    {
+            throws PublicationException {
         Validate.notNull(id);
         Map id2config = getId2config();
         if (!id2config.containsKey(id)) {
@@ -81,10 +80,10 @@
         }
 
         PublicationConfiguration config = (PublicationConfiguration) id2config.get(id);
-        PublicationFactory pubFactory = new PublicationFactory(getDocumentFactoryBuilder(),
-                getNodeFactory(), config);
+        PublicationFactory pubFactory = new PublicationFactory(getNodeFactory(), config);
         try {
-            return (Publication) factory.getSession().getRepositoryItem(pubFactory, id);
+            org.apache.lenya.cms.repository.Session repoSession = (Session) factory.getSession();
+            return (Publication) repoSession.getRepositoryItem(pubFactory, id);
         } catch (RepositoryException e) {
             throw new PublicationException(e);
         }
@@ -136,14 +135,6 @@
                 .getRealPath("/");
     }
 
-    public DocumentFactoryBuilder getDocumentFactoryBuilder() {
-        return documentFactoryBuilder;
-    }
-
-    public void setDocumentFactoryBuilder(DocumentFactoryBuilder documentFactoryBuilder) {
-        this.documentFactoryBuilder = documentFactoryBuilder;
-    }
-
     public NodeFactory getNodeFactory() {
         return nodeFactory;
     }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java Mon Feb  9 18:49:13 2009
@@ -18,40 +18,85 @@
 package org.apache.lenya.cms.publication;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 
 import org.apache.commons.lang.Validate;
 import org.apache.lenya.ac.Identity;
+import org.apache.lenya.cms.observation.ObservationRegistry;
 import org.apache.lenya.cms.repository.RepositoryException;
-import org.apache.lenya.cms.repository.RepositoryManager;
-import org.apache.lenya.cms.repository.RepositoryUtil;
+import org.apache.lenya.cms.repository.SharedItemStore;
+import org.apache.lenya.cms.repository.UUIDGenerator;
 
 public class RepositoryImpl implements Repository {
 
-    private RepositoryManager repositoryManager;
-
     public Session getSession(HttpServletRequest request) {
         Validate.notNull(request);
-        try {
-            org.apache.lenya.cms.repository.Session repoSession = RepositoryUtil.getSession(
-                    this.repositoryManager, request);
-            return new SessionImpl(this, repoSession);
-        } catch (RepositoryException e) {
-            throw new RuntimeException(e);
+        SessionImpl session = (SessionImpl) request.getAttribute(Session.class.getName());
+        if (session == null) {
+            Identity identity = getIdentity(request);
+            // attach a read-only repository session to the HTTP request
+            session = (SessionImpl) startSession(identity, false);
+            request.setAttribute(Session.class.getName(), session);
+        } else if (session.getIdentity() == null) {
+            Identity identity = getIdentity(request);
+            if (identity != null) {
+                session.setIdentity(identity);
+            }
         }
-    }
-
-    public void setRepositoryManager(RepositoryManager repositoryManager) {
-        this.repositoryManager = repositoryManager;
+        return session;
     }
 
     public Session startSession(Identity identity, boolean modifiable) {
-        org.apache.lenya.cms.repository.Session repoSession;
+        SessionImpl session = new SessionImpl(identity, modifiable);
         try {
-            repoSession = this.repositoryManager.createSession(identity, modifiable);
+            session.setObservationRegistry(getObservationRegistry());
         } catch (RepositoryException e) {
             throw new RuntimeException(e);
         }
-        return new SessionImpl(this, repoSession);
+        session.setUuidGenerator(getUuidGenerator());
+        session.setSharedItemStore(getSharedItemStore());
+        return session;
+    }
+
+    private SharedItemStore sharedItemStore;
+    private UUIDGenerator uuidGenerator;
+    private ObservationRegistry observationRegistry;
+
+    protected SharedItemStore getSharedItemStore() {
+        return sharedItemStore;
+    }
+
+    public void setSharedItemStore(SharedItemStore sharedItemStore) {
+        this.sharedItemStore = sharedItemStore;
+    }
+
+    protected UUIDGenerator getUuidGenerator() {
+        return uuidGenerator;
+    }
+
+    public void setUuidGenerator(UUIDGenerator uuidGenerator) {
+        this.uuidGenerator = uuidGenerator;
+    }
+
+    protected ObservationRegistry getObservationRegistry() {
+        return observationRegistry;
+    }
+
+    public void setObservationRegistry(ObservationRegistry observationRegistry) {
+        this.observationRegistry = observationRegistry;
+    }
+
+    protected static Identity getIdentity(HttpServletRequest request) {
+        HttpSession session = request.getSession();
+        return (Identity) session.getAttribute(Identity.class.getName());
+    }
+
+    /**
+     * Removes the repository session from the servlet session.
+     * @param request The current request.
+     */
+    public void removeSession(HttpServletRequest request) {
+        request.removeAttribute(Session.class.getName());
     }
 
 }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java Mon Feb  9 18:49:13 2009
@@ -17,25 +17,50 @@
  */
 package org.apache.lenya.cms.publication;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.commons.lang.Validate;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.lenya.ac.Identity;
+import org.apache.lenya.cms.observation.ObservationRegistry;
+import org.apache.lenya.cms.observation.RepositoryEvent;
+import org.apache.lenya.cms.observation.RepositoryListener;
+import org.apache.lenya.cms.repository.Node;
+import org.apache.lenya.cms.repository.Persistable;
 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.RepositoryItemFactoryWrapper;
+import org.apache.lenya.cms.repository.SharedItemStore;
+import org.apache.lenya.cms.repository.UUIDGenerator;
 import org.apache.lenya.transaction.ConcurrentModificationException;
+import org.apache.lenya.transaction.IdentityMap;
+import org.apache.lenya.transaction.IdentityMapImpl;
+import org.apache.lenya.transaction.Lock;
+import org.apache.lenya.transaction.Lockable;
+import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.TransactionLock;
+import org.apache.lenya.transaction.Transactionable;
+import org.apache.lenya.transaction.UnitOfWork;
+import org.apache.lenya.transaction.UnitOfWorkImpl;
+
+public class SessionImpl implements Session, org.apache.lenya.cms.repository.Session {
 
-public class SessionImpl implements Session {
+    private static final Log logger = LogFactory.getLog(SessionImpl.class);
 
-    public SessionImpl(RepositoryImpl repository,
-            org.apache.lenya.cms.repository.Session repoSession)
-    {
+    public SessionImpl(RepositoryImpl repository) {
         Validate.notNull(repository, "repository");
-        Validate.notNull(repoSession, "repository session");
         this.repository = repository;
-        this.repositorySession = repoSession;
     }
 
     private RepositoryImpl repository;
-    private org.apache.lenya.cms.repository.Session repositorySession;
     private DocumentFactory documentFactory;
+    private DocumentFactoryBuilder documentFactoryBuilder;
 
     public Publication getPublication(String id) {
         try {
@@ -51,7 +76,7 @@
 
     public DocumentFactory getDocumentFactory() {
         if (this.documentFactory == null) {
-            this.documentFactory = DocumentUtil.createDocumentFactory(this.repositorySession);
+            this.documentFactory = this.documentFactoryBuilder.createDocumentFactory(this);
         }
         return this.documentFactory;
     }
@@ -64,20 +89,243 @@
         return getDocumentFactory().getPublications();
     }
 
+    protected static final String UNMODIFIABLE_SESSION_ID = "unmodifiable";
+    private Identity identity;
+    private ObservationRegistry observationRegistry;
+    private UUIDGenerator uuidGenerator;
+
+    protected ObservationRegistry getObservationRegistry() {
+        return observationRegistry;
+    }
+
+    protected void setObservationRegistry(ObservationRegistry observationRegistry)
+            throws RepositoryException {
+        if (this.observationRegistry != null) {
+            throw new IllegalStateException("Observation registry already set.");
+        }
+        this.observationRegistry = observationRegistry;
+        addListener(observationRegistry);
+    }
+
+    protected UUIDGenerator getUuidGenerator() {
+        return uuidGenerator;
+    }
+
+    protected void setUuidGenerator(UUIDGenerator uuidGenerator) {
+        this.uuidGenerator = uuidGenerator;
+    }
+
+    /**
+     * Ctor.
+     * @param identity The identity.
+     * @param modifiable Determines if the repository items in this session can be modified.
+     * @param manager The service manager.
+     */
+    protected SessionImpl(Identity identity, boolean modifiable) {
+
+        this.identityMap = new IdentityMapImpl(logger);
+        this.identity = identity;
+        this.id = modifiable ? createUuid() : UNMODIFIABLE_SESSION_ID;
+
+        if (modifiable) {
+            this.unitOfWork = new UnitOfWorkImpl(this.identityMap, this.identity, logger);
+        }
+    }
+
+    protected String createUuid() {
+        return getUuidGenerator().nextUUID();
+    }
+
     public Identity getIdentity() {
-        return getDocumentFactory().getSession().getIdentity();
+        return this.identity;
     }
 
-    public void commit() throws RepositoryException, ConcurrentModificationException {
-        getDocumentFactory().getSession().commit();
+    private UnitOfWork unitOfWork;
+    private SharedItemStore sharedItemStore;
+
+    /**
+     * @return The unit of work.
+     */
+    protected UnitOfWork getUnitOfWork() {
+        if (this.unitOfWork == null) {
+            throw new RuntimeException("This session [" + getId() + "] is not modifiable!");
+        }
+        return this.unitOfWork;
     }
 
+    private boolean committing = false;
+
+    /**
+     * Commits the transaction.
+     * @throws RepositoryException if an error occurs.
+     * @throws ConcurrentModificationException if a transactionable has been modified by another
+     *             session.
+     */
+    public synchronized void commit() throws RepositoryException, ConcurrentModificationException {
+
+        savePersistables();
+
+        this.committing = true;
+
+        try {
+            synchronized (TransactionLock.LOCK) {
+
+                getUnitOfWork().commit();
+                getSharedItemStore().clear();
+            }
+        } catch (ConcurrentModificationException e) {
+            throw e;
+        } catch (TransactionException e) {
+            throw new RepositoryException(e);
+        }
+
+        for (Iterator i = this.events.iterator(); i.hasNext();) {
+            RepositoryEvent event = (RepositoryEvent) i.next();
+            for (Iterator l = this.listeners.iterator(); l.hasNext();) {
+                RepositoryListener listener = (RepositoryListener) l.next();
+                listener.eventFired(event);
+            }
+        }
+        this.events.clear();
+        this.committing = false;
+    }
+
+    /**
+     * Save all persistable objects to their nodes.
+     * @throws RepositoryException if an error occurs.
+     */
+    protected void savePersistables() throws RepositoryException {
+        Object[] objects = getIdentityMap().getObjects();
+        for (int i = 0; i < objects.length; i++) {
+            if (objects[i] instanceof Node) {
+                Node node = (Node) objects[i];
+                Persistable persistable = node.getPersistable();
+                if (persistable != null && persistable.isModified()) {
+                    persistable.save();
+                }
+            }
+        }
+    }
+
+    /**
+     * Rolls the transaction back.
+     * @throws RepositoryException if an error occurs.
+     */
     public void rollback() throws RepositoryException {
-        getDocumentFactory().getSession().rollback();        
+        try {
+            synchronized (TransactionLock.LOCK) {
+                getUnitOfWork().rollback();
+            }
+        } catch (TransactionException e) {
+            throw new RepositoryException(e);
+        }
+        this.events.clear();
+    }
+
+    protected SharedItemStore getSharedItemStore() {
+        return this.sharedItemStore;
+    }
+
+    protected void setSharedItemStore(SharedItemStore sharedItemStore) {
+        this.sharedItemStore = sharedItemStore;
+    }
+
+    /**
+     * @see org.apache.lenya.cms.repository.Session#getRepositoryItem(org.apache.lenya.cms.repository.RepositoryItemFactory,
+     *      java.lang.String)
+     */
+    public RepositoryItem getRepositoryItem(RepositoryItemFactory factory, String key)
+            throws RepositoryException {
+        RepositoryItemFactoryWrapper wrapper = new RepositoryItemFactoryWrapper(factory, this);
+        return (RepositoryItem) getIdentityMap().get(wrapper, key);
+    }
+
+    public void registerNew(Transactionable object) throws TransactionException {
+        getUnitOfWork().registerNew(object);
+    }
+
+    public void registerDirty(Transactionable object) throws TransactionException {
+        getUnitOfWork().registerDirty(object);
+    }
+
+    public void registerRemoved(Transactionable object) throws TransactionException {
+        getUnitOfWork().registerRemoved(object);
+    }
+
+    /**
+     * @param identity The identity.
+     */
+    public void setIdentity(Identity identity) {
+        this.identity = identity;
+    }
+
+    public boolean isDirty(Transactionable transactionable) {
+        return getUnitOfWork().isDirty(transactionable);
+    }
+
+    public Lock createLock(Lockable lockable, int version) throws TransactionException {
+        return getUnitOfWork().createLock(lockable, version);
+    }
+
+    public void removeLock(Lockable lockable) throws TransactionException {
+        getUnitOfWork().removeLock(lockable);
+    }
+
+    private Set listeners = new HashSet();
+
+    public void addListener(RepositoryListener listener) throws RepositoryException {
+        if (this.listeners.contains(listener)) {
+            throw new RepositoryException("The listener [" + listener
+                    + "] is already registered for node [" + this + "]!");
+        }
+        this.listeners.add(listener);
+    }
+
+    public boolean isListenerRegistered(RepositoryListener listener) {
+        return this.listeners.contains(listener);
+    }
+
+    private List events = new ArrayList();
+    private IdentityMap identityMap;
+
+    public synchronized void enqueueEvent(RepositoryEvent event) {
+        Validate.isTrue(event.getSession() == this, "event belongs to session");
+        if (!isModifiable()) {
+            throw new RuntimeException("Can't enqueue event in unmodifiable session!");
+        }
+        if (committing) {
+            throw new RuntimeException(
+                    "No events can be queued while the session is being committed. Event: ["
+                            + event.getDescriptor() + "]");
+        }
+        this.events.add(event);
+    }
+
+    protected IdentityMap getIdentityMap() {
+        return this.identityMap;
     }
 
     public boolean isModifiable() {
-        return getDocumentFactory().getSession().isModifiable();
+        return this.unitOfWork != null;
+    }
+
+    private String id;
+
+    public String getId() {
+        return this.id;
+    }
+
+    public String toString() {
+        return "Session " + getId();
+    }
+    
+    private UriHandler uriHandler;
+
+    public UriHandler getUriHandler() {
+        if (this.uriHandler == null) {
+            this.uriHandler = new UriHandlerImpl(getDocumentFactory());
+        }
+        return this.uriHandler;
     }
 
 }

Added: lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java?rev=742672&view=auto
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java (added)
+++ lenya/trunk/org.apache.lenya.core.impl/src/main/java/org/apache/lenya/cms/publication/UriHandlerImpl.java Mon Feb  9 18:49:13 2009
@@ -0,0 +1,73 @@
+/*
+ * 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;
+
+public class UriHandlerImpl implements UriHandler {
+
+    private DocumentFactory factory;
+
+    public UriHandlerImpl(DocumentFactory factory) {
+        this.factory = factory;
+    }
+
+    public Document getDocument(String webappUri) throws ResourceNotFoundException {
+        return this.factory.getFromURL(webappUri);
+    }
+
+    public boolean isDocument(String webappUri) {
+        return this.factory.isDocument(webappUri);
+    }
+
+    public Area getArea(String webappUri) throws ResourceNotFoundException {
+        URLInformation info = new URLInformation(webappUri);
+        return getPublication(info.getPublicationId()).getArea(info.getArea());
+    }
+
+    public Publication getPublication(String webappUri) throws ResourceNotFoundException {
+        String id = new URLInformation(webappUri).getPublicationId();
+        if (id == null) {
+            throw new ResourceNotFoundException("No publication for URI " + webappUri);
+        }
+        try {
+            return this.factory.getPublication(id);
+        } catch (PublicationException e) {
+            throw new ResourceNotFoundException(e);
+        }
+    }
+
+    public boolean isArea(String webappUri) {
+        URLInformation info = new URLInformation(webappUri);
+        String pubId = info.getPublicationId();
+        if (pubId != null && isPublication(pubId)) {
+            Publication pub = getPublication(pubId);
+            String area = info.getArea();
+            if (area != null && Arrays.asList(pub.getAreaNames()).contains(area)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean isPublication(String webappUri) {
+        String id = new URLInformation(webappUri).getPublicationId();
+        return id != null && this.factory.existsPublication(id);
+    }
+
+}

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/ac/impl/AbstractAccessControlTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/ac/impl/AbstractAccessControlTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/ac/impl/AbstractAccessControlTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/ac/impl/AbstractAccessControlTest.java Mon Feb  9 18:49:13 2009
@@ -34,12 +34,9 @@
 import org.apache.lenya.ac.PolicyManager;
 import org.apache.lenya.ac.User;
 import org.apache.lenya.cms.LenyaTestCase;
-import org.apache.lenya.cms.publication.DocumentFactory;
-import org.apache.lenya.cms.publication.DocumentUtil;
 import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationException;
-import org.apache.lenya.cms.repository.Session;
-import org.apache.lenya.cms.repository.SessionImpl;
+import org.apache.lenya.cms.publication.Repository;
+import org.apache.lenya.cms.publication.Session;
 
 /**
  * To change the template for this generated type comment go to Window>Preferences>Java>Code
@@ -53,15 +50,14 @@
     private ServiceSelector accessControllerResolverSelector;
     private AccessControllerResolver accessControllerResolver;
     private AccessController accessController;
-
-    protected org.apache.lenya.cms.repository.Session login(String userId)
+    private Repository repository;
+    
+    protected Session login(String userId)
             throws AccessControlException {
         return login(userId, TEST_PUB_ID);
     }
 
     protected Session login(String userId, String pubId) throws AccessControlException {
-        Session session = new SessionImpl(null, true, logger);
-        getRequest().setAttribute(Session.class.getName(), session);
 
         AccessController ac = getAccessController(session, pubId);
         AccreditableManager acMgr = ac.getAccreditableManager();
@@ -94,7 +90,8 @@
             getLogger().info("Accreditable: " + accrs[i]);
         }
 
-        session.setIdentity(identity);
+        Session session = getRepository().startSession(identity, true);
+        getRequest().setAttribute(Session.class.getName(), session);
         return session;
     }
 
@@ -117,7 +114,7 @@
                     "Using access controller resolver: ["
                             + this.accessControllerResolver.getClass() + "]");
 
-            Publication pub = getPublication(session, pubId);
+            Publication pub = session.getPublication(pubId);
             getLogger().info("Resolve access controller");
             getLogger().info(
                     "Publication directory: [" + pub.getDirectory().getAbsolutePath() + "]");
@@ -169,14 +166,6 @@
         return getAccessController().getAccreditableManager();
     }
 
-    protected DocumentFactory getFactory() {
-        return DocumentUtil.createDocumentFactory(getSession());
-    }
-
-    protected DocumentFactory getFactory(Session session) {
-        return DocumentUtil.createDocumentFactory(session);
-    }
-
     private Session session;
 
     protected Session getSession() {
@@ -194,15 +183,15 @@
         return USER_ID;
     }
 
-    protected Publication getPublication(Session session, String pubId) throws PublicationException {
-        return getFactory(session).getPublication(pubId);
+    protected Identity getIdentity() {
+        return getSession().getIdentity();
     }
 
-    protected Publication getPublication(String id) throws PublicationException {
-        return getFactory().getPublication(id);
+    public void setRepository(Repository repository) {
+        this.repository = repository;
     }
 
-    protected Identity getIdentity() {
-        return getSession().getIdentity();
+    public Repository getRepository() {
+        return repository;
     }
 }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/LenyaTestCase.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/LenyaTestCase.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/LenyaTestCase.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/LenyaTestCase.java Mon Feb  9 18:49:13 2009
@@ -44,6 +44,7 @@
 public class LenyaTestCase extends ContainerTestCase {
 
     protected DefaultContext context;
+    
 /*
     protected void addContext(DefaultContext context) {
         super.addContext(context);

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/metadata/MetaDataTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/metadata/MetaDataTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/metadata/MetaDataTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/metadata/MetaDataTest.java Mon Feb  9 18:49:13 2009
@@ -22,7 +22,6 @@
 import org.apache.lenya.ac.impl.AbstractAccessControlTest;
 import org.apache.lenya.cms.metadata.dublincore.DublinCore;
 import org.apache.lenya.cms.publication.Document;
-import org.apache.lenya.cms.publication.DocumentFactory;
 import org.apache.lenya.cms.publication.Publication;
 
 /**
@@ -36,7 +35,7 @@
      */
     public void testMetaData() throws Exception {
 
-        Publication publication = getPublication("test");
+        Publication publication = getSession().getPublication("test");
         Document doc = publication.getArea("authoring").getSite().getNode("/index").getLink("en").getDocument(); 
 
         String namespaceUri = "foobar";
@@ -92,9 +91,8 @@
             getManager().release(registry);
         }
         
-        DocumentFactory factory = getFactory();
-        Document source = factory.get(pub, Publication.AUTHORING_AREA, "/index", "en");
-        Document target = factory.get(pub, Publication.AUTHORING_AREA, "/index", "en");
+        Document source = pub.getArea(Publication.AUTHORING_AREA).getDocument("/index", "en");
+        Document target = pub.getArea(Publication.AUTHORING_AREA).getDocument("/index", "en");
         
         MetaData sourceMeta = source.getMetaData(NAMESPACE);
         sourceMeta.setValue("copy", "sourceCopy");

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentBuilderTest.java Mon Feb  9 18:49:13 2009
@@ -32,7 +32,7 @@
      * @see org.apache.lenya.cms.publication.DefaultDocumentTest#getDocument(DocumentTestSet)
      */
     protected Document getDocument(DocumentTestSet set) throws PublicationException {
-        Publication pub = getPublication("test");
-        return getFactory().getFromURL("/" + pub.getId() + "/" + set.getArea() + set.getUrl());
+        Publication pub = getSession().getPublication("test");
+        return getSession().getUriHandler().getDocument("/" + pub.getId() + "/" + set.getArea() + set.getUrl());
     }
 }
\ No newline at end of file

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DefaultDocumentTest.java Mon Feb  9 18:49:13 2009
@@ -52,7 +52,7 @@
         getLogger().info("Complete URL: " + document.getCanonicalWebappURL());
         getLogger().info("Extension:    " + document.getExtension());
 
-        Publication publication = getPublication("test");
+        Publication publication = getSession().getPublication("test");
         assertEquals(document.getPublication(), publication);
         assertEquals(document.getPath(), testSet.getPath());
         assertEquals(document.getArea(), testSet.getArea());
@@ -83,11 +83,11 @@
      */
     protected Document getDocument(DocumentTestSet testSet) throws PublicationException {
 
-        Publication pub = getPublication("test");
+        Publication pub = getSession().getPublication("test");
         String uuid = pub.getArea(testSet.getArea()).getSite().getNode(testSet.getPath()).getUuid();
         DocumentIdentifier id = new DocumentIdentifier(pub.getId(), testSet.getArea(), uuid, testSet
                 .getLanguage());
-        DocumentImpl document = new DocumentImpl(getFactory(), id, -1, logger);
+        DocumentImpl document = new DocumentImpl(getSession(), id, -1);
         document.setExtension(testSet.getExtension());
 
         return document;

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentFactoryTest.java Mon Feb  9 18:49:13 2009
@@ -36,15 +36,15 @@
      */
     public void testDocumentFactory() throws Exception {
         Session session = this.repository.getSession(getRequest());
-        DocumentFactory factoryA = new DocumentFactoryImpl(session.getDocumentFactory().getSession(), logger);
+        DocumentFactory factoryA = new DocumentFactoryImpl(session);
 
-        Publication publication = getPublication("test");
+        Publication publication = getSession().getPublication("test");
         
         Document docA1 = factoryA.get(publication, Publication.AUTHORING_AREA, "/index", "en");
         Document docA2 = factoryA.get(publication, Publication.AUTHORING_AREA, "/index", "en");
         assertSame(docA1, docA2);
         
-        DocumentFactory factoryB = new DocumentFactoryImpl(session.getDocumentFactory().getSession(), logger);
+        DocumentFactory factoryB = new DocumentFactoryImpl(session);
 
         Document docB1 = factoryB.get(publication, Publication.AUTHORING_AREA, "/index", "en");
         

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DocumentManagerTest.java Mon Feb  9 18:49:13 2009
@@ -34,39 +34,31 @@
  * Document manager test.
  */
 public class DocumentManagerTest extends AbstractAccessControlTest {
+    
+    private DocumentManager docManager;
 
     /**
      * Do the test.
      * @throws Exception
      */
     public void testDocumentManager() throws Exception {
-        DocumentManager docManager = null;
-        try {
-            docManager = (DocumentManager) getManager().lookup(DocumentManager.ROLE);
-            doTestMoveAll(docManager, "/doctypes", "/tutorial/doctypes");
-            doTestMoveAll(docManager, "/tutorial/doctypes", "/doctypes");
-            doTestCopyAll(docManager, "/doctypes", "/tutorial/doctypes");
-
-            String areaName1 = "authoring";
-            String areaName2 = "live";
-            String path1 = "/tutorial";
-            String path2 = "/doctypes";
-
-            doTestCopyToArea(docManager, areaName1, areaName2, path1, path2);
-
-        } finally {
-            if (docManager != null) {
-                getManager().release(docManager);
-            }
-        }
+        doTestMoveAll(getDocManager(), "/doctypes", "/tutorial/doctypes");
+        doTestMoveAll(getDocManager(), "/tutorial/doctypes", "/doctypes");
+        doTestCopyAll(getDocManager(), "/doctypes", "/tutorial/doctypes");
+
+        String areaName1 = "authoring";
+        String areaName2 = "live";
+        String path1 = "/tutorial";
+        String path2 = "/doctypes";
+
+        doTestCopyToArea(getDocManager(), areaName1, areaName2, path1, path2);
     }
 
     protected void doTestCopyToArea(DocumentManager docManager, String sourceAreaName,
             String destAreaName, String path1, String path2) throws PublicationException,
             SiteException {
-        
-        DocumentFactory factory = getFactory();
-        Publication pub = factory.getPublication("test");
+
+        Publication pub = getSession().getPublication("test");
         SiteStructure sourceArea = pub.getArea(sourceAreaName).getSite();
         SiteStructure destArea = pub.getArea(destAreaName).getSite();
 
@@ -76,10 +68,10 @@
         if (destArea.contains(path2)) {
             destArea.getNode(path2).delete();
         }
-        
+
         assertFalse(destArea.contains(path1));
         assertFalse(destArea.contains(path2));
-        
+
         // copy second node first to test correct ordering
         doTestCopyToArea(docManager, path2, sourceAreaName, destAreaName);
         doTestCopyToArea(docManager, path1, sourceAreaName, destAreaName);
@@ -109,8 +101,7 @@
 
     protected void doTestCopyToArea(DocumentManager docManager, String path, String areaName1,
             String areaName2) throws PublicationException {
-        DocumentFactory factory = getFactory();
-        Publication pub = factory.getPublication("test");
+        Publication pub = getSession().getPublication("test");
         Area area1 = pub.getArea(areaName1);
         Document doc = area1.getSite().getNode(path).getLink("en").getDocument();
         docManager.copyToArea(doc, areaName2);
@@ -118,12 +109,11 @@
 
     protected void doTestCopyAll(DocumentManager docManager, String sourcePath, String targetPath)
             throws SiteException, DocumentException, PublicationException {
-        DocumentFactory factory = getFactory();
-        Publication pub = factory.getPublication("test");
+        Publication pub = getSession().getPublication("test");
         Area authoring = pub.getArea("authoring");
 
         SiteNode sourceNode = authoring.getSite().getNode(sourcePath);
-        
+
         NodeSet nodes = SiteUtil.getSubSite(sourceNode);
         Document[] docs = nodes.getDocuments();
         Map doc2path = new HashMap();
@@ -146,26 +136,25 @@
             assertEquals(newDoc.getContentLength(), docs[i].getContentLength());
             assertFalse(newDoc.getUUID().equals(docs[i].getUUID()));
         }
-        
+
         String[] sourceNames = getChildNames(sourceNode);
         SiteNode targetNode = authoring.getSite().getNode(targetPath);
         String[] targetNames = getChildNames(targetNode);
         assertEquals(StringUtil.join(sourceNames, ","), StringUtil.join(targetNames, ","));
     }
 
-	protected String[] getChildNames(SiteNode node) {
-		SiteNode[] sourceChildren = node.getChildren();
+    protected String[] getChildNames(SiteNode node) {
+        SiteNode[] sourceChildren = node.getChildren();
         String[] names = new String[sourceChildren.length];
         for (int i = 0; i < names.length; i++) {
-        	names[i] = sourceChildren[i].getName();
+            names[i] = sourceChildren[i].getName();
         }
-		return names;
-	}
+        return names;
+    }
 
     protected void doTestMoveAll(DocumentManager docManager, String sourcePath, String targetPath)
             throws SiteException, DocumentException, PublicationException {
-        DocumentFactory factory = getFactory();
-        Publication pub = factory.getPublication("test");
+        Publication pub = getSession().getPublication("test");
         Area authoring = pub.getArea("authoring");
 
         SiteNode sourceNode = authoring.getSite().getNode(sourcePath);
@@ -189,10 +178,18 @@
             String newPath = docs[i].getPath();
             assertEquals(targetBase + oldPath, newPath);
         }
-        
+
         SiteNode targetNode = authoring.getSite().getNode(targetPath);
         String[] targetNames = getChildNames(targetNode);
         assertEquals(StringUtil.join(sourceNames, ","), StringUtil.join(targetNames, ","));
-        
+
+    }
+
+    public void setDocManager(DocumentManager docManager) {
+        this.docManager = docManager;
+    }
+
+    public DocumentManager getDocManager() {
+        return docManager;
     }
 }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/DublinCoreTest.java Mon Feb  9 18:49:13 2009
@@ -49,7 +49,7 @@
         
         login("lenya");
         
-        Publication publication = getPublication("test");
+        Publication publication = getSession().getPublication("test");
         
         Document doc = publication.getArea(AREA).getSite().getNode(PATH).getLink(LANGUAGE).getDocument();
         

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/PublicationTest.java Mon Feb  9 18:49:13 2009
@@ -34,22 +34,10 @@
      * @throws Exception
      */
     public void testPublication() throws Exception {
-
-        PublicationManager pubMgr = null;
-        try {
-            pubMgr = (PublicationManager) getManager().lookup(PublicationManager.ROLE);
-
-            Publication[] pubs = pubMgr.getPublications(getFactory());
-            for (int i = 0; i < pubs.length; i++) {
-                doTestPublication(pubs[i]);
-            }
-
-        } finally {
-            if (pubMgr != null) {
-                getManager().release(pubMgr);
-            }
+        Publication[] pubs = getSession().getPublications();
+        for (int i = 0; i < pubs.length; i++) {
+            doTestPublication(pubs[i]);
         }
-
     }
 
     protected void doTestPublication(Publication pub) throws PublicationException {
@@ -83,7 +71,7 @@
 
         String templateId = pub.getTemplateId();
         if (templateId != null) {
-            Publication template = pub.getFactory().getPublication(templateId);
+            Publication template = pub.getSession().getPublication(templateId);
             String[] templateTypes = template.getResourceTypeNames();
             for (int t = 0; t < templateTypes.length; t++) {
                 assertTrue(typeSet.contains(templateTypes[t]));

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/TestPageEnvelope.java Mon Feb  9 18:49:13 2009
@@ -23,8 +23,6 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.lenya.cms.repository.Session;
-import org.apache.lenya.cms.repository.SessionImpl;
 
 /**
  * To change the template for this generated type comment go to Window>Preferences>Java>Code
@@ -46,9 +44,8 @@
         setContext("");
 
         try {
-            Session session = new SessionImpl(null, false, logger);
-            DocumentFactory map = DocumentUtil.createDocumentFactory(session);
-            setDocument(map.getFromURL(url));
+            Session session = publication.getSession();
+            setDocument(session.getUriHandler().getDocument(url));
         } catch (Exception e) {
             throw new PageEnvelopeException(e);
         }

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/file/FilePublicationTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/file/FilePublicationTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/file/FilePublicationTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/publication/file/FilePublicationTest.java Mon Feb  9 18:49:13 2009
@@ -23,9 +23,9 @@
 import org.apache.lenya.ac.impl.AbstractAccessControlTest;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentException;
-import org.apache.lenya.cms.publication.DocumentFactory;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationException;
+import org.apache.lenya.cms.publication.Session;
 import org.apache.lenya.cms.site.SiteException;
 
 /**
@@ -58,18 +58,10 @@
      * @throws SiteException
      */
     public void testCopyDocument() throws PublicationException, DocumentException, SiteException {
-        testCopyDocument(Publication.AUTHORING_AREA,
-                sourceDocumentId,
-                sourceLanguage,
-                Publication.AUTHORING_AREA,
-                destinationDocumentId,
-                destinationLanguage);
-        testCopyDocument(Publication.AUTHORING_AREA,
-                sourceDocumentId,
-                sourceLanguage,
-                Publication.LIVE_AREA,
-                sourceDocumentId,
-                sourceLanguage);
+        testCopyDocument(Publication.AUTHORING_AREA, sourceDocumentId, sourceLanguage,
+                Publication.AUTHORING_AREA, destinationDocumentId, destinationLanguage);
+        testCopyDocument(Publication.AUTHORING_AREA, sourceDocumentId, sourceLanguage,
+                Publication.LIVE_AREA, sourceDocumentId, sourceLanguage);
     }
 
     /**
@@ -97,33 +89,28 @@
         getLogger().info("    Destination document ID: [" + _destinationDocumentId + "]");
         getLogger().info("    Destination language:    [" + _destinationLanguage + "]");
 
-        Publication publication = getPublication("test");
-        DocumentFactory map = getFactory();
+        Session session = getSession();
+        Publication publication = session.getPublication("test");
 
-        Document sourceDocument = map.get(publication,
-                sourceArea,
-                _sourceDocumentId,
+        Document sourceDocument = publication.getArea(sourceArea).getDocument(_sourceDocumentId,
                 _sourceLanguage);
-        Document destinationDocument = map.get(publication,
-                destinationArea,
-                _destinationDocumentId,
-                _destinationLanguage);
-/*
-        publication.copyDocument(sourceDocument, destinationDocument);
-
-        assertTrue(destinationDocument.exists());
-
-        TreeSiteManager manager = (TreeSiteManager) publication.getSiteManager(map);
-        SiteTree destinationTree = manager.getTree(destinationArea);
-        SiteTreeNode destinationNode = destinationTree.getNode(_destinationDocumentId);
-        assertNotNull(destinationNode);
-        Label destinationLabel = destinationNode.getLabel(_destinationLanguage);
-        assertNotNull(destinationLabel);
-
-        SiteTreeNode sourceNode = destinationTree.getNode(_sourceDocumentId);
-        Label sourceLabel = sourceNode.getLabel(_sourceLanguage);
-
-        assertTrue(destinationLabel.getLabel().equals(sourceLabel.getLabel()));
-*/
+        Document destinationDocument = publication.getArea(destinationArea).getDocument(
+                _destinationDocumentId, _destinationLanguage);
+        /*
+         * publication.copyDocument(sourceDocument, destinationDocument);
+         * 
+         * assertTrue(destinationDocument.exists());
+         * 
+         * TreeSiteManager manager = (TreeSiteManager) publication.getSiteManager(map); SiteTree
+         * destinationTree = manager.getTree(destinationArea); SiteTreeNode destinationNode =
+         * destinationTree.getNode(_destinationDocumentId); assertNotNull(destinationNode); Label
+         * destinationLabel = destinationNode.getLabel(_destinationLanguage);
+         * assertNotNull(destinationLabel);
+         * 
+         * SiteTreeNode sourceNode = destinationTree.getNode(_sourceDocumentId); Label sourceLabel =
+         * sourceNode.getLabel(_sourceLanguage);
+         * 
+         * assertTrue(destinationLabel.getLabel().equals(sourceLabel.getLabel()));
+         */
     }
 }
\ No newline at end of file

Modified: lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/rc/RevisionControllerTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/rc/RevisionControllerTest.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/rc/RevisionControllerTest.java (original)
+++ lenya/trunk/org.apache.lenya.core.impl/src/test/java/org/apache/lenya/cms/rc/RevisionControllerTest.java Mon Feb  9 18:49:13 2009
@@ -42,7 +42,7 @@
         DocumentManager docMgr = null;
         try {
             docMgr = (DocumentManager) getManager().lookup(DocumentManager.ROLE);
-            Document source = getPublication("test").getArea("authoring").getSite().getNode(
+            Document source = getSession().getPublication("test").getArea("authoring").getSite().getNode(
                     "/links").getLink("en").getDocument();
             Document target = docMgr.addVersion(source, "authoring", "es");
             target.delete();
@@ -52,7 +52,7 @@
             }
         }
 
-        getFactory().getSession().commit();
+        getSession().commit();
     }
 
     public void testRevisionController() throws RepositoryException, RevisionControlException {

Modified: lenya/trunk/org.apache.lenya.core.janitor/src/main/java/org/apache/lenya/cms/janitor/ContentJanitor.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.janitor/src/main/java/org/apache/lenya/cms/janitor/ContentJanitor.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.janitor/src/main/java/org/apache/lenya/cms/janitor/ContentJanitor.java (original)
+++ lenya/trunk/org.apache.lenya.core.janitor/src/main/java/org/apache/lenya/cms/janitor/ContentJanitor.java Mon Feb  9 18:49:13 2009
@@ -19,27 +19,22 @@
 
 import java.io.File;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.cocoon.processing.ProcessInfoProvider;
 import org.apache.cocoon.spring.configurator.WebAppContextUtils;
 import org.apache.lenya.cms.cocoon.source.SourceUtil;
 import org.apache.lenya.cms.observation.AbstractRepositoryListener;
 import org.apache.lenya.cms.observation.DocumentEvent;
 import org.apache.lenya.cms.observation.RepositoryEvent;
-import org.apache.lenya.cms.publication.DocumentFactory;
-import org.apache.lenya.cms.publication.DocumentUtil;
 import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.repository.RepositoryManager;
-import org.apache.lenya.cms.repository.RepositoryUtil;
-import org.apache.lenya.cms.repository.Session;
+import org.apache.lenya.cms.publication.Repository;
+import org.apache.lenya.cms.publication.Session;
 
 /**
  * The content janitor cleans up empty directories after a document is removed.
  */
 public class ContentJanitor extends AbstractRepositoryListener {
     
-    private RepositoryManager repositoryManager;
+    private Repository repository;
 
     public void eventFired(RepositoryEvent repoEvent) {
         
@@ -55,10 +50,8 @@
         try {
             ProcessInfoProvider process = (ProcessInfoProvider) WebAppContextUtils
                     .getCurrentWebApplicationContext().getBean(ProcessInfoProvider.ROLE);
-            HttpServletRequest request = process.getRequest();
-            Session session = RepositoryUtil.getSession(getRepositoryManager(), request);
-            DocumentFactory factory = DocumentUtil.createDocumentFactory(session);
-            Publication pub = factory.getPublication(event.getPublicationId());
+            Session session = this.repository.getSession(process.getRequest());
+            Publication pub = session.getPublication(event.getPublicationId());
             File contentFile = pub.getContentDirectory(event.getArea());
             String contentUri = contentFile.toURI().toString();
             SourceUtil.deleteEmptyCollections(contentUri, this.manager);
@@ -67,12 +60,8 @@
         }
     }
 
-    public void setRepositoryManager(RepositoryManager repositoryManager) {
-        this.repositoryManager = repositoryManager;
-    }
-
-    public RepositoryManager getRepositoryManager() {
-        return repositoryManager;
+    public void setRepository(Repository repository) {
+        this.repository = repository;
     }
 
 }

Modified: lenya/trunk/org.apache.lenya.core.linking/src/main/java/org/apache/lenya/cms/cocoon/components/modules/input/ProxyModule.java
URL: http://svn.apache.org/viewvc/lenya/trunk/org.apache.lenya.core.linking/src/main/java/org/apache/lenya/cms/cocoon/components/modules/input/ProxyModule.java?rev=742672&r1=742671&r2=742672&view=diff
==============================================================================
--- lenya/trunk/org.apache.lenya.core.linking/src/main/java/org/apache/lenya/cms/cocoon/components/modules/input/ProxyModule.java (original)
+++ lenya/trunk/org.apache.lenya.core.linking/src/main/java/org/apache/lenya/cms/cocoon/components/modules/input/ProxyModule.java Mon Feb  9 18:49:13 2009
@@ -30,9 +30,6 @@
 import org.apache.lenya.cms.linking.OutgoingLinkRewriter;
 import org.apache.lenya.cms.publication.Repository;
 import org.apache.lenya.cms.publication.Session;
-import org.apache.lenya.cms.repository.RepositoryException;
-import org.apache.lenya.cms.repository.RepositoryManager;
-import org.apache.lenya.cms.repository.RepositoryUtil;
 
 /**
  * <p>
@@ -88,8 +85,7 @@
         return value;
     }
 
-    protected String rewrite(Request request, String url) throws RepositoryException,
-            ConfigurationException {
+    protected String rewrite(Request request, String url) throws ConfigurationException {
         Session session = this.repository.getSession(request);
         LinkRewriter rewriter = new OutgoingLinkRewriter(session, request.getRequestURI(), request
                 .isSecure(), false, this.relativeUrls);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org