Author: knguyen
Date: Mon Nov  5 12:34:46 2007
New Revision: 19043

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19043&repname=
=3Djahia
Log:
- refactored ContainerMetadataSorter by using DB Order query instead of in =
memory ordering.
- refactored ContainerMetadataSorter and ContainerFilterByDefinitions as Hi=
bernate Query.
- optimization of ContainerFiltersByCategories.

Modified:
    trunk/core/src/java/org/jahia/data/containers/ContainerFilterBean.java
    trunk/core/src/java/org/jahia/data/containers/ContainerFilterByCategori=
es.java
    trunk/core/src/java/org/jahia/data/containers/ContainerFilterByContaine=
rDefinitions.java
    trunk/core/src/java/org/jahia/data/containers/ContainerMetadataSorterBe=
an.java
    trunk/core/src/java/org/jahia/hibernate/dao/JahiaContainerDAO.java
    trunk/core/src/java/org/jahia/hibernate/manager/JahiaContainerManager.j=
ava
    trunk/core/src/java/org/jahia/services/containers/ContainerFactory.java

Modified: trunk/core/src/java/org/jahia/data/containers/ContainerFilterBean=
.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/data/containers/ContainerFilterBean.java&rev=3D19043&repname=3Djah=
ia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/containers/ContainerFilterBean.java =
(original)
+++ trunk/core/src/java/org/jahia/data/containers/ContainerFilterBean.java =
Mon Nov  5 12:34:46 2007
@@ -1219,6 +1219,51 @@
 =

     //--------------------------------------------------------------------=
------
     /**
+     * Returns an array of cntids that are workflow=3Dstaging and versioni=
d=3D-1 (deleted)
+     *
+     * @param ctnListID
+     * @return
+     * @throws JahiaException
+     */
+    static public HashSet getDeletedContainersSet(int ctnListID)
+    throws JahiaException
+    {
+        StringBuffer buff =3D new StringBuffer("SELECT DISTINCT id_jahia_c=
tn_entries FROM jahia_ctn_entries WHERE workflow_state>1 AND version_id=3D-=
1 ");
+        if ( ctnListID > 0 ){
+            buff.append(" AND listid_jahia_ctn_entries=3D?");
+        }
+
+        Connection dbConn =3D null;
+        PreparedStatement stmt =3D null;
+        ResultSet rs =3D null;
+
+        HashSet datas =3D new HashSet();
+
+        try
+        {
+            dbConn =3D org.jahia.services.database.ConnectionDispenser.get=
Connection();
+            stmt =3D dbConn.prepareStatement(buff.toString() );
+            if ( ctnListID>0 ){
+                stmt.setInt(1, ctnListID);
+            }
+            rs =3D stmt.executeQuery();
+
+            while (rs.next()) {
+                datas.add(new Integer(rs.getInt(1)));
+            }
+        }
+        catch (SQLException se)
+        {
+            logger.error("Error in getDeletedContainers() : ", se);
+        } finally {
+
+            closeStatement (stmt);
+        }
+        return datas;
+    }
+
+    //--------------------------------------------------------------------=
------
+    /**
      * Returns an array of fields that are in staging.
      *
      * @param ctnListID

Modified: trunk/core/src/java/org/jahia/data/containers/ContainerFilterByCa=
tegories.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/data/containers/ContainerFilterByCategories.java&rev=3D19043&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/data/containers/ContainerFilterByCategori=
es.java (original)
+++ trunk/core/src/java/org/jahia/data/containers/ContainerFilterByCategori=
es.java Mon Nov  5 12:34:46 2007
@@ -109,18 +109,13 @@
             throws JahiaException {
         BitSet result =3D new BitSet();
         try {
-            List containers =3D getContainers(this.categories, -1, null); =
// all sites search
-            int size =3D containers.size();
-            for (int i =3D 0; i < size; i++) {
-                ContentContainer contentContainer =3D
-                        (ContentContainer) containers.get(i);
-                if (contentContainer.getParentContainerListID() =3D=3D ctn=
ListID) {
-                    result.set(contentContainer.getID());
-                }
-            }
+            result =3D  getContainers(this.categories, -1, null, ctnListID=
, false);
         } catch (Throwable t) {
             logger.debug("Exception :", t);
         }
+        if ( result =3D=3D null ){
+            result =3D new BitSet();
+        }
 =

         if (this.withAllContainersOfCompoundContainerList) {
             int ctnListId =3D this.containerFilters.getCtnListID();
@@ -132,11 +127,13 @@
                 result.set(I.intValue());
             }
         }
+        /*
         ContainerFilterByLoadRequest cfblr =3D
                 new ContainerFilterByLoadRequest(this.entryLoadRequest);
         BitSet result2 =3D cfblr.doFilter(ctnListID);
-
         result.and(result2);
+        */
+
         return result;
 =

     }
@@ -205,17 +202,13 @@
             throws JahiaException {
         BitSet result =3D new BitSet();
         try {
-            List containers =3D getContainers(this.categories, siteId, con=
tainerDefinitionName);
-            int size =3D containers.size();
-            for (int i =3D 0; i < size; i++) {
-                ContentContainer contentContainer =3D
-                        (ContentContainer) containers.get(i);
-
-                result.set(contentContainer.getID());
-            }
+            result =3D getContainers(this.categories, siteId, containerDef=
initionName, listId, true);
         } catch (Throwable t) {
             logger.debug("Exception :", t);
         }
+        if ( result =3D=3D null ){
+            result =3D new BitSet();
+        }
 =

         if (this.withAllContainersOfCompoundContainerList) {
             Vector ids =3D ServicesRegistry.getInstance().getJahiaContaine=
rsService()
@@ -226,10 +219,11 @@
                 result.set(I.intValue());
             }
         }
+        /*
         ContainerFilterByLoadRequest cfblr =3D
                 new ContainerFilterByLoadRequest(this.entryLoadRequest);
         BitSet result2 =3D cfblr.doFilterBySite(siteId, containerDefinitio=
nName, listId);
-        result.and(result2);
+        result.and(result2);*/
         return result;
     }
 =

