Author: xlawrence
Date: Wed Oct 24 17:00:22 2007
New Revision: 18973

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18973&repname=
=3Djahia
Log:
Resolve issue http://www.jahia.net/jira/browse/POSTE-23: Tri sur le site map

Use the JahiaPageComparator to sort the pages

Added:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/comparator/J=
ahiaPageComparator.java
Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/ajax/sitemap/GetCh=
ildPages.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/data/viewhelper/si=
temap/SiteMapViewHelper.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=3D18973=
&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 Wed Oct 24 17:00:22 2007
@@ -20,16 +20,10 @@
 import org.apache.struts.action.ActionForm;
 import org.apache.struts.action.ActionForward;
 import org.apache.struts.action.ActionMapping;
-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;
-import org.jahia.data.containers.JahiaContainer;
+import org.jahia.utils.comparator.JahiaPageComparator;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 =

@@ -38,17 +32,15 @@
 import javax.servlet.http.HttpServletResponse;
 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
- * =

+ *
  * @author Xavier Lawrence
  */
 public class GetChildPages extends SiteMapAbstractAction {
@@ -57,9 +49,10 @@
             .getLogger(GetChildPages.class);
 =

     public ActionForward execute(final ActionMapping mapping,
-            final ActionForm form, final HttpServletRequest request,
-            final HttpServletResponse response) throws 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
@@ -70,17 +63,13 @@
             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;
             }
 =

@@ -103,14 +92,11 @@
                 loadFlags =3D ContentPage.ACTIVE_PAGE_INFOS;
             }
 =

