mcardle     2005/05/27 17:12:49 CEST

  Modified files:
    core/src/java/org/jahia/data/containers 
                                            
ContainerSorterByContainerDefinition.java 
  Log:
  can now sort over multiple fields from containers from multiple definition 
names at the same time
  
  Revision  Changes    Path
  1.10      +166 -26   
jahia/core/src/java/org/jahia/data/containers/ContainerSorterByContainerDefinition.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/data/containers/ContainerSorterByContainerDefinition.java.diff?r1=1.9&r2=1.10&f=h
  
  
  
  Index: ContainerSorterByContainerDefinition.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/data/containers/ContainerSorterByContainerDefinition.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ContainerSorterByContainerDefinition.java 28 Apr 2005 14:57:36 -0000      
1.9
  +++ ContainerSorterByContainerDefinition.java 27 May 2005 15:12:49 -0000      
1.10
  @@ -46,12 +46,16 @@
   import org.jahia.utils.JahiaTools;
   
   /**
  - * Jahia Standard Containers Sort Handler for a containers on containers
  - * of same container definition or having same field name.
  + * Jahia Standard Containers Sort Handler sorts the list of containers, 
defined by one or more definition
  + * names and with the given field name(s).
  + *
  + * The sorting is done according to the values in the given field name(s) in 
alphanumeric or numeric in
  + * descending or ascending order.
    *
    * @see ContainerSorterByContainerDefinition
    * @see JahiaContainerSet
    * @author Khue Nguyen <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  + * @author MC
    */
   
   public class ContainerSorterByContainerDefinition implements Serializable, 
ContainerSorterInterface {
  @@ -63,9 +67,9 @@
   
       protected int siteId = -1;
   
  -    protected String fieldName;
  +    protected String[] fieldNames;
   
  -    protected String containerDefinitionName;
  +    protected String[] containerDefinitionNames;
   
       protected boolean updated = false;
   
  @@ -89,8 +93,8 @@
        * Constructor
        *
        * @param siteId
  -     * @param fieldName
  -     * @param containerDefinitionName
  +     * @param fieldName, field name which containers must have and on which 
sorting is carried out
  +     * @param containerDefinitionName, definition name which containers must 
have
        * @throws JahiaException
        * @deprecated, inverted numbersort and entryLoadRequest parameter
        *
  @@ -100,15 +104,33 @@
               boolean numberSort)
       throws JahiaException
       {
  -        
this(siteId,fieldName,containerDefinitionName,numberSort,entryLoadRequest);
  +        this(siteId,new String[]{fieldName},new 
String[]{containerDefinitionName},numberSort,null,entryLoadRequest);
       }
   
  +    /**
  +     *
  +     *
  +     * @param siteId
  +     * @param fieldNames, the container must have one of the field listed in 
this array.
  +     * The sorting will be carried out on these fields.
  +     * @param containerDefinitionName, definition name which containers must 
have
  +     * @throws JahiaException
  +     * @deprecated, inverted numbersort and entryLoadRequest parameter
  +     *
  +     */
  +    public ContainerSorterByContainerDefinition(int siteId, String[] 
fieldNames,
  +            String containerDefinitionName, EntryLoadRequest 
entryLoadRequest,
  +            boolean numberSort)
  +    throws JahiaException
  +    {
  +       this(siteId,fieldNames,new 
String[]{containerDefinitionName},numberSort,null,entryLoadRequest);
  +    }
       
//--------------------------------------------------------------------------
       /**
        *
        * @param siteId
  -     * @param fieldName
  -     * @param containerDefinitionName
  +     * @param fieldName, field name which containers must have and on which 
sorting is carried out
  +     * @param containerDefinitionName, definition name which containers must 
have
        * @param numberSort
        * @param entryLoadRequest
        * @throws JahiaException
  @@ -118,14 +140,15 @@
               EntryLoadRequest entryLoadRequest)
       throws JahiaException
       {
  -        
this(siteId,fieldName,containerDefinitionName,numberSort,null,entryLoadRequest);
  +        this(siteId,new String[]{fieldName},new 
String[]{containerDefinitionName},numberSort,null,entryLoadRequest);
       }
   
  +
       /**
        *
        * @param siteId
  -     * @param fieldName
  -     * @param containerDefinitionName
  +     * @param fieldName, field name which containers must have and on which 
sorting is carried out
  +     * @param containerDefinitionName, definition name which containers must 
have
        * @param boolean , force field values to be converted to number 
representation before sorting ( if true ).
        * @param numberFormat, only used if numberSort is true. If null, the 
format used is NumberFormat.LONG_FORMAT
        * @param entryLoadRequest
  @@ -136,9 +159,72 @@
               boolean numberSort,
               String numberFormat,
               EntryLoadRequest entryLoadRequest )
  +        throws JahiaException
  +    {
  +       this(siteId,new String[]{fieldName},new 
String[]{containerDefinitionName},numberSort,numberFormat,entryLoadRequest);
  +    }
  +
  +    /**
  +        *
  +        * @param siteId
  +        * @param fieldNames, the container must have one of the field listed 
in this array.
  +        * The sorting will be carried out on these fields.
  +        * @param containerDefinitionName, definition name which containers 
must have
  +        * @param boolean , force field values to be converted to number 
representation before sorting ( if true ).
  +        * @param numberFormat, only used if numberSort is true. If null, the 
format used is NumberFormat.LONG_FORMAT
  +        * @param entryLoadRequest
  +        * @throws JahiaException
  +     */
  +    public ContainerSorterByContainerDefinition(int siteId, String[] 
fieldNames,
  +            String containerDefinitionName,
  +            boolean numberSort,
  +            String numberFormat,
  +            EntryLoadRequest entryLoadRequest )
       throws JahiaException
       {
  -        if ( fieldName != null && !fieldName.trim().equals("") )
  +        this(siteId,fieldNames,new 
String[]{containerDefinitionName},numberSort,numberFormat,entryLoadRequest);
  +    }
  +
  +    /**
  +     *
  +     * @param siteId
  +     * @param fieldNames, sorting can be done over more than one field (as 
long as they are the same type)
  +     * @param containerDefinitionNames, containers must be of one of these 
container definition names.
  +     * @param boolean , force field values to be converted to number 
representation before sorting ( if true ).
  +     * @param numberFormat, only used if numberSort is true. If null, the 
format used is NumberFormat.LONG_FORMAT
  +     * @param entryLoadRequest
  +     * @throws JahiaException
  +     */
  +    public ContainerSorterByContainerDefinition(int siteId, String[] 
fieldNames,
  +            String[] containerDefinitionNames,
  +            boolean numberSort,
  +            String numberFormat,
  +            EntryLoadRequest entryLoadRequest )
  +    throws JahiaException
  +    {
  +
  +        //Must have at least one field correctly defined
  +        for (int i = 0; i < fieldNames.length; i++) {
  +            if (fieldNames[i] != null && !fieldNames[i].trim().equals("")) {
  +                //Must have at least one container definition correctly 
defined
  +                for (int d = 0; d < containerDefinitionNames.length; d++) {
  +                    if (containerDefinitionNames[i] != null &&
  +                        !containerDefinitionNames[i].trim().equals("")) {
  +                        this.siteId = siteId;
  +                        this.fieldNames = fieldNames;
  +                        this.containerDefinitionNames = 
containerDefinitionNames;
  +                        this.isValid = true;
  +                        this.numberSort = numberSort;
  +                        if (NumberFormats.isValidFormat(numberFormat)) {
  +                            this.numberFormat = numberFormat;
  +                        }
  +                        break;
  +                    }
  +                }
  +                if (this.isValid) break;
  +            }
  +        }
  +    /*  WAS: if ( fieldName != null && !fieldName.trim().equals("") )
           {
               this.siteId = siteId;
               this.fieldName = fieldName;
  @@ -148,7 +234,7 @@
               if ( NumberFormats.isValidFormat(numberFormat) ){
                   this.numberFormat = numberFormat;
               }
  -        }
  +        }*/
           if (entryLoadRequest != null){
               this.entryLoadRequest = entryLoadRequest;
           }
  @@ -282,13 +368,13 @@
   
       
//--------------------------------------------------------------------------
       /**
  -     * Return the sorting field.
  +     * Return the sorting fields.
        *
  -     * @return int ctnListID, the container list id.
  +     * @return String[] , the name of fields used for sorting.
        */
  -    public String getSortingFieldName()
  +    public String[] getSortingFieldNames ()
       {
  -        return this.fieldName;
  +        return this.fieldNames;
       }
   
       
//--------------------------------------------------------------------------
  @@ -362,9 +448,9 @@
       throws JahiaException
       {
   
  -        ArrayList deletedCtns = ContainerFilterByContainerDefinition
  -                              .getDeletedContainersBySite(siteId,
  -                              containerDefinitionName);
  +        ArrayList deletedCtns = ContainerFilterByContainerDefinitions
  +                              .getDeletedContainersBySite(this.siteId,
  +                              this.containerDefinitionNames);
           ArrayList stagingFields = getStagingFields();
   
           StringBuffer buff = new StringBuffer("SELECT DISTINCT 
ctnid_jahia_fields_data,b.id_jahia_fields_data,b.value_jahia_fields_data,b.workflow_state,b.language_code
 FROM jahia_ctn_entries a, jahia_fields_data b, jahia_fields_def c, 
jahia_ctn_def d WHERE ");
  @@ -374,18 +460,51 @@
               buff.append(siteId);
               buff.append(" AND ");
           }
  -
  +        /*WAS:
           if ( containerDefinitionName != null &&
                !"".equals(containerDefinitionName.trim()) ){
               buff.append(" ctndefid_jahia_ctn_entries = id_jahia_ctn_def ");
               buff.append(" AND name_jahia_ctn_def='");
               buff.append(JahiaTools.quote(containerDefinitionName));
               buff.append("' AND ");
  +                 }
  +         */
  +
  +        //Only include valid container names
  +        boolean firstTime = true;
  +        for (int d = 0; d < this.containerDefinitionNames.length; d++) {
  +            if (this.containerDefinitionNames[d] != null &&
  +                !this.containerDefinitionNames[d].trim().equals("")) {
  +                if (firstTime) {
  +                    buff.append(" ctndefid_jahia_ctn_entries = 
id_jahia_ctn_def ");
  +                    buff.append(" AND ( ");
  +                    firstTime = false;
  +                } else
  +                    buff.append(" OR ");
  +                buff.append(" name_jahia_ctn_def='");
  +                
buff.append(JahiaTools.quote(this.containerDefinitionNames[d]));
  +                buff.append("'");
  +            } else
  +                logger.debug("getFieldValues: A definition was null, and 
therefore ignored, in containerDefinitionNames array");
  +            if (!firstTime && d == this.containerDefinitionNames.length - 1)
  +                buff.append(" ) AND ");
           }
   
  -        buff.append(" ( a.id_jahia_ctn_entries = b.ctnid_jahia_fields_data 
AND b.fielddefid_jahia_fields_data = c.id_jahia_fields_def AND 
c.name_jahia_fields_def='");
  +        /*WAS: buff.append(" ( a.id_jahia_ctn_entries = 
b.ctnid_jahia_fields_data AND b.fielddefid_jahia_fields_data = 
c.id_jahia_fields_def AND c.name_jahia_fields_def='");
           buff.append(JahiaTools.quote(fieldName));
  -        buff.append("' ) AND (");
  +        buff.append("' ) AND (");*/
  +
  +        buff.append(" ( a.id_jahia_ctn_entries = b.ctnid_jahia_fields_data 
AND b.fielddefid_jahia_fields_data = c.id_jahia_fields_def AND (");
  +        for (int i = 0; i < this.fieldNames.length; i++) {
  +            buff.append(" c.name_jahia_fields_def='");
  +            buff.append(JahiaTools.quote(this.fieldNames[i]));
  +            buff.append("'");
  +            if (i < this.fieldNames.length - 1) {
  +                buff.append(" OR ");
  +            }
  +        }
  +        buff.append(")) AND (");
  +
           
buff.append(ContainerFilterBean.getMultilangAndStagingFiltering(this.entryLoadRequest,true));
           buff.append(") ORDER BY ");
           buff.append(ContainerFilterBean.FIELD_ID);
  @@ -455,7 +574,7 @@
                           }
   
                           TempField aField = new 
TempField(fieldID,ctnID,0,workflowState,languageCode,fieldValue);
  -                        String key = fieldID + "_" + workflowState;
  +                        String key = fieldID + "_" + workflowState + "_" + 
languageCode;
                           maps.put(key,aField);
                       }
                   }
  @@ -720,13 +839,34 @@
               buff.append(siteId);
               buff.append(" AND ");
           }
  -
  +        /*WAS:
           if ( containerDefinitionName != null &&
                !"".equals(containerDefinitionName.trim()) ){
               buff.append(" ctndefid_jahia_ctn_entries = id_jahia_ctn_def ");
               buff.append(" AND name_jahia_ctn_def='");
               buff.append(JahiaTools.quote(containerDefinitionName));
               buff.append("'");
  +                 }
  +         */
  +
  +        //Only include valid container names
  +        boolean firstTime = true;
  +        for (int d = 0; d < this.containerDefinitionNames.length; d++) {
  +            if (this.containerDefinitionNames[d] != null &&
  +                !this.containerDefinitionNames[d].trim().equals("")) {
  +                if (firstTime) {
  +                    buff.append(" ctndefid_jahia_ctn_entries = 
id_jahia_ctn_def ");
  +                    buff.append(" AND ( ");
  +                    firstTime = false;
  +                } else
  +                    buff.append(" OR ");
  +                buff.append(" name_jahia_ctn_def='");
  +                
buff.append(JahiaTools.quote(this.containerDefinitionNames[d]));
  +                buff.append("'");
  +            } else
  +                logger.debug("getStagingFields: A definition was null, and 
therefore ignored, in containerDefinitionNames array");
  +            if (!firstTime && d == this.containerDefinitionNames.length - 1)
  +                buff.append(" ) ");
           }
   
           buff.append(" AND a.id_jahia_ctn_entries=b.ctnid_jahia_fields_data 
AND b.workflow_state>1 ");
  

Reply via email to