@@ -254,12 +248,35 @@
         return (getCategoriesSearchQuery() + "_" + loadRequest);
     }
 =

-    private List getContainers(Set categories, int siteId, String containe=
rDefinitionName)
+    private BitSet getContainers(Set categories, int siteId, String contai=
nerDefinitionName, int ctnListId,
+                               boolean siteFiltering)
             throws JahiaException {
 =

         List val =3D new ArrayList();
         Iterator iterator =3D categories.iterator();
         Category category;
+        BitSet bits =3D null;
+        if ( siteFiltering ){
+            ArrayList defNames =3D new ArrayList();
+            if ( containerDefinitionName !=3D null && !"".equals(container=
DefinitionName.trim()) ){
+                defNames.add(containerDefinitionName);
+            }
+            ContainerFilterByContainerDefinitions filter =3D
+                    new ContainerFilterByContainerDefinitions((String[])de=
fNames.toArray(new String[]{}),
+                    this.entryLoadRequest);
+            if ( this.containerFilters.isSiteModeFiltering() &&
+                    ( siteId>0 || defNames.size()>0)){
+                bits =3D filter.doFilterBySite(siteId,"",this.containerFil=
ters.getCtnListID());
+            } else if ( defNames.size()>0 ){
+                bits =3D filter.doFilterBySite(siteId,"",this.containerFil=
ters.getCtnListID());
+            }
+        } else {
+            ContainerFilterByContainerDefinitions filter =3D
+                    new ContainerFilterByContainerDefinitions(new String[]=
{},
+                    this.entryLoadRequest);
+            bits =3D filter.doFilter(ctnListId);
+        }
+        BitSet result =3D new BitSet();
         while (iterator.hasNext()) {
             category =3D (Category) iterator.next();
             List allChildrenObjectKeys =3D category.getChildObjectKeys();
@@ -268,6 +285,11 @@
                 ObjectKey curObjectKey =3D (ObjectKey) allChildObjectKeysI=
ter.
                         next();
                 if (curObjectKey.getType().equals(ContentContainerKey.CONT=
AINER_TYPE)) {
+                    if (bits!=3Dnull && !bits.get(curObjectKey.getIdInType=
())){
+                        continue;
+                    }
+                    result.set(curObjectKey.getIdInType());
+                    /*
                     try {
                         ContentContainer contentContainer =3D
                                 (ContentContainer) ContentContainer.getIns=
tance(curObjectKey);
@@ -290,11 +312,11 @@
                         }
                     } catch (Throwable t) {
                         logger.debug("Error loading contentContainer " + c=
urObjectKey.toString());
+                    }*/
                     }
                 }
             }