-            final Iterator children =3D currentObject.getContentPageChilds(
-                    currentUser, loadFlags, null, true);
-            final TreeSet orderedPage =3D new TreeSet(new PageSorter(jPara=
ms,
-                    new HashMap()));
+            final Iterator children =3D currentObject.getContentPageChilds=
(currentUser, loadFlags, null, true);
+            final TreeSet orderedPage =3D new TreeSet(new JahiaPageCompara=
tor(jParams, new HashMap()));
             while (children.hasNext()) {
                 final ContentPage child =3D (ContentPage) children.next();
-                if (getParameter(request, "noPickers", "false")
-                        .equalsIgnoreCase("false")
+                if (getParameter(request, "noPickers", "false").equalsIgno=
reCase("false")
                         || child.getPickedObject() =3D=3D null) {
                     if (child.checkReadAccess(currentUser))
                         orderedPage.add(child);
@@ -130,102 +116,10 @@
         } catch (Exception e) {
             logger.error("Unable to process the request !", e);
             if (!response.isCommitted()) {
-                response.sendError(
-                        HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_=
ERROR,
                         "Unable to Get Child Pages ! Msg: " + e.getMessage=
());
             }
         }
         return null;
     }
-
-    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;
-        }
-
-        /**
-         * 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;
-            }
-        }
-    }
 }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/data/viewhel=
per/sitemap/SiteMapViewHelper.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/data/viewhelper/sitemap/SiteMapViewHelper.j=
ava&rev=3D18973&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/data/viewhelper/si=
temap/SiteMapViewHelper.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/data/viewhelper/si=
temap/SiteMapViewHelper.java Wed Oct 24 17:00:22 2007
@@ -59,6 +59,7 @@
 import org.jahia.services.pages.JahiaPageService;
 import org.jahia.services.usermanager.JahiaUser;
 import org.jahia.services.version.EntryLoadRequest;
+import org.jahia.utils.comparator.JahiaPageComparator;
 =

 import java.io.Serializable;
 import java.util.*;
@@ -256,7 +257,7 @@
 =

             if (childObject instanceof ContentPage) {
                 final int pageID =3D childObject.getID();
-                final ContentPage contentPage =3D (ContentPage)childObject;
+                final ContentPage contentPage =3D (ContentPage) childObjec=
t;
                 // Stop loop if page has a deleted entry only.
                 if (this._pageInfosFlag < ContentPage.ARCHIVED_PAGE_INFOS
                         && contentPage.hasEntries(ContentPage.ARCHIVED_PAG=
E_INFOS) &&
@@ -335,19 +336,25 @@
     protected Iterator getPageChilds(ContentObject object) {
         final ContentPage page =3D (ContentPage) object;
         try {
-            Iterator pageChildsEnum =3D page.getContentPageChilds(_user, _=
pageInfosFlag, _languageCode, _directPageOnly);
+            final Iterator pageChildsEnum =3D page.getContentPageChilds(_u=
ser, _pageInfosFlag, _languageCode, _directPageOnly);
             if (pageChildsEnum =3D=3D null) {
-                pageChildsEnum =3D new ArrayList(0).iterator();
+                return new ArrayList(0).iterator();
             }
+            final ProcessingContext jParams =3D Jahia.getThreadParamBean();
+            // We need to take care of the ranking and the sorters in orde=
r to deliver the pages in the correct order
+            final TreeSet orderedPage =3D new TreeSet(new JahiaPageCompara=
tor(jParams, new HashMap()));
+            while (pageChildsEnum.hasNext()) {
+                orderedPage.add(pageChildsEnum.next());
+            }
+
             if (_pageInfosFlag =3D=3D (ContentPage.STAGING_PAGE_INFOS)) {
-                return pageChildsEnum; // In this case shortcut the next s=
teps for optmization.
+                return orderedPage.iterator(); // In this case shortcut th=
e next steps for optmization.
             }
 =

             // time based publishing state check
-            final ProcessingContext context =3D Jahia.getThreadParamBean();
             final String operationMode;
-            if (context !=3D null) {
-                operationMode =3D context.getOperationMode();
+            if (jParams !=3D null) {
+                operationMode =3D jParams.getOperationMode();
             } else {
                 operationMode =3D ParamBean.EDIT;
             }
@@ -358,8 +365,9 @@
             JahiaObjectDelegate delegate;
             boolean paramBeanTest =3D ParamBean.NORMAL.equals(operationMod=
e) || ParamBean.PREVIEW.equals(operationMode);
             boolean pageInfosFlagTest =3D (_pageInfosFlag =3D=3D (ContentP=
age.ACTIVE_PAGE_INFOS | ContentPage.STAGING_PAGE_INFOS));
-            while (pageChildsEnum.hasNext()) {
-                final ContentPage contentPage =3D (ContentPage) pageChilds=
Enum.next();
+            final Iterator iterator =3D orderedPage.iterator();
+            while (iterator.hasNext()) {
+                final ContentPage contentPage =3D (ContentPage) iterator.n=
ext();
                 if (_languageCode !=3D null) {
                     if (!contentPage.hasEntries(_pageInfosFlag)) {
                         continue; // This page does not fill the criterions

Added: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/comparato=
r/JahiaPageComparator.java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/branches/JAHIA=
-5-0-SP-BRANCH/core/src/java/org/jahia/utils/comparator/JahiaPageComparator=
.java&rev=3D18973&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/utils/comparator/J=
ahiaPageComparator.java (added)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/comparator/J=
ahiaPageComparator.java Wed Oct 24 17:00:22 2007
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2002-2006 Jahia Ltd
+ *
+ * Licensed under the JAHIA COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (J=
CDDL),
+ * Version 1.0 (the "License"), or (at your option) any later version; you=
 may
+ * not use this file except in compliance with the License. You should have
+ * received a copy of the License along with this program; if not, you may=
 obtain
+ * a copy of the License at
+ *
+ *  http://www.jahia.org/license/
+ *
+ * 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.jahia.utils.comparator;
+
+import org.jahia.params.ProcessingContext;
+import org.jahia.services.pages.ContentPage;
+import org.jahia.services.version.EntryLoadRequest;
+import org.jahia.services.containers.ContentContainer;
+import org.jahia.services.containers.ContentContainerList;
+import org.jahia.services.containers.ContainerFactory;
+import org.jahia.content.ContentObject;
+import org.jahia.data.containers.JahiaContainer;
+import org.jahia.exceptions.JahiaException;
+
+import java.util.Map;
+import java.util.List;
+import java.util.Comparator;
+
+/**
+ *
+ * Utility class that allows sorting Jahia pages using their ranking values
+ *
+ * @author Xavier Lawrence
+ */
+public class JahiaPageComparator implements Comparator {
+
+    private static final org.apache.log4j.Logger logger =3D org.apache.log=
4j.Logger.getLogger(JahiaPageComparator.class);
+    private ProcessingContext jParams;
+    private Map cachedContainerLists;
+
+    public JahiaPageComparator(ProcessingContext jParams, Map cachedContai=
nerLists) {
+        this.jParams =3D jParams;
+        this.cachedContainerLists =3D cachedContainerLists;
+    }
+
+    /**
+     * 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();
+
+        try {
+            final ContentObject pageField1 =3D p1.getParent(elr);
+            if (pageField1 =3D=3D null)
+                return 1;
+            final ContentContainer cont1 =3D (ContentContainer) pageField1=
.getParent(elr);
+            final ContentContainerList cList1 =3D (ContentContainerList) c=
ont1.getParent(elr);
+            final String property =3D cList1.getProperty("automatic_sort_h=
andler");
+            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) pageFi=
eld2.getParent(elr);
+                final ContentContainerList cList2 =3D (ContentContainerLis=
t) 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(cListI=
D);
+                    if (ctnIds =3D=3D null) {
+                        ctnIds =3D ContainerFactory.getInstance().getSorte=
redAndFilteredCtnIds(
+                                        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.getJahiaCon=
tainer(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) pageFi=
eld2.getParent(elr);
+                final JahiaContainer jahiaContainer2 =3D cont2.getJahiaCon=
tainer(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.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