Author: xlawrence
Date: Wed Oct 24 17:01:09 2007
New Revision: 18974
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18974&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:
trunk/core/src/java/org/jahia/utils/comparator/JahiaPageComparator.java
Modified:
trunk/core/src/java/org/jahia/ajax/sitemap/GetChildPages.java
trunk/core/src/java/org/jahia/data/viewhelper/sitemap/SiteMapViewHelper=
.java
Modified: trunk/core/src/java/org/jahia/ajax/sitemap/GetChildPages.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/ajax/sitemap/GetChildPages.java&rev=3D18974&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
--- trunk/core/src/java/org/jahia/ajax/sitemap/GetChildPages.java (original)
+++ trunk/core/src/java/org/jahia/ajax/sitemap/GetChildPages.java Wed Oct 2=
4 17:01:09 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: trunk/core/src/java/org/jahia/data/viewhelper/sitemap/SiteMapView=
Helper.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/data/viewhelper/sitemap/SiteMapViewHelper.java&rev=3D18974&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
--- trunk/core/src/java/org/jahia/data/viewhelper/sitemap/SiteMapViewHelper=
.java (original)
+++ trunk/core/src/java/org/jahia/data/viewhelper/sitemap/SiteMapViewHelper=
.java Wed Oct 24 17:01:09 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: trunk/core/src/java/org/jahia/utils/comparator/JahiaPageComparator.j=
ava
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/trunk/core/src=
/java/org/jahia/utils/comparator/JahiaPageComparator.java&rev=3D18974&repna=
me=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
--- trunk/core/src/java/org/jahia/utils/comparator/JahiaPageComparator.java=
(added)
+++ trunk/core/src/java/org/jahia/utils/comparator/JahiaPageComparator.java=
Wed Oct 24 17:01:09 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