-        }
-        return val;
+        return result;
     }
 =

     private String getCategoriesSearchQuery() {

Modified: trunk/core/src/java/org/jahia/data/containers/ContainerFilterByCo=
ntainerDefinitions.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/data/containers/ContainerFilterByContainerDefinitions.java&rev=3D1=
9043&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/containers/ContainerFilterByContaine=
rDefinitions.java (original)
+++ trunk/core/src/java/org/jahia/data/containers/ContainerFilterByContaine=
rDefinitions.java Mon Nov  5 12:34:46 2007
@@ -23,18 +23,21 @@
 =

 package org.jahia.data.containers;
 =

-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.BitSet;
-
 import org.jahia.exceptions.JahiaException;
+import org.jahia.hibernate.manager.JahiaContainerManager;
+import org.jahia.hibernate.manager.SpringContextSingleton;
+import org.jahia.hibernate.model.JahiaCtnEntryPK;
+import org.jahia.services.fields.ContentField;
 import org.jahia.services.version.EntryLoadRequest;
 import org.jahia.utils.JahiaTools;
+import org.springframework.context.ApplicationContext;
+
 import java.io.Serializable;
-import org.jahia.services.fields.ContentField;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.*;
 =

 =

 /**
@@ -350,6 +353,91 @@
             String containerDefinitionName, int listId)
     throws JahiaException
     {
+        Map parameters =3D new HashMap();
+        StringBuffer buff =3D new StringBuffer("SELECT c.comp_id FROM Jahi=
aContainer c WHERE ");
+        if (siteId > 0) {
+            buff.append(" c.siteId=3D :siteId");
+            parameters.put("siteId",new Integer(siteId));
+            buff.append(" AND ");
+        }
+        if (this.containerDefinitionNames.length>0){
+            buff.append(" ( ");
+            for (int d =3D 0; d < this.containerDefinitionNames.length; d+=
+) {
+                if (this.containerDefinitionNames[d] !=3D null) {
+                    buff.append(" c.ctndef.name =3D :ctnDefName" + d);
+                    parameters.put("ctnDefName"+d,this.containerDefinition=
Names[d]);
+                    if (d<this.containerDefinitionNames.length-1){
+                        buff.append(" OR ");
+                    }
+                }
+            }
+            buff.append(" ) AND ");
+        }
+        if ( entryLoadRequest.isCurrent()){
+            buff.append("c.comp_id.workflowState");
+            buff.append("=3D");
+            buff.append(EntryLoadRequest.ACTIVE_WORKFLOW_STATE);
+        } else if ( entryLoadRequest.isStaging() ) {
+            buff.append(" c.comp_id.workflowState");
+            buff.append(">");
+            buff.append(EntryLoadRequest.VERSIONED_WORKFLOW_STATE);
+        } else {
+            buff.append("c.comp_id.versionId");
+            buff.append("=3D");
+            buff.append(entryLoadRequest.getVersionID());
+        }
+
+        BitSet bits =3D new BitSet();
+
+        ApplicationContext context =3D SpringContextSingleton.getInstance(=
).getContext();
+        JahiaContainerManager containerMgr =3D (JahiaContainerManager) con=
text.getBean(JahiaContainerManager.class.getName());
+        List results =3D containerMgr.executeQuery(buff.toString(),paramet=
ers);
+        if ( results !=3D null && !results.isEmpty() ){
+            JahiaCtnEntryPK compId =3D null;
+            Iterator it =3D results.iterator();
+            Set stagedEntries =3D new HashSet();
+            while (it.hasNext()){
+                compId =3D (JahiaCtnEntryPK)it.next();
+                if (compId.getWorkflowState().intValue()>EntryLoadRequest.=
ACTIVE_WORKFLOW_STATE){
+                    stagedEntries.add(compId.getId());
+                }
+            }
+            it =3D results.iterator();
+            while (it.hasNext()){
+                compId =3D (JahiaCtnEntryPK)it.next();
+                if ( compId.getWorkflowState().intValue() =3D=3D EntryLoad=
Request.ACTIVE_WORKFLOW_STATE
+                    && stagedEntries.contains(compId.getId()) ){
+                    continue;
+                } else if ( compId.getWorkflowState().intValue() > EntryLo=
adRequest.ACTIVE_WORKFLOW_STATE
+                    && compId.getVersionId().intValue() =3D=3D -1){
+                    continue;
+                }
+                bits.set(compId.getId().intValue());
+            }
+        }
+        return bits;
+    }
+
+    //--------------------------------------------------------------------=
------
+    /**
+     *
+     * The expected result is a bit set of matching container ids for a gi=
ven siteId.
+     * if siteId =3D -1 , return result from all sites
+     *
+     * The containerDefinitionName is ignored here,  it is only kept due t=
o the implemented
+     * [EMAIL PROTECTED] ContainerFilterInterface} Interface. The internal 
containerD=
efinitionNames array is
+     * used instead and is initialized by
+     * [EMAIL PROTECTED] #ContainerFilterByContainerDefinitions (String[] 
containerDe=
finitionNames,EntryLoadRequest entryLoadRequest)}
+     *
+     * @param containerDefinitionName, IGNORED
+     * @param siteId
+     * @return BitSet bits, the expected result as a bit set of matching c=
tn ids,each bit position set to true correspond to matching ctn ids.
+     * @throws JahiaException
+     */
+    private BitSet doFilteringBySiteOld (int siteId,
+            String containerDefinitionName, int listId)
+    throws JahiaException
+    {
         String fieldFilterQuery =3D this.getSelectBySiteID(siteId, contain=
erDefinitionName,true);
         if (fieldFilterQuery =3D=3D null && !fieldFilterQuery.trim().equal=
s("")) {
             return null;

Modified: trunk/core/src/java/org/jahia/data/containers/ContainerMetadataSo=
rterBean.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/data/containers/ContainerMetadataSorterBean.java&rev=3D19043&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/data/containers/ContainerMetadataSorterBe=
an.java (original)
+++ trunk/core/src/java/org/jahia/data/containers/ContainerMetadataSorterBe=
an.java Mon Nov  5 12:34:46 2007
@@ -22,27 +22,38 @@
 =

 package org.jahia.data.containers;
 =

-import java.util.BitSet;
-import java.util.Collections;
-import java.util.Vector;
-import java.util.Locale;
-import java.text.Collator;
-
-import org.jahia.content.JahiaObject;
+import org.apache.regexp.RE;
+import org.apache.regexp.RESyntaxException;
+import org.jahia.bin.Jahia;
+import org.jahia.content.ContentDefinition;
+import org.jahia.data.fields.ExpressionMarker;
+import org.jahia.data.fields.JahiaDateField;
 import org.jahia.data.fields.JahiaField;
 import org.jahia.data.fields.LoadFlags;
 import org.jahia.exceptions.JahiaException;
+import org.jahia.exceptions.JahiaPageNotFoundException;
+import org.jahia.hibernate.dao.JahiaContainerDAO;
+import org.jahia.hibernate.manager.JahiaContainerManager;
+import org.jahia.hibernate.manager.SpringContextSingleton;
 import org.jahia.params.ProcessingContext;
 import org.jahia.params.SoapParamBean;
 import org.jahia.registries.ServicesRegistry;
+import org.jahia.resourcebundle.ResourceBundleMarker;
 import org.jahia.services.containers.ContentContainer;
 import org.jahia.services.fields.ContentField;
+import org.jahia.services.fields.ContentFieldTypes;
+import org.jahia.services.pages.ContentPage;
 import org.jahia.services.sites.JahiaSite;
 import org.jahia.services.usermanager.JahiaUser;
 import org.jahia.services.version.EntryLoadRequest;
-import org.jahia.resourcebundle.*;
-import org.jahia.data.fields.*;
-import org.jahia.content.ContentDefinition;
+import org.jahia.utils.JahiaTools;
+import org.springframework.context.ApplicationContext;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.*;
 =

 /**
  * Sort containers on metadata.
@@ -315,136 +326,376 @@
 =

     //--------------------------------------------------------------------=
------
     /**
+     *
+     * @param BitSet bits,     any bit position sset to true must correspond =
to a ctn id to include in the result.
+     *                                         if you want all ctn ids in the 
result, gieve a null BitSet.
+     * @return Vector, vector of sorted ctn ids.
+     */
+    protected Vector doStringSort(BitSet bits) throws JahiaException
+    {
+        ApplicationContext context =3D SpringContextSingleton.getInstance(=
).getContext();
+        JahiaContainerManager containerMgr =3D (JahiaContainerManager) con=
text.getBean(JahiaContainerManager.class.getName());
+        List ctnIds =3D containerMgr.getSortedContainerIds(new Integer(thi=
s.ctnListID),new Integer(this.siteId),
+                new Boolean(siteLevel),containerDefinitionName, fieldName,=
 this.entryLoadRequest,false,false,
+                this.ASC_Ordering);
+        Vector v =3D new Vector();
+        if ( ctnIds !=3D null && !ctnIds.isEmpty() ){
+            Iterator it =3D ctnIds.iterator();
+            Integer workflowState =3D null;
+            Long versionId =3D null;
+            Integer ctnId =3D null;
+            Object[] row =3D null;
+            List orderedIds =3D new ArrayList();
+            Set stagedEntries =3D new HashSet();
+            while ( it.hasNext() ){
+                row =3D (Object[])it.next();
+                workflowState =3D (Integer)row[1];
+                versionId =3D (Long)row[2];
+                ctnId =3D (Integer)row[3];
+                if ( workflowState.intValue() > EntryLoadRequest.ACTIVE_WO=
RKFLOW_STATE ){
+                    workflowState =3D new Integer(EntryLoadRequest.STAGING=
_WORKFLOW_STATE);
+                }
+                if (bits !=3D null && !bits.get(ctnId.intValue())){
+                    continue;
+                }
+                if ( workflowState.intValue() > EntryLoadRequest.ACTIVE_WO=
RKFLOW_STATE ){
+                    stagedEntries.add(ctnId);
+                }
+                orderedIds.add(new TmpData(ctnId,workflowState,versionId));
+            }
+            it =3D orderedIds.iterator();
+            TmpData data =3D null;
+            int wfs =3D 0;
+            while (it.hasNext()){
+                data =3D (TmpData)it.next();
+                wfs =3D data.getWorkflowState().intValue();
+                if ( wfs =3D=3D EntryLoadRequest.ACTIVE_WORKFLOW_STATE && =
stagedEntries.contains(data.getCtnId()) ) {
+                    continue;
+                } else if ( wfs > EntryLoadRequest.ACTIVE_WORKFLOW_STATE &=
& data.getVersionId().intValue() =3D=3D -1 ){
+                    continue;
+                }
+                v.add(data.getCtnId());
+            }
+        }
+        return v;
+    }
+
+    private class TmpData {
+        private Integer ctnId;
+        private Integer workflowState;
+        private Long versionId;
+
+        public  TmpData(Integer ctnId, Integer workflowState, Long version=
Id) {
+            this.ctnId =3D ctnId;
+            this.workflowState =3D workflowState;
+            this.versionId =3D versionId;
+        }
+
+        public Integer getCtnId() {
+            return ctnId;
+        }
+
+        public void setCtnId(Integer ctnId) {
+            this.ctnId =3D ctnId;
+        }
+
+        public Integer getWorkflowState() {
+            return workflowState;
+        }
+
+        public void setWorkflowState(Integer workflowState) {
+            this.workflowState =3D workflowState;
+        }
+
+        public Long getVersionId() {
+            return versionId;
+        }
+
+        public void setVersionId(Long versionId) {
+            this.versionId =3D versionId;
+        }
+    }
+
+    //--------------------------------------------------------------------=
------
+    /**
      * Load an hashtable of pair/value (ctnID,fieldValue) for a given ctnl=
ist and a given fieldName.
      *
+     *
      * @param int ctnListID, the container list id
      * @param String fieldName, the fieldName
      * @return Vector.
      */
-    protected Vector getFieldValues(int ctnListID, String fieldName,
-                                    boolean convertValueAsLong, BitSet bit=
s)
+    protected Vector getFieldValues(int ctnListID, String fieldName, boole=
an convertValueAsLong, BitSet bits)
     throws JahiaException
     {
-        Locale locale =3D this.getEntryLoadRequest().getFirstLocale(true);
-        Vector datas =3D new Vector();
-        SoapParamBean jParams =3D new SoapParamBean(site,user);
-        Vector containerIds =3D new Vector();
-        if ( !this.siteLevel ){
-            containerIds =3D ServicesRegistry.getInstance().getJahiaContai=
nersService()
-                .getctnidsInList(ctnListID, this.getEntryLoadRequest());
-        } else {
-            if ( siteId > 0 ){
-                containerIds =3D ServicesRegistry.getInstance().
-                               getJahiaContainersService().getCtnIds(siteI=
d);
-
-            } else {
-                containerIds =3D ServicesRegistry.getInstance().
-                               getJahiaContainersService().getCtnIds();
+
+        Set deletedCtns =3D ContainerFilterBean.getDeletedContainersSet(ct=
nListID);
+        Set stagingFields =3D getStagingFields(ctnListID,siteId,containerD=
efinitionName,fieldName,this.entryLoadRequest);
+
+        StringBuffer buff =3D new StringBuffer("SELECT DISTINCT b.id_jahia=
_obj,b.id_jahia_fields_data,b.value_jahia_fields_data,b.workflow_state,b.la=
nguage_code,b.type_jahia_fields_data FROM jahia_ctn_entries a, jahia_fields=
_data b, jahia_fields_def c ");
+        if (this.containerDefinitionName !=3D null &&
+            !"".equals(this.containerDefinitionName.trim()) ) {
+            buff.append(", jahia_ctn_def d ");
+        }
+        buff.append(" WHERE ");
+
+        if ( !this.siteLevel && this.ctnListID>0 ){
+            buff.append(" a.listid_jahia_ctn_entries=3D");
+            buff.append(ctnListID);
+            buff.append(" AND ");
+        }
+        if (this.siteId > 0) {
+            buff.append(" a.jahiaid_jahia_ctn_entries=3D");
+            buff.append(this.siteId);
+            buff.append(" AND b.jahiaid_jahia_fields_data=3D");
+            buff.append(this.siteId);
+            buff.append(" AND ");
             }
+        if (this.containerDefinitionName !=3D null &&
+            !"".equals(this.containerDefinitionName.trim()) ) {
+            buff.append(" a.ctndefid_jahia_ctn_entries=3Dd.id_jahia_ctn_de=
f ");
+            buff.append(" AND d.name_jahia_ctn_def=3D'");
+            buff.append(JahiaTools.quote(this.containerDefinitionName));
+            buff.append("' AND ");
         }
-        int size =3D containerIds.size();
-        int id =3D 0;
-        ContentContainer contentContainer =3D null;
-        ContentField contentField =3D null;
-        JahiaField jahiaField =3D null;
-        String fieldValue =3D null;
-        Object obj =3D null;
-        ContentDefinition contentDefinition =3D null;
-        boolean checkMetadata =3D false;
-        for ( int i=3D0 ; i<size; i++ ){
-            id =3D ((Integer)containerIds.get(i)).intValue();
-            if ( bits !=3D null && !bits.get(id) ){
-                continue;
+
+        buff.append(" ( a.id_jahia_ctn_entries =3D b.id_jahia_obj AND b.ty=
pe_jahia_obj=3D'ContentContainer' AND b.fielddefid_jahia_fields_data =3D c.=
id_jahia_fields_def AND c.name_jahia_fields_def=3D'");
+        buff.append(JahiaTools.quote(fieldName));
+        buff.append("' ) AND (");
+        buff.append(ContainerFilterBean.buildMultilangAndWorlflowQuery(thi=
s.entryLoadRequest,true));
+        buff.append(") ORDER BY ");
+        buff.append(ContainerFilterBean.FIELD_ID);
+        buff.append(",");
+        buff.append(ContainerFilterBean.FIELD_WORKFLOW_STATE);
+
+        Connection dbConn;
+        Statement stmt =3D null;
+        ResultSet rs;
+
+        Locale locale =3D this.getEntryLoadRequest().getFirstLocale(true);
+        if ( locale =3D=3D null ){
+            locale =3D Locale.ENGLISH;
             }
-            contentContainer =3D ContentContainer.getContainer(id);
+
+        Vector datas =3D new Vector();
+        HashMap maps =3D new HashMap();
+        try
+        {
+            dbConn =3D org.jahia.services.database.ConnectionDispenser.get=
Connection();
+            stmt =3D dbConn.createStatement();
+            rs =3D stmt.executeQuery( buff.toString() );
+            while (rs.next())
+            {
+                int ctnID =3D rs.getInt(1);
+                int fieldID =3D rs.getInt(2);
+                String fieldValue =3D rs.getString(3);
+                int workflowState =3D rs.getInt(4);
+                String languageCode =3D rs.getString(5);
+                int type =3D rs.getInt(6);
+                if(type =3D=3D ContentFieldTypes.PAGE) {
+                    try {
+                        fieldValue =3D ContentPage.getPage(Integer.parseIn=
t(fieldValue)).getTitle(entryLoadRequest);
+                    } catch (JahiaPageNotFoundException e) {
             fieldValue =3D "";
-            checkMetadata =3D false;
-            if ( contentContainer !=3D null ){
+                    }
+                } else if (type =3D=3D ContentFieldTypes.FILE) {
+                    String[] arrays =3D fieldValue.split("/");
+                    fieldValue =3D arrays[arrays.length-1];
+                } else if (type =3D=3D ContentFieldTypes.BIGTEXT) {
+                    fieldValue =3D ContentField.getField(fieldID).getValue=
(Jahia.getThreadParamBean(), entryLoadRequest);
+                    if (fieldValue !=3D null) {
+                        fieldValue =3D JahiaTools.html2text(fieldValue);
                 try {
-                    contentDefinition =3D ContentDefinition.
-                                        getContentDefinitionInstance(
-                        contentContainer
-                        .getDefinitionKey(this.getEntryLoadRequest()));
+                            fieldValue =3D (new RE("<(.*?)>")).subst(field=
Value, "");
+                        } catch (RESyntaxException re) {
+                            logger.error(re.toString(), re);
                 } catch ( Throwable t ){
-                    logger.debug(t);
+                            logger.error(t.toString(), t);
                 }
-                if ( contentDefinition !=3D null ){
-                    if (this.siteId > 0) {
-                        if (this.siteId =3D=3D contentContainer.getSiteID()
-                            && (this.containerDefinitionName =3D=3D null ||
-                                this.containerDefinitionName.equals(
-                            contentDefinition.getName()))) {
-                            checkMetadata =3D true;
-                        }
-                    } else {
-                        if (this.containerDefinitionName =3D=3D null ||
-                            this.containerDefinitionName.equals(
-                            contentDefinition.getName())) {
-                            checkMetadata =3D true;
-                        }
-                    }
-                }
-                if (checkMetadata) {
-                    //MC: because ContainerMetadataSorterBean extends Cont=
ainerSorterBean, it only supports filtering on
-                    //one field, as opposed to ContainerSorterByContainerD=
efinition. So we only retrieve the first field:
-                    contentField =3D contentContainer.getMetadata(this.get=
SortingFieldNames()[0]);
-                    if (contentField !=3D null) {
-                        jahiaField =3D ServicesRegistry.getInstance().
-                                     getJahiaFieldService()
-                                     .loadField(contentField.getID(), Load=
Flags.ALL, jParams,
-                                                this.getEntryLoadRequest()=
);
-                        if (jahiaField !=3D null) {
-                            if ( jahiaField instanceof JahiaDateField ){
-                                fieldValue =3D (String)jahiaField.getObjec=
t();
-                            } else {
-                                fieldValue =3D jahiaField.getRawValue();
                             }
                         }
+
+                if (fieldValue!=3Dnull && (bits =3D=3D null || bits.get(ct=
nID)) ){
+                    if ( this.entryLoadRequest.isCurrent()
+                         || !deletedCtns.contains(new Integer(ctnID))){
+                        if ( workflowState > EntryLoadRequest.ACTIVE_WORKF=
LOW_STATE ){
+                            workflowState =3D EntryLoadRequest.STAGING_WOR=
KFLOW_STATE;
                     }
 =

-                    if (jParams !=3D null) {
+                        if (Jahia.getThreadParamBean() !=3D null) {
                         // expression marker
-                        ExpressionMarker exprMarker =3D ExpressionMarker.
-                            parseMarkerValue(fieldValue,
-                                             jParams);
+                            ExpressionMarker exprMarker =3D ExpressionMark=
er.parseMarkerValue(fieldValue, Jahia.getThreadParamBean());
                         if (exprMarker !=3D null) {
                             try {
                                 String value =3D exprMarker.getValue();
                                 if (value !=3D null && !"".equals(value)) {
                                     fieldValue =3D value;
                                 }
-                            } catch (Throwable t) {
-                                logger.debug(
-                                    "Problem while evaluating expression "=
 +
-                                    exprMarker.getExpr(), t);
+                                }
+                                catch (Throwable t) {
+                                    logger.debug("Problem while evaluating=
 expression " + exprMarker.getExpr(), t);
                             }
                         }
                     }
 =

                     // resbundle marker
-                    ResourceBundleMarker resMarker =3D ResourceBundleMarke=
r.
-                        parseMarkerValue(fieldValue);
+                        ResourceBundleMarker resMarker =3D ResourceBundleM=
arker.parseMarkerValue(fieldValue);
                     if (resMarker !=3D null) {
                         try {
                             String value =3D resMarker.getValue(locale);
                             if (value !=3D null && !"".equals(value)) {
                                 fieldValue =3D value;
                             }
-                        } catch (Throwable t) {
+                            }
+                            catch (Throwable t) {
+                                logger.debug("Problem while evaluating res=
ource " + fieldValue, t);
+                            }
                         }
+
+                        TempField aField =3D new TempField(fieldID,ctnID,0=
,workflowState,languageCode,fieldValue);
+                        String key =3D fieldID + "_" + workflowState + "_"=
 + languageCode;
+                        maps.put(key,aField);
                     }
+                }
+                        }
+                    }
+        catch (SQLException se)
+        {
+            String errorMsg =3D "Error in getFieldValues : " + se.getMessa=
ge();
+            logger.error( errorMsg, se);
+        } finally {
+
+            closeStatement (stmt);
+        }
 =

+        HashSet addedIds =3D new HashSet();
+        Iterator iterator =3D maps.values().iterator();
+        String valueToSort;
+        while ( iterator.hasNext() ){
+            TempField aField =3D (TempField)iterator.next();
+            if ( !addedIds.contains(new Integer(aField.id)) ){
+                String key =3D aField.id + "_" + aField.workflowState + "_=
" +
+                             locale.toString();
+                if (!aField.languageCode.equals(ContentField.SHARED_LANGUA=
GE)
+                    && maps.containsKey(key) &&
+                    !aField.languageCode.equals(locale.toString())) {
+                    continue;
+                } else if (!aField.languageCode.equals(ContentField.SHARED=
_LANGUAGE) && !maps.containsKey(key)) {
+                    if (aField.workflowState>=3D2 && maps.containsKey(aFie=
ld.id + "_1_" +locale.toString())) {
+                        continue;
+                    }
+                    // this field doesn't exist in the given language, so =
sort it as "" value
+                    aField.value =3D "";
+                }
+                Object obj;
+                valueToSort =3D aField.value;
+                if ( this.fieldValueProvider !=3D null ){
+                    valueToSort =3D this.fieldValueProvider.getFieldValue(=
aField.id, Jahia.getThreadParamBean(),
+                            this.getEntryLoadRequest(), aField.value);
+                    if ( valueToSort =3D=3D null ){
+                        valueToSort =3D "";
+                    }
+                }
                     if (convertValueAsLong) {
-                        obj =3D new DataBean(contentContainer.getID(),
-                                           fieldValue);
+                    obj =3D new DataBean(aField.ctnID, valueToSort);
                     } else {
-                        obj =3D new StrDataBean(contentContainer.getID(), =
fieldValue);
+                    obj =3D new StrDataBean(aField.ctnID, valueToSort);
                     }
-                    if (obj !=3D null) {
+                if (this.entryLoadRequest.isCurrent()) {
                         datas.add(obj);
+                    addedIds.add(new Integer(aField.id));
+                } else if (this.entryLoadRequest.isStaging()
+                           &&
+                           aField.workflowState >
+                           EntryLoadRequest.ACTIVE_WORKFLOW_STATE) {
+                    datas.add(obj);
+                    addedIds.add(new Integer(aField.id));
+                } else if (aField.workflowState =3D=3D
+                           EntryLoadRequest.ACTIVE_WORKFLOW_STATE
+                           && !stagingFields.contains(new Integer(aField.i=
d))) {
+                    datas.add(obj);
+                    addedIds.add(new Integer(aField.id));
+                }
+            }
+        }
+
+        return datas;
+    }
+
+    //--------------------------------------------------------------------=
------
+    /**
+     * Returns an array of fields that are in staging.
+     *
+     * @param ctnListID
+     * @param siteId
+     * @param containerDefinitionName
+     * @param fieldName
+     * @param loadRequest
+     * @return
+     * @throws JahiaException
+     */
+    protected Set getStagingFields(int ctnListID, int siteId,
+                                         String containerDefinitionName, S=
tring fieldName,
+                                         EntryLoadRequest loadRequest)
+    throws JahiaException
+    {
+
+        StringBuffer buff =3D new StringBuffer("SELECT DISTINCT b.id_jahia=
_fields_data FROM jahia_ctn_entries a, jahia_fields_data b, jahia_fields_de=
f c ");
+        if (containerDefinitionName !=3D null &&
+            !"".equals(containerDefinitionName.trim()) ) {
+            buff.append(", jahia_ctn_def d ");
+        }
+        buff.append(" WHERE ");
+
+        if ( !this.siteLevel && ctnListID>0 ){
+            buff.append(" a.listid_jahia_ctn_entries=3D");
+            buff.append(ctnListID);
+            buff.append(" AND ");
+        }
+        if (this.siteId > 0) {
+            buff.append(" a.jahiaid_jahia_ctn_entries=3D");
+            buff.append(this.siteId);
+            buff.append(" AND b.jahiaid_jahia_fields_data=3D");
+            buff.append(this.siteId);
+            buff.append(" AND ");
                     }
+        if (containerDefinitionName !=3D null &&
+            !"".equals(containerDefinitionName.trim()) ) {
+            buff.append(" a.ctndefid_jahia_ctn_entries=3Dd.id_jahia_ctn_de=
f ");
+            buff.append(" AND d.name_jahia_ctn_def=3D'");
+            buff.append(JahiaTools.quote(containerDefinitionName));
+            buff.append("' AND ");
+        }
+
+        buff.append(" ( a.id_jahia_ctn_entries =3D b.id_jahia_obj AND b.ty=
pe_jahia_obj=3D'ContentContainer' AND b.fielddefid_jahia_fields_data =3D c.=
id_jahia_fields_def AND c.name_jahia_fields_def=3D'");
+        buff.append(JahiaTools.quote(fieldName));
+        buff.append("' ) AND b.workflow_state>1 AND (");
+        buff.append(ContainerFilterBean.buildMultilangAndWorlflowQuery(ent=
ryLoadRequest));
+        buff.append(") ");
+
+        Connection dbConn;
+        Statement stmt =3D null;
+        ResultSet rs;
+
+        HashSet datas =3D new HashSet();
+
+        try
+        {
+            dbConn =3D org.jahia.services.database.ConnectionDispenser.get=
Connection();
+            stmt =3D dbConn.createStatement();
+            rs =3D stmt.executeQuery( buff.toString() );
+
+            while (rs.next()) {
+                datas.add(new Integer(rs.getInt(1)));
                 }
             }
+        catch (SQLException se)
+        {
+            String errorMsg =3D "Error in getStagingFields() : " + se.getM=
essage();
+            logger.error(errorMsg, se);
+        } finally {
+
+            closeStatement (stmt);
         }
         return datas;
     }

Modified: trunk/core/src/java/org/jahia/hibernate/dao/JahiaContainerDAO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/dao/JahiaContainerDAO.java&rev=3D19043&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/hibernate/dao/JahiaContainerDAO.java (ori=
ginal)
+++ trunk/core/src/java/org/jahia/hibernate/dao/JahiaContainerDAO.java Mon =
Nov  5 12:34:46 2007
@@ -26,15 +26,13 @@
 import org.hibernate.Criteria;
 import org.hibernate.HibernateException;
 import org.hibernate.Session;
+import org.hibernate.Query;
 import org.hibernate.criterion.Expression;
 import org.hibernate.criterion.Projections;
 import org.hibernate.criterion.Property;
-import org.jahia.bin.Jahia;
 import org.jahia.content.ContentContainerKey;
-import org.jahia.hibernate.model.JahiaContainer;
-import org.jahia.hibernate.model.JahiaContainerProperty;
-import org.jahia.hibernate.model.JahiaContainerPropertyPK;
-import org.jahia.hibernate.model.JahiaCtnEntryPK;
+import org.jahia.hibernate.model.*;
+import org.jahia.services.fields.ContentField;
 import org.jahia.services.version.EntryLoadRequest;
 import org.jahia.utils.JahiaTools;
 import org.springframework.orm.ObjectRetrievalFailureException;
@@ -1076,6 +1074,154 @@
                              "where p.comp_id.name=3D? and p.value=3D?", n=
ew Object[]{name, value});
     }
 =

+    public List getSortedContainerIds(Integer ctListId, Integer siteId, Bo=
olean siteLevel,
+                                      String containerDefinitionName, Stri=
ng fieldName,
+                                      EntryLoadRequest loadRequest, boolea=
n ignoreLang, boolean stagingOnly,
+                                      boolean ascendingOrder) {
+
+        StringBuffer buff =3D new StringBuffer(1024);
+        HashMap parameters =3D new HashMap();
+        parameters.put("fieldName",fieldName);
+        parameters.put("contentType",ContentContainerKey.CONTAINER_TYPE);
+        buff.append(" SELECT f.comp_id.id, f.comp_id.workflowState, f.comp=
_id.versionId, f.metadataOwnerId FROM JahiaFieldsData f ");
+        boolean addSiteParam =3D false;
+        boolean addContainerDefinitionNameParam =3D false;
+        boolean addContainerListIdParam =3D false;
+        if ( siteLevel !=3D null && siteLevel.booleanValue() ){
+            if (siteId !=3D null && siteId.intValue()>0 ){
+                parameters.put("siteId",siteId);
+                addSiteParam =3D true;
+            }
+        } else if ( (siteLevel=3D=3Dnull || !siteLevel.booleanValue()) ){
+            if ( containerDefinitionName !=3D null && !"".equals(container=
DefinitionName.trim()) ){
+                buff.append(", JahiaContainer c ");
+                parameters.put("containerDefinitionName",containerDefiniti=
onName);
+                addContainerDefinitionNameParam =3D true;
+            } else if (ctListId !=3D null && ctListId.intValue()>0) {
+                buff.append(", JahiaContainer c ");
+                parameters.put("ctListId",ctListId);
+                addContainerListIdParam =3D true;
+            }
+        }
+        buff.append(" WHERE f.fieldDefinition.name=3D :fieldName AND f.met=
adataOwnerType=3D :contentType ");
+        if ( addSiteParam ){
+            buff.append(" AND f.siteId=3D :siteId ");
+        }
+        if ( addContainerDefinitionNameParam ){
+            buff.append(" AND c.ctndef.name=3D :containerDefinitionName ");
+        }
+        if ( addContainerListIdParam ){
+            buff.append(" AND c.listid=3D :ctListId ");
+        }
+        if (addContainerDefinitionNameParam||addContainerListIdParam){
+            buff.append(" AND c.comp_id.id=3Df.metadataOwnerId ");
+        }
+        appendMultilangAndWorlflowParams(buff, parameters, loadRequest, ig=
noreLang, stagingOnly);
+        buff.append(" ORDER BY f.value ");
+        if ( !ascendingOrder ){
+            buff.append(" DESC ");
+        }
+        Query query =3D this.getSession().createQuery(buff.toString());
+        Iterator it =3D parameters.keySet().iterator();
+        while ( it.hasNext() ){
+            String name =3D (String)it.next();
+            Object parameter =3D parameters.get(name);
+            query.setParameter(name,parameter);
+        }
+        //query.setMaxResults(10000);
+        return query.list();
+
+    }
+
+    /**
+     *
+     * @param query
+     * @param params
+     * @param entryLoadRequest
+     * @param ignoreLang
+     * @param stagingOnly
+     */
+    private void appendMultilangAndWorlflowParams(  StringBuffer query,
+                                                    List params,
+                                                    EntryLoadRequest entry=
LoadRequest,
+                                                    boolean ignoreLang,
+                                                    boolean stagingOnly ){
+
+        if ( entryLoadRequest.isCurrent()){
+            query.append(" AND f.comp_id.workflowState =3D ");
+            query.append(EntryLoadRequest.ACTIVE_WORKFLOW_STATE);
+        } else if ( entryLoadRequest.isStaging() ) {
+            query.append(" AND f.comp_id.workflowState > ");
+            if ( stagingOnly ){
+                query.append(EntryLoadRequest.ACTIVE_WORKFLOW_STATE);
+            } else {
+                query.append(EntryLoadRequest.VERSIONED_WORKFLOW_STATE);
+            }
+        } else {
+            query.append(" AND f.comp_id.versionId =3D ");
+            query.append(entryLoadRequest.getVersionID());
+        }
+        if ( !ignoreLang ) {
+            String languageCode =3D entryLoadRequest.getFirstLocale(true).
+                toString();
+            query.append(" AND (");
+            query.append("f.comp_id.languageCode =3D ? OR f.comp_id.langua=
geCode=3D ? ");
+            params.add(languageCode);
+            params.add(ContentField.SHARED_LANGUAGE);
+            query.append(" ) ");
+        }
+    }
+
+    /**
+     *
+     * @param query
+     * @param params
+     * @param entryLoadRequest
+     * @param ignoreLang
+     * @param stagingOnly
+     */
+    private void appendMultilangAndWorlflowParams(  StringBuffer query,
+                                                    HashMap params,
+                                                    EntryLoadRequest entry=
LoadRequest,
+                                                    boolean ignoreLang,
+                                                    boolean stagingOnly ){
+
+        if ( entryLoadRequest.isCurrent()){
+            query.append(" AND f.comp_id.workflowState =3D ");
+            query.append(EntryLoadRequest.ACTIVE_WORKFLOW_STATE);
+        } else if ( entryLoadRequest.isStaging() ) {
+            query.append(" AND f.comp_id.workflowState > ");
+            if ( stagingOnly ){
+                query.append(EntryLoadRequest.ACTIVE_WORKFLOW_STATE);
+            } else {
+                query.append(EntryLoadRequest.VERSIONED_WORKFLOW_STATE);
+            }
+        } else {
+            query.append(" AND f.comp_id.versionId =3D ");
+            query.append(entryLoadRequest.getVersionID());
+        }
+        if ( !ignoreLang ) {
+            String languageCode =3D entryLoadRequest.getFirstLocale(true).
+                toString();
+            query.append(" AND (");
+            query.append("f.comp_id.languageCode =3D :languageCode OR f.co=
mp_id.languageCode=3D :sharedLanguageCode ");
+            params.put("languageCode",languageCode);
+            params.put("sharedLanguageCode",ContentField.SHARED_LANGUAGE);
+            query.append(" ) ");
+        }
+    }
+
+    public List executeQuery(String queryString, Map parameters){
+        Query query =3D this.getSession().createQuery(queryString);
+        Iterator it =3D parameters.keySet().iterator();
+        while ( it.hasNext() ){
+            String name =3D (String)it.next();
+            Object parameter =3D parameters.get(name);
+            query.setParameter(name,parameter);
+        }
+        return query.list();
+    }
+
 =

 }
 =


Modified: trunk/core/src/java/org/jahia/hibernate/manager/JahiaContainerMan=
ager.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/manager/JahiaContainerManager.java&rev=3D19043&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/hibernate/manager/JahiaContainerManager.j=
ava (original)
+++ trunk/core/src/java/org/jahia/hibernate/manager/JahiaContainerManager.j=
ava Mon Nov  5 12:34:46 2007
@@ -21,6 +21,8 @@
 =

 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.hibernate.Query;
+import org.jahia.bin.Jahia;
 import org.jahia.content.ContentContainerKey;
 import org.jahia.content.ContentObject;
 import org.jahia.content.CrossReferenceManager;
@@ -29,6 +31,7 @@
 import org.jahia.exceptions.JahiaInitializationException;
 import org.jahia.hibernate.dao.*;
 import org.jahia.hibernate.model.JahiaCtnEntryPK;
+import org.jahia.params.ProcessingContext;
 import org.jahia.services.cache.Cache;
 import org.jahia.services.cache.CacheService;
 import org.jahia.services.cache.GroupCacheKey;
@@ -38,8 +41,6 @@
 import org.jahia.services.version.EntryStateable;
 import org.jahia.services.version.JahiaSaveVersion;
 import org.jahia.spring.advice.CacheAdvice;
-import org.jahia.bin.Jahia;
-import org.jahia.params.ProcessingContext;
 import org.springframework.orm.ObjectRetrievalFailureException;
 =

 import java.util.*;
@@ -1200,5 +1201,26 @@
         return dao.findContainerIdByPropertyNameAndValue(name, value);
     }
 =

+    public List getSortedContainerIds(Integer ctListId, Integer siteId, Bo=
olean siteLevel,
+                                      String containerDefinitionName, Stri=
ng fieldName,
+                                      EntryLoadRequest loadRequest, boolea=
n ignoreLang, boolean stagingOnly,
+                                      boolean ascendingOrder) {
+
+        return dao.getSortedContainerIds(ctListId, siteId, siteLevel,
+                                      containerDefinitionName, fieldName,
+                                      loadRequest, ignoreLang, stagingOnly,
+                                      ascendingOrder);
+    }
+
+    /**
+     *
+     * @param queryString
+     * @param paramaters
+     * @return
+     */
+    public List executeQuery(String queryString, Map parameters){
+        return dao.executeQuery(queryString,parameters);
+    }
+
 }
 =


Modified: trunk/core/src/java/org/jahia/services/containers/ContainerFactor=
y.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/containers/ContainerFactory.java&rev=3D19043&repname=3Dja=
hia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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/services/containers/ContainerFactory.java=
 (original)
+++ trunk/core/src/java/org/jahia/services/containers/ContainerFactory.java=
 Mon Nov  5 12:34:46 2007
@@ -806,7 +806,7 @@
                     }
                             if (!v.contains(ctnID)) v.add(ctnID);
 =

-                            if ( i > endPos + 100 ){
+                            if ( v.size() > endPos + cListPagination.getWi=
ndowSize() ){
                                 break;
                             }
                             if (acl.getPermission(currentUser, JahiaBaseAC=
L.WRITE_RIGHTS)) {

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

Reply via email to