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 ");