Author: bpapez
Date: Mon Oct  1 21:23:35 2007
New Revision: 18720

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18720&repname=
=3Djahia
Log:
http://www.jahia.net/jira/browse/JAHIA-2382: AJAXed Sitemaps do not reflect=
 the current ctnlist ranking
- refactored the Comparator to be thread-safe
- consider the automatic container sorter if property is set for the contai=
ner list
- cache sorted container IDs per list to not get into performance troubles

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/ajax/sitemap/GetCh=
ildPages.java

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/ajax/sitemap=
/GetChildPages.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/ajax/sitemap/GetChildPages.java&rev=3D18720=
&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/ajax/sitemap/GetCh=
ildPages.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/ajax/sitemap/GetCh=
ildPages.java Mon Oct  1 21:23:35 2007
@@ -23,7 +23,9 @@
 import org.jahia.content.ContentObject;
 import org.jahia.exceptions.JahiaException;
 import org.jahia.params.ProcessingContext;
+import org.jahia.services.containers.ContainerFactory;
 import org.jahia.services.containers.ContentContainer;
+import org.jahia.services.containers.ContentContainerList;
 import org.jahia.services.pages.ContentPage;
 import org.jahia.services.usermanager.JahiaUser;
 import org.jahia.services.version.EntryLoadRequest;
@@ -37,44 +39,48 @@
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.TreeSet;
 =

 /**
- * Struts AJAX based Action that collects all the direct child pages from =
a given parent page. This action would
- * typically be used for a basic and simple sitemap
- *
+ * Struts AJAX based Action that collects all the direct child pages from =
a given parent page. This action would typically be used for a
+ * basic and simple sitemap
+ * =

  * @author Xavier Lawrence
  */
-public class GetChildPages extends SiteMapAbstractAction implements Compar=
ator {
+public class GetChildPages extends SiteMapAbstractAction {
 =

-    private static final org.apache.log4j.Logger logger =3D
-            org.apache.log4j.Logger.getLogger(GetChildPages.class);
-
-    private ProcessingContext jParams;
+    private static final org.apache.log4j.Logger logger =3D org.apache.log=
4j.Logger
+            .getLogger(GetChildPages.class);
 =

     public ActionForward execute(final ActionMapping mapping,
-                                 final ActionForm form,
-                                 final HttpServletRequest request,
-                                 final HttpServletResponse response) throw=
s IOException, ServletException {
+            final ActionForm form, final HttpServletRequest request,
+            final HttpServletResponse response) throws IOException,
+            ServletException {
         try {
             // Contains params that will have to given to the ParamBean Co=
nstructor for correct
             // initialization of the latter
             final String params =3D getParameter(request, response, PARAMS=
);
-            jParams =3D pcf.getContext(request, response,
-                    super.getServlet().getServletContext(), params);
+            ProcessingContext jParams =3D pcf.getContext(request, response=
, super
+                    .getServlet().getServletContext(), params);
 =

             final JahiaUser currentUser =3D jParams.getUser();
 =

             final String key =3D getXmlNodeValue(request, response, KEY);
-            final String isVersionning =3D getParameter(request, DISPLAY_P=
ARAM, "");
-            final int mode =3D (isVersionning.indexOf("versionning") > -1 =
? VERSIONNING : NORMAL);
+            final String isVersionning =3D getParameter(request, DISPLAY_P=
ARAM,
+                    "");
+            final int mode =3D (isVersionning.indexOf("versionning") > -1 =
? VERSIONNING
+                    : NORMAL);
             final ContentPage currentObject =3D (ContentPage) getContentOb=
jectFromString(key);
             if (currentObject =3D=3D null) {
-                logger.warn("Unable to Get Child Pages ! Object '" + key +=
 "' doesn't exist");
+                logger.warn("Unable to Get Child Pages ! Object '" + key
+                        + "' doesn't exist");
                 response.sendError(HttpServletResponse.SC_NOT_FOUND,
-                        "Unable to Get Child Pages ! Msg: Page '" + key + =
"' doesn't exist");
+                        "Unable to Get Child Pages ! Msg: Page '" + key
+                                + "' doesn't exist");
                 return null;
             }
 =

@@ -86,20 +92,28 @@
 =

             final int loadFlags;
             if (mode =3D=3D VERSIONNING) {
-                loadFlags =3D ContentPage.ACTIVE_PAGE_INFOS | ContentPage.=
STAGING_PAGE_INFOS |
-                        ContentPage.ARCHIVED_PAGE_INFOS;
-            } else if (! jParams.getOperationMode().equals(ProcessingConte=
xt.NORMAL)) {
-                loadFlags =3D ContentPage.ACTIVE_PAGE_INFOS | ContentPage.=
STAGING_PAGE_INFOS;
+                loadFlags =3D ContentPage.ACTIVE_PAGE_INFOS
+                        | ContentPage.STAGING_PAGE_INFOS
+                        | ContentPage.ARCHIVED_PAGE_INFOS;
+            } else if (!jParams.getOperationMode().equals(
+                    ProcessingContext.NORMAL)) {
+                loadFlags =3D ContentPage.ACTIVE_PAGE_INFOS
+                        | ContentPage.STAGING_PAGE_INFOS;
             } else {
                 loadFlags =3D ContentPage.ACTIVE_PAGE_INFOS;
             }
 =

-            final Iterator children =3D currentObject.getContentPageChilds=
(currentUser, loadFlags, null, true);
-            final TreeSet orderedPage =3D new TreeSet(this);
+            final Iterator children =3D currentObject.getContentPageChilds(
+                    currentUser, loadFlags, null, true);
+            final TreeSet orderedPage =3D new TreeSet(new PageSorter(jPara=
ms,
+                    new HashMap()));
             while (children.hasNext()) {
                 final ContentPage child =3D (ContentPage) children.next();
-                if (getParameter(request, "noPickers", "false").equalsIgno=
reCase("false") || child.getPickedObject() =3D=3D null) {
-                    if (child.checkReadAccess(currentUser)) orderedPage.ad=
d(child);
+                if (getParameter(request, "noPickers", "false")
+                        .equalsIgnoreCase("false")
+                        || child.getPickedObject() =3D=3D null) {
+                    if (child.checkReadAccess(currentUser))
+                        orderedPage.add(child);
                 }
             }
 =

@@ -107,60 +121,111 @@
             final HttpSession session =3D request.getSession();
             while (ite.hasNext()) {
                 final ContentPage child =3D (ContentPage) ite.next();
-                processPage(child, jParams, session, currentUser, locales,=
 resp, root, loadFlags,
-                        currentObject.getID(), mode);
+                processPage(child, jParams, session, currentUser, locales,
+                        resp, root, loadFlags, currentObject.getID(), mode=
);
             }
 =

             resp.appendChild(root);
             sendResponse(resp, response);
         } catch (Exception e) {
             logger.error("Unable to process the request !", e);
-            if (! response.isCommitted()) {
-                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_=
ERROR,
+            if (!response.isCommitted()) {
+                response.sendError(
+                        HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                         "Unable to Get Child Pages ! Msg: " + e.getMessage=
());
             }
         }
         return null;
     }
 =

-    /**
-     * Simple comparator that Compares 2 pages and returns the correct val=
ue regarding their corresponding
-     * ranking.
-     */
-    public int compare(final Object o1, final Object o2) {
-        final ContentPage p1 =3D (ContentPage) o1;
-        final ContentPage p2 =3D (ContentPage) o2;
-        final EntryLoadRequest elr =3D jParams.getEntryLoadRequest();
+    final class PageSorter implements Comparator {
+        private ProcessingContext jParams;
+        private Map cachedContainerLists;
+
+        public PageSorter(ProcessingContext jParams, Map cachedContainerLi=
sts) {
+            this.jParams =3D jParams;
+            this.cachedContainerLists =3D cachedContainerLists;
+        }
 =

-        try {
-            final ContentObject pageField1 =3D p1.getParent(elr);
-            if (pageField1 =3D=3D null) return 1;
-            final ContentContainer cont1 =3D (ContentContainer) pageField1=
.getParent(elr);
-            final JahiaContainer jahiaContainer1 =3D cont1.getJahiaContain=
er(jParams, elr);
-            if(jahiaContainer1=3D=3Dnull) return 1;
-            final int rank1 =3D jahiaContainer1.getRank();
-
-            final ContentObject pageField2 =3D p2.getParent(elr);
-            if (pageField2 =3D=3D null) return -1;
-            final ContentContainer cont2 =3D (ContentContainer) pageField2=
.getParent(elr);
-            final JahiaContainer jahiaContainer2 =3D cont2.getJahiaContain=
er(jParams, elr);
-            if(jahiaContainer2=3D=3Dnull) return -1;
-            final int rank2 =3D jahiaContainer2.getRank();
-
-            if (rank1 > rank2) {
-                return 1;
-            } else if (rank1 <=3D rank2) {
+        /**
+         * Simple comparator that Compares 2 pages and returns the correct=
 value regarding their corresponding ranking.
+         */
+        public int compare(final Object o1, final Object o2) {
+            final ContentPage p1 =3D (ContentPage) o1;
+            final ContentPage p2 =3D (ContentPage) o2;
+            final EntryLoadRequest elr =3D jParams.getEntryLoadRequest();
+
+            try {
+                final ContentObject pageField1 =3D p1.getParent(elr);
+                if (pageField1 =3D=3D null)
+                    return 1;
+                final ContentContainer cont1 =3D (ContentContainer) pageFi=
eld1
+                        .getParent(elr);
+                final ContentContainerList cList1 =3D (ContentContainerLis=
t) cont1
+                        .getParent(elr);
+                final String property =3D cList1
+                        .getProperty("automatic_sort_handler");
+                if (property !=3D null && property.trim().length() > 0) {
+                    final ContentObject pageField2 =3D p2.getParent(elr);
+                    if (pageField2 =3D=3D null)
+                        return -1;
+                    final ContentContainer cont2 =3D (ContentContainer) pa=
geField2
+                            .getParent(elr);
+                    final ContentContainerList cList2 =3D (ContentContaine=
rList) cont2
+                            .getParent(elr);
+                    if (cList1.getID() !=3D cList2.getID())
+                        return -1;
+                    else {
+                        Integer cListID =3D new Integer(cList1.getID());
+                        List ctnIds =3D (List) cachedContainerLists.get(cL=
istID);
+                        if (ctnIds =3D=3D null) {
+                            ctnIds =3D ContainerFactory.getInstance()
+                                    .getSorteredAndFilteredCtnIds(
+                                            jParams,
+                                            elr,
+                                            cList1.getJahiaContainerList(
+                                                    jParams, elr), null);
+                            cachedContainerLists.put(cListID, ctnIds);
+                        }
+
+                        return new Integer(ctnIds.indexOf(new Integer(cont1
+                                .getID()))).compareTo(new Integer(ctnIds
+                                .indexOf(new Integer(cont2.getID()))));
+                    }
+                } else {
+                    final JahiaContainer jahiaContainer1 =3D cont1
+                            .getJahiaContainer(jParams, elr);
+                    if (jahiaContainer1 =3D=3D null)
+                        return 1;
+                    final int rank1 =3D jahiaContainer1.getRank();
+
+                    final ContentObject pageField2 =3D p2.getParent(elr);
+                    if (pageField2 =3D=3D null)
+                        return -1;
+                    final ContentContainer cont2 =3D (ContentContainer) pa=
geField2
+                            .getParent(elr);
+                    final JahiaContainer jahiaContainer2 =3D cont2
+                            .getJahiaContainer(jParams, elr);
+                    if (jahiaContainer2 =3D=3D null)
+                        return -1;
+                    final int rank2 =3D jahiaContainer2.getRank();
+
+                    if (rank1 > rank2) {
+                        return 1;
+                    } else if (rank1 <=3D rank2) {
+                        return -1;
+                    } else {
+                        return new Integer(jahiaContainer1.getID())
+                                .compareTo(new Integer(jahiaContainer2.get=
ID()));
+                    }
+                }
+            } catch (ClassCastException ce) {
+                logger.debug("ClassCastException: " + ce);
+                return -1;
+            } catch (JahiaException je) {
+                logger.error("Error in Comparator", je);
                 return -1;
-            } else {
-                return new Integer(jahiaContainer1.getID()).compareTo(new =
Integer(jahiaContainer2.getID()));
             }
-
-        } catch (ClassCastException ce) {
-            logger.debug("ClassCastException: " + ce);
-            return -1;
-        } catch (JahiaException je) {
-            logger.error("Error in Comparator", je);
-            return -1;
         }
     }
 }

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to