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 2007/05/02 09:43:26 UTC

svn commit: r534338 - in /lenya/trunk/src/modules-core/workflow: java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java java/src/org/apache/lenya/cms/workflow/usecases/Publish.java usecases/deactivate.jx usecases/publish.jx

Author: andreas
Date: Wed May  2 00:43:25 2007
New Revision: 534338

URL: http://svn.apache.org/viewvc?view=rev&rev=534338
Log:
Lazy-load link lists for publish and deactivate usecases

Modified:
    lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java
    lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Publish.java
    lenya/trunk/src/modules-core/workflow/usecases/deactivate.jx
    lenya/trunk/src/modules-core/workflow/usecases/publish.jx

Modified: lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java?view=diff&rev=534338&r1=534337&r2=534338
==============================================================================
--- lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java (original)
+++ lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java Wed May  2 00:43:25 2007
@@ -22,6 +22,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
 import org.apache.lenya.cms.linking.LinkManager;
@@ -53,16 +54,18 @@
         super.doCheckPreconditions();
 
         if (!hasErrors()) {
+            
+            Document doc = getSourceDocument();
 
-            if (!getSourceDocument().getArea().equals(Publication.AUTHORING_AREA)) {
+            if (!doc.getArea().equals(Publication.AUTHORING_AREA)) {
                 addErrorMessage("This usecase can only be invoked from the authoring area.");
                 return;
             }
 
-            if (!getSourceDocument().existsAreaVersion(Publication.LIVE_AREA)) {
+            if (!doc.existsAreaVersion(Publication.LIVE_AREA)) {
                 addErrorMessage("This usecase can only be invoked when the live version exists.");
             } else {
-                Document liveDoc = getSourceDocument().getAreaVersion(Publication.LIVE_AREA);
+                Document liveDoc = doc.getAreaVersion(Publication.LIVE_AREA);
                 NodeSet subSite = SiteUtil.getSubSite(this.manager, liveDoc.getLink().getNode());
                 SiteNode node = liveDoc.getLink().getNode();
                 subSite.remove(node);
@@ -70,34 +73,9 @@
                 if (!subSite.isEmpty()) {
                     addErrorMessage("You can't deactivate this document because it has children.");
                 }
-            }
-
-            setParameter(LINKS_TO_DOCUMENT, getLinksToDocument());
-        }
-    }
-
-    protected Document[] getLinksToDocument() {
-        Set docs = new HashSet();
-        LinkManager linkMgr = null;
-        try {
-            linkMgr = (LinkManager) this.manager.lookup(LinkManager.ROLE);
-            Document liveVersion = getSourceDocument().getAreaVersion(Publication.LIVE_AREA);
-            Document[] referencingDocs = linkMgr.getReferencingDocuments(liveVersion);
-            for (int d = 0; d < referencingDocs.length; d++) {
-                Document doc = referencingDocs[d];
-                if (doc.getArea().equals(Publication.LIVE_AREA)) {
-                    docs.add(doc);
-                }
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        finally {
-            if (linkMgr != null) {
-                this.manager.release(linkMgr);
+                setParameter(LINKS_TO_DOCUMENT, new LinkList(this.manager, doc));
             }
         }
-        return (Document[]) docs.toArray(new Document[docs.size()]);
     }
 
     /**
@@ -167,6 +145,60 @@
 
     protected String getEvent() {
         return "deactivate";
+    }
+    
+    /**
+     * A list of links pointing to a document. Allows lazy loading rom the usecase view.
+     */
+    public static class LinkList {
+        
+        private Document document;
+        private Document[] documents;
+        private ServiceManager manager;
+        
+        /**
+         * @param manager The manager.
+         * @param doc The document to resolve the links from.
+         */
+        public LinkList(ServiceManager manager, Document doc) {
+            this.manager = manager;
+            this.document = doc;
+        }
+        
+        /**
+         * @return The link documents.
+         */
+        public Document[] getDocuments() {
+            if (this.documents == null) {
+                this.documents = getLinksToDocument();
+            }
+            return this.documents;
+        }
+        
+        protected Document[] getLinksToDocument() {
+            Set docs = new HashSet();
+            LinkManager linkMgr = null;
+            try {
+                linkMgr = (LinkManager) this.manager.lookup(LinkManager.ROLE);
+                Document liveVersion = this.document.getAreaVersion(Publication.LIVE_AREA);
+                Document[] referencingDocs = linkMgr.getReferencingDocuments(liveVersion);
+                for (int d = 0; d < referencingDocs.length; d++) {
+                    Document doc = referencingDocs[d];
+                    if (doc.getArea().equals(Publication.LIVE_AREA)) {
+                        docs.add(doc);
+                    }
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            finally {
+                if (linkMgr != null) {
+                    this.manager.release(linkMgr);
+                }
+            }
+            return (Document[]) docs.toArray(new Document[docs.size()]);
+        }
+
     }
 
 }

Modified: lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Publish.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Publish.java?view=diff&rev=534338&r1=534337&r2=534338
==============================================================================
--- lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Publish.java (original)
+++ lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Publish.java Wed May  2 00:43:25 2007
@@ -28,6 +28,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.components.ContextHelper;
 import org.apache.cocoon.environment.Request;
@@ -93,40 +94,10 @@
         setParameter(SCHEDULE_TIME, format.format(now));
 
         setParameter(SEND_NOTIFICATION, Boolean.TRUE);
-
-        setParameter(UNPUBLISHED_LINKS, getUnpublishedLinks());
-    }
-
-    protected Document[] getUnpublishedLinks() {
-        Set docs = new HashSet();
-        LinkManager linkMgr = null;
-        LinkResolver resolver = null;
-        try {
-            linkMgr = (LinkManager) this.manager.lookup(LinkManager.ROLE);
-            resolver = (LinkResolver) this.manager.lookup(LinkResolver.ROLE);
-            org.apache.lenya.cms.linking.Link[] links = linkMgr.getLinksFrom(getSourceDocument());
-            for (int i = 0; i < links.length; i++) {
-                LinkTarget target = resolver.resolve(getSourceDocument(), links[i].getUri());
-                if (target.exists()) {
-                    Document doc = target.getDocument();
-                    if (!doc.existsAreaVersion(Publication.LIVE_AREA)) {
-                        docs.add(doc);
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        } finally {
-            if (linkMgr != null) {
-                this.manager.release(linkMgr);
-            }
-            if (resolver != null) {
-                this.manager.release(resolver);
-            }
-        }
-        return (Document[]) docs.toArray(new Document[docs.size()]);
+        
+        setParameter(UNPUBLISHED_LINKS, new LinkList(this.manager, getSourceDocument()));
     }
-
+    
     /**
      * @see org.apache.lenya.cms.usecase.AbstractUsecase#getNodesToLock()
      */
@@ -355,6 +326,66 @@
             path += "/" + steps[s];
             s++;
         }
+    }
+    
+    /**
+     * A list of links originating from a document. Allows lazy loading rom the usecase view.
+     */
+    public static class LinkList {
+        
+        private Document document;
+        private Document[] documents;
+        private ServiceManager manager;
+        
+        /**
+         * @param manager The manager.
+         * @param doc The document to resolve the links from.
+         */
+        public LinkList(ServiceManager manager, Document doc) {
+            this.manager = manager;
+            this.document = doc;
+        }
+        
+        /**
+         * @return The link documents.
+         */
+        public Document[] getDocuments() {
+            if (this.documents == null) {
+                this.documents = getUnpublishedLinks();
+            }
+            return this.documents;
+        }
+        
+        protected Document[] getUnpublishedLinks() {
+            Set docs = new HashSet();
+            LinkManager linkMgr = null;
+            LinkResolver resolver = null;
+            try {
+                linkMgr = (LinkManager) this.manager.lookup(LinkManager.ROLE);
+                resolver = (LinkResolver) this.manager.lookup(LinkResolver.ROLE);
+                org.apache.lenya.cms.linking.Link[] links = linkMgr.getLinksFrom(this.document);
+                for (int i = 0; i < links.length; i++) {
+                    LinkTarget target = resolver.resolve(this.document, links[i].getUri());
+                    if (target.exists()) {
+                        Document doc = target.getDocument();
+                        if (!doc.existsAreaVersion(Publication.LIVE_AREA)) {
+                            docs.add(doc);
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            } finally {
+                if (linkMgr != null) {
+                    this.manager.release(linkMgr);
+                }
+                if (resolver != null) {
+                    this.manager.release(resolver);
+                }
+            }
+            return (Document[]) docs.toArray(new Document[docs.size()]);
+        }
+
     }
 
 }

Modified: lenya/trunk/src/modules-core/workflow/usecases/deactivate.jx
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/usecases/deactivate.jx?view=diff&rev=534338&r1=534337&r2=534338
==============================================================================
--- lenya/trunk/src/modules-core/workflow/usecases/deactivate.jx (original)
+++ lenya/trunk/src/modules-core/workflow/usecases/deactivate.jx Wed May  2 00:43:25 2007
@@ -48,7 +48,8 @@
                 "<jx:out value="${title}"/>"
               </td>
             </tr>
-            <jx:if test="${!usecase.hasErrors() &amp;&amp; usecase.getParameter('linksToDocument').size() &gt; 0}">
+            <jx:set var="linksToDocument" value="${usecase.getParameter('linksToDocument').getDocuments()}"/>
+            <jx:if test="${!usecase.hasErrors() &amp;&amp; linksToDocument.size() &gt; 0}">
               <tr>
                 <td class="lenya-entry-caption" valign="top">
                   <p>
@@ -57,7 +58,7 @@
                 </td>
                 <td>
                   <ul>
-                    <jx:forEach var="link" items="${usecase.getParameter('linksToDocument')}">
+                    <jx:forEach var="link" items="${linksToDocument}">
                       <li>
                         <a href="${request.contextPath}${link.getCanonicalWebappURL()}">
                           <jx:out value="${link.getMetaData('http://purl.org/dc/elements/1.1/').getFirstValue('title')}"/></a>

Modified: lenya/trunk/src/modules-core/workflow/usecases/publish.jx
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/usecases/publish.jx?view=diff&rev=534338&r1=534337&r2=534338
==============================================================================
--- lenya/trunk/src/modules-core/workflow/usecases/publish.jx (original)
+++ lenya/trunk/src/modules-core/workflow/usecases/publish.jx Wed May  2 00:43:25 2007
@@ -78,8 +78,8 @@
                 </ul>
               </td>
             </tr>
-            <jx:if test="${usecase.getParameter('unpublishedLinks') != null &amp;&amp;
-              usecase.getParameter('unpublishedLinks').size() &gt; 0}">
+            <jx:set var="unpublishedLinks" value="${usecase.getParameter('unpublishedLinks').getDocuments()}"/>
+            <jx:if test="${unpublishedLinks != null &amp;&amp; unpublishedLinks.size() &gt; 0}">
               <tr>
                 <td class="lenya-entry-caption" valign="top">
                   <p>
@@ -88,7 +88,7 @@
                 </td>
                 <td>
                   <ul>
-                    <jx:forEach var="link" items="${usecase.getParameter('unpublishedLinks')}">
+                    <jx:forEach var="link" items="${unpublishedLinks}">
                       <li>
                         <a href="${request.contextPath}${link.getCanonicalWebappURL()}">
                           <jx:out value="${link.getMetaData('http://purl.org/dc/elements/1.1/').getFirstValue('title')}"/></a>



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