knguyen 2004/08/10 19:49:44 CEST
Modified files:
core/src/java/org/jahia/data/containers
ContainerFilterBean.java
ContainerMetadataFilterBean.java
ContainerSorterBean.java
Added files:
core/src/java/org/jahia/data/containers
ContainerMetadataSorterBean.java
Log:
- Containers sort by metadata
Revision Changes Path
1.4 +5 -0
jahia/core/src/java/org/jahia/data/containers/ContainerFilterBean.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/data/containers/ContainerFilterBean.java.diff?r1=1.3&r2=1.4&f=h
1.2 +44 -703
jahia/core/src/java/org/jahia/data/containers/ContainerMetadataFilterBean.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/data/containers/ContainerMetadataFilterBean.java.diff?r1=1.1&r2=1.2&f=h
1.1 +364 -0
jahia/core/src/java/org/jahia/data/containers/ContainerMetadataSorterBean.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/data/containers/ContainerMetadataSorterBean.java?rev=1.1&content-type=text/plain
1.5 +2 -0
jahia/core/src/java/org/jahia/data/containers/ContainerSorterBean.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/data/containers/ContainerSorterBean.java.diff?r1=1.4&r2=1.5&f=h
Index: ContainerMetadataSorterBean.java
====================================================================
//
// ____.
// __/\ ______| |__/\. _______
// __ .____| | \ | +----+ \
// _______| /--| | | - \ _ | : - \_________
// \\______: :---| : : | : | \________>
// |__\---\_____________:______: :____|____:_____\
// /_____|
//
// . . . i n j a h i a w e t r u s t . . .
//
//
//
//
//
//
package org.jahia.data.containers;
import java.util.BitSet;
import java.util.Collections;
import java.util.Vector;
import java.util.Locale;
import org.jahia.content.JahiaObject;
import org.jahia.data.fields.JahiaField;
import org.jahia.data.fields.LoadFlags;
import org.jahia.exceptions.JahiaException;
import org.jahia.params.ParamBean;
import org.jahia.params.SoapParamBean;
import org.jahia.registries.ServicesRegistry;
import org.jahia.services.containers.ContentContainer;
import org.jahia.services.fields.ContentField;
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;
/**
* Sort containers on metadata.
*
* @see ContainerSorterBean
* @see JahiaContainerSet
* @author Khue Nguyen <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>
*/
public class ContainerMetadataSorterBean extends ContainerSorterBean {
private static org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(ContainerMetadataSorterBean.class);
private static final String CLASS_NAME =
ContainerMetadataSorterBean.class.getName();
protected int siteId = -1;
protected String containerDefinitionName;
protected JahiaUser user = null;
protected JahiaSite site = null;
protected boolean siteLevel = false;
//--------------------------------------------------------------------------
/**
* Sort containers of a given container List.
*
* @param ctnListID int
* @param fieldName String
* @param jParams ParamBean
* @throws JahiaException
*/
public ContainerMetadataSorterBean(int ctnListID, String fieldName,
ParamBean jParams)
throws JahiaException
{
super(ctnListID, fieldName);
this.site = jParams.getSite();
this.user = jParams.getUser();
}
//--------------------------------------------------------------------------
/**
* Sort containers of a given container List
*
* @param int ctnListID, the container list id.
* @param String the field name, the field on which to sort.
* @param entryLoadRequest
* @throws JahiaException
*/
public ContainerMetadataSorterBean(int ctnListID, String fieldName,
ParamBean jParams,
EntryLoadRequest entryLoadRequest)
throws JahiaException
{
super(ctnListID, fieldName, entryLoadRequest);
this.site = jParams.getSite();
this.user = jParams.getUser();
}
//--------------------------------------------------------------------------
/**
* Sort containers of a given container List
*
* @param int ctnListID, the container list id.
* @param String the field name, the field on which to sort.
* @param boolean , force field values to be converted to long representation
before sorting ( if true ).
* @param entryLoadRequest
* @throws JahiaException
*/
public ContainerMetadataSorterBean(int ctnListID, String fieldName,
boolean numberSort,
ParamBean jParams,
EntryLoadRequest entryLoadRequest)
throws JahiaException
{
super(ctnListID, fieldName, numberSort, entryLoadRequest);
this.site = jParams.getSite();
this.user = jParams.getUser();
}
//--------------------------------------------------------------------------
/**
* Sort containers of a given container List.
*
* @param String containerListName, the container list name.
* @param ParamBean, the param bean.
* @param String the field name, the field on which to sort.
*/
public ContainerMetadataSorterBean(String containerListName,
ParamBean jParams, String fieldName)
throws JahiaException
{
super(containerListName, jParams, fieldName);
this.site = jParams.getSite();
this.user = jParams.getUser();
}
//--------------------------------------------------------------------------
/**
* Sort containers of a given container List.
*
* @param String containerListName, the container list name.
* @param ParamBean, the param bean.
* @param String the field name, the field on which to sort.
* @param entryLoadRequest
* @throws JahiaException
*/
public ContainerMetadataSorterBean(String containerListName,
ParamBean jParams, String fieldName,
EntryLoadRequest entryLoadRequest)
throws JahiaException
{
super(containerListName, jParams, fieldName, entryLoadRequest);
this.site = jParams.getSite();
this.user = jParams.getUser();
}
//--------------------------------------------------------------------------
/**
* Sort containers of a given container List.
*
* @param String containerListName, the container list name.
* @param ParamBean, the param bean.
* @param String the field name, the field on which to sort.
* @param boolean , force field values to be converted to long representation
before sorting ( if true ).
*/
public ContainerMetadataSorterBean(String containerListName,
ParamBean jParams,
String fieldName, boolean numberSort)
throws JahiaException
{
super(containerListName, jParams, fieldName, numberSort);
this.site = jParams.getSite();
this.user = jParams.getUser();
}
//--------------------------------------------------------------------------
/**
* Sort containers of a given container List.
*
* @param String containerListName, the container list name.
* @param ParamBean, the param bean.
* @param String the field name, the field on which to sort.
* @param boolean , force field values to be converted to long representation
before sorting ( if true ).
* @param entryLoadRequest
* @throws JahiaException
*/
public ContainerMetadataSorterBean(String containerListName,
ParamBean jParams,
String fieldName, boolean numberSort,
EntryLoadRequest entryLoadRequest)
throws JahiaException
{
super(containerListName, jParams, fieldName, numberSort, entryLoadRequest);
this.site = jParams.getSite();
this.user = jParams.getUser();
}
//--------------------------------------------------------------------------
/**
* Constructor for sorting container from a whole Jahia site or from all sites,
* given the container definition name.
*
* @param siteId
* @param fieldName
* @param containerDefinitionName
* @throws JahiaException
*/
public ContainerMetadataSorterBean(int siteId, ParamBean jParams,
String fieldName,
String containerDefinitionName,
EntryLoadRequest entryLoadRequest,
boolean numberSort)
throws JahiaException
{
super(-1,fieldName,numberSort,entryLoadRequest);
this.siteId = siteId;
this.containerDefinitionName = containerDefinitionName;
this.siteLevel = true;
this.user = jParams.getUser();
this.site = jParams.getSite();
}
//--------------------------------------------------------------------------
/**
* Load an hashtable of pair/value (ctnID,fieldValue) for a given ctnlist 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 bits)
throws JahiaException
{
Locale locale = this.getEntryLoadRequest().getFirstLocale(true);
Vector datas = new Vector();
SoapParamBean jParams = new SoapParamBean(site,user);
Vector containerIds = new Vector();
if ( !this.siteLevel ){
containerIds = ServicesRegistry.getInstance().getJahiaContainersService()
.getctnidsInList(ctnListID, this.getEntryLoadRequest());
} else {
if ( siteId > 0 ){
containerIds = ServicesRegistry.getInstance().
getJahiaContainersService().getCtnIds(siteId);
} else {
containerIds = ServicesRegistry.getInstance().
getJahiaContainersService().getCtnIds();
}
}
int size = containerIds.size();
int id = 0;
ContentContainer contentContainer = null;
JahiaObject jahiaObject = null;
ContentField contentField = null;
JahiaField jahiaField = null;
String fieldValue = null;
Object obj = null;
int fieldId = 0;
ContentDefinition contentDefinition = null;
boolean checkMetadata = false;
for ( int i=0 ; i<size; i++ ){
id = ((Integer)containerIds.get(i)).intValue();
if ( bits != null && !bits.get(id) ){
continue;
}
contentContainer = ContentContainer.getContainer(id);
fieldValue = "";
checkMetadata = false;
if ( contentContainer != null ){
try {
contentDefinition = ContentDefinition.
getContentDefinitionInstance(
contentContainer
.getDefinitionKey(this.getEntryLoadRequest()));
} catch ( Throwable t ){
logger.debug(t);
}
if ( contentDefinition != null ){
if (this.siteId > 0) {
if (this.siteId == contentContainer.getSiteID()
&& (this.containerDefinitionName == null ||
this.containerDefinitionName.equals(
contentDefinition.getName()))) {
checkMetadata = true;
}
} else {
if (this.containerDefinitionName == null ||
this.containerDefinitionName.equals(
contentDefinition.getName())) {
checkMetadata = true;
}
}
}
if (checkMetadata) {
jahiaObject = contentContainer.getMetadata(this.
getSortingFieldName());
if (jahiaObject != null) {
fieldId = Integer.parseInt(jahiaObject.getObjectKey().
getIDInType());
jahiaField = ServicesRegistry.getInstance().
getJahiaFieldService()
.loadField(fieldId, LoadFlags.ALL, jParams,
this.getEntryLoadRequest());
if (jahiaField != null) {
fieldValue = jahiaField.getRawValue();
}
}
if (jParams != null) {
// expression marker
ExpressionMarker exprMarker = ExpressionMarker.
parseMarkerValue(fieldValue,
jParams);
if (exprMarker != null) {
try {
String value = exprMarker.getValue();
if (value != null && !"".equals(value)) {
fieldValue = value;
}
} catch (Throwable t) {
logger.debug(
"Problem while evaluating expression " +
exprMarker.getExpr(), t);
}
}
}
// resbundle marker
ResourceBundleMarker resMarker = ResourceBundleMarker.
parseMarkerValue(fieldValue);
if (resMarker != null) {
try {
String value = resMarker.getValue(locale);
if (value != null && !"".equals(value)) {
fieldValue = value;
}
} catch (Throwable t) {
}
}
if (convertValueAsLong) {
try {
obj = new DataBean(contentContainer.getID(),
Long.parseLong(fieldValue));
} catch (Throwable t) {
// we want to display the ctn anyway
obj = new DataBean(contentContainer.getID(), -1);
}
} else {
obj = new StrDataBean(contentContainer.getID(),
fieldValue);
}
if (obj != null) {
datas.add(obj);
}
}
}
}
return datas;
}
}
Index: ContainerFilterBean.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/data/containers/ContainerFilterBean.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ContainerFilterBean.java 6 Aug 2004 15:33:20 -0000 1.3
+++ ContainerFilterBean.java 10 Aug 2004 17:49:43 -0000 1.4
@@ -1836,4 +1836,9 @@
}
}
+ //--------------------------------------------------------------------------
+ public EntryLoadRequest getEntryLoadRequest(){
+ return this.entryLoadRequest;
+ }
+
}
Index: ContainerMetadataFilterBean.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/data/containers/ContainerMetadataFilterBean.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ContainerMetadataFilterBean.java 6 Aug 2004 15:33:21 -0000 1.1
+++ ContainerMetadataFilterBean.java 10 Aug 2004 17:49:43 -0000 1.2
@@ -54,53 +54,12 @@
* @see JahiaContainerSet
* @author Khue Nguyen <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>
*/
-public class ContainerMetadataFilterBean implements ContainerFilterInterface {
+public class ContainerMetadataFilterBean extends ContainerFilterBean {
private static org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(ContainerMetadataFilterBean.class);
- /**
- * "=" Comparator
- */
- public static final String COMP_EQUAL = "=";
- /**
- * "<" Comparator
- */
- public static final String COMP_SMALLER = "<";
- /**
- * "<=" Comparator
- */
- public static final String COMP_SMALLER_OR_EQUAL = "<=";
- /**
- * ">=" Comparator
- */
- public static final String COMP_BIGGER_OR_EQUAL = ">=";
- /**
- * ">" Comparator
- */
- public static final String COMP_BIGGER = ">";
-
- public static final String FIELD_ID = "b.id_jahia_fields_data";
- public static final String FIELD_VALUE = "b.value_jahia_fields_data";
- public static final String FIELD_VERSION_ID = "b.version_id";
- public static final String FIELD_WORKFLOW_STATE = "b.workflow_state";
- public static final String FIELD_LANGUAGE_CODE = "b.language_code";
-
private static final String CLASS_NAME =
ContainerMetadataFilterBean.class.getName();
-
- private String metadataName;
-
- private boolean numberFiltering = false;
-
- private boolean multipleFieldValue = false;
-
- /** The list of FilterClause bean **/
- private Vector clauses = new Vector();
-
- private EntryLoadRequest entryLoadRequest = EntryLoadRequest.CURRENT;
-
- private ContainerFilters containerFilters = null;
-
private JahiaUser user = null;
private JahiaSite site = null;
@@ -114,14 +73,9 @@
public ContainerMetadataFilterBean(String metadataName,
ParamBean jParams,
EntryLoadRequest entryLoadRequest){
- this.metadataName = metadataName;
- if ( entryLoadRequest != null ){
- this.entryLoadRequest = entryLoadRequest;
- }
+ super(metadataName,entryLoadRequest);
this.user = jParams.getUser();
this.site = jParams.getSite();
-
- logger.debug("Created with metadata name : " + metadataName);
}
//--------------------------------------------------------------------------
@@ -136,14 +90,9 @@
boolean numberFiltering,
ParamBean jParams,
EntryLoadRequest entryLoadRequest){
- this.metadataName = metadataName;
- this.numberFiltering = numberFiltering;
- if ( entryLoadRequest != null ){
- this.entryLoadRequest = entryLoadRequest;
- }
+ super(metadataName, numberFiltering, entryLoadRequest);
this.user = jParams.getUser();
this.site = jParams.getSite();
- logger.debug("Created with metadata name : " + metadataName);
}
//--------------------------------------------------------------------------
@@ -160,356 +109,9 @@
boolean multipleFieldValue,
ParamBean jParams,
EntryLoadRequest entryLoadRequest){
- this.metadataName = metadataName;
- this.numberFiltering = numberFiltering;
- this.multipleFieldValue = multipleFieldValue;
- if ( entryLoadRequest != null ){
- this.entryLoadRequest = entryLoadRequest;
- }
+ super(metadataName, numberFiltering,multipleFieldValue, entryLoadRequest);
this.user = jParams.getUser();
this.site = jParams.getSite();
- logger.debug("Created with metadata name : " + metadataName);
- }
-
- //--------------------------------------------------------------------------
- /**
- * Add a simple comparison clause with a single value
- *
- * <pre>
- * I.E : comparator =
ContainerFilterBean.COMP_BIGGER (>)
- * value = '1'
- *
- * will be used to generate the WHERE clause :
- *
- * WHERE
(fieldvalue>'1')
- *
- * </pre>
- *
- * @param String comparator, the comparator used to compare the field value.
- * @param String value, a single value
- */
- public void addClause(String comparator, String value){
-
- if ( (value == null) || !checkComparator(comparator) )
- return;
-
- FilterClause fClause = new FilterClause(comparator,value);
-
- if ( fClause.isValid() ){
- clauses.add(fClause);
- }
- }
-
- //--------------------------------------------------------------------------
- /**
- * Add a simple comparison clause with multiple values
- *
- * An OR comparison is added between each clause.
- *
- * <pre>
- * I.E : comparator =
ContainerFilterBean.COMP_EQUAL (=)
- * values = {'1','3','1000'}
- *
- * will be used to generate the WHERE clause :
- *
- * WHERE
(fieldvalue='1' OR fieldvalue='3' OR fieldvalue='1000')
- *
- * </pre>
- *
- * @param String comparator, the comparator used to compare the field value
with each value of the values array.
- * @param String[] values, an array of values as String
- */
- public void addClause(String comparator, String[] values){
-
- if ( values == null || (values.length == 0) || !checkComparator(comparator)
)
- return;
-
- FilterClause fClause = new FilterClause(comparator,values);
-
- if ( fClause.isValid() ){
- clauses.add(fClause);
- }
- }
-
- //--------------------------------------------------------------------------
- /**
- * Add a simple equality comparison clause with a single value
- *
- * <pre>
- * I.E :
- * value = '1'
- *
- * will be used to generate the WHERE clause :
- *
- * WHERE
(fieldvalue='1')
- *
- * </pre>
- *
- * @param String value, a single value
- */
- public void addEqualClause(String value){
-
- if ( (value == null) )
- return;
-
- FilterClause fClause = new FilterClause(COMP_EQUAL,value);
-
- if ( fClause.isValid() ){
- clauses.add(fClause);
- }
- }
-
- //--------------------------------------------------------------------------
- /**
- * Add a simple equality comparison clause with multiple value
- *
- * <pre>
- * I.E :
- * values = {'1','3','1000'}
- *
- * will be used to generate the WHERE clause :
- *
- * WHERE (fieldvalue='1' OR fieldvalue='3' OR
fieldvalue='1000')
- *
- * </pre>
- *
- * @param String value, a single value
- */
- public void addEqualClause(String[] values){
-
- if ( values == null || (values.length == 0) )
- return;
-
- FilterClause fClause = new FilterClause(COMP_EQUAL,values);
-
- if ( fClause.isValid() ){
- clauses.add(fClause);
- }
- }
-
- //--------------------------------------------------------------------------
- /**
- * Constructs a range clause matching values between
- * <code>lowerVal</code> and <code>upperVal</code>.
- *
- * <pre>
- * I.E : lowerComp =
ContainerFilterBean.COMP_BIGGER_OR_EQUAL (>=)
- * upperComp = ContainerFilterBean.COMP_SMALLER
(<)
- * lowerVal = '1'
- * upperVal = '1000'
- *
- * will be used to generate the WHERE clause :
- *
- * WHERE
(fieldvalue>='1' AND fielValue<'10001')
- *
- * </pre>
- *
- * @param String lowerComp, the lower comparator
- * @param String upperComp, the upper comparator
- * @param String lowerVal, the lower value
- * @param String upperVal, the upper value
- */
- public void addRangeClause( String lowerComp,
- String upperComp,
- String lowerVal,
- String upperVal) {
-
- if ( lowerVal == null
- || upperVal == null
- || !checkComparator(lowerComp)
- || !checkComparator(upperComp) ){
-
- return;
- }
-
- FilterClause fClause = new FilterClause(lowerComp,
- upperComp,
- lowerVal,
- upperVal);
-
- if ( fClause.isValid() ){
- clauses.add(fClause);
- }
- }
-
- //--------------------------------------------------------------------------
- /**
- * Constructs a range clause matching date values between
- * <code>lower</code> and <code>upper</code>.
- *
- * Available only with field of type JahiaDateField ( date field ).
- *
- * <pre>
- * I.E : lowerComp =
ContainerFilterBean.COMP_SMALLER (<)
- * upperComp =
ContainerFilterBean.COMP_BIGGER_OR_EQUAL (>=)
- * lowerVal = '1020038400100' ( long
representation )
- * upperVal = '1020038400000' ( long
representation )
- *
- * will be used to generate the WHERE clause :
- *
- * WHERE
(fieldvalue<'1020038400100' AND fielValue>='1020038400000')
- *
- * </pre>
- *
- * @param String lowerComp, the lower comparator
- * @param String upperComp, the upper comparator
- * @param Date lowerVal, the lower date
- * @param Date upperVal, the upper date
- */
- public void addDateClause( String lowerComp,
- String upperComp,
- Date lowerVal,
- Date upperVal) {
-
- if ( lowerVal == null
- || upperVal == null
- || !checkComparator(lowerComp)
- || !checkComparator(upperComp) ){
- return;
- }
-
- addRangeClause(lowerComp,
- upperComp,
- String.valueOf(lowerVal.getTime()),
- String.valueOf(upperVal.getTime())
- );
- }
-
- //--------------------------------------------------------------------------
- /**
- * Constructs a range clause matching date values between
- * <code>lower</code> and <code>upper</code>.
- *
- * Available only with field of type JahiaDateField ( date field ).
- *
- * <pre>
- * I.E : lowerComp =
ContainerFilterBean.COMP_SMALLER (<)
- * upperComp =
ContainerFilterBean.COMP_BIGGER_OR_EQUAL (>=)
- * lowerVal = '1020038400100' ( long
representation )
- * upperVal = '1020038400000' ( long
representation )
- *
- * will be used to generate the WHERE clause :
- *
- * WHERE
(fieldvalue<'1020038400100' AND fielValue>='1020038400000')
- *
- * </pre>
- *
- * @param String lowerComp, the lower comparator
- * @param String upperComp, the upper comparator
- * @param long lowerVal, the lower date
- * @param long upperVal, the upper date
- */
- public void addDateClause( String lowerComp,
- String upperComp,
- long lowerVal,
- long upperVal) {
-
- addRangeClause(lowerComp,
- upperComp,
- String.valueOf(lowerVal),
- String.valueOf(upperVal)
- );
- }
-
- //--------------------------------------------------------------------------
- /**
- * Constructs a range clause matching date for X day ago.
- *
- * Available only with field of type JahiaDateField ( date field ).
- *
- * @param int nbDays
- */
- public void addXDayMaxDateClause(int nbDays){
-
- // Now
- TimeZone tz = TimeZone.getTimeZone("UTC");
- Calendar cal = Calendar.getInstance(tz);
- Date nowDate = cal.getTime();
- long nowLong = nowDate.getTime();
-
- addDateClause( COMP_SMALLER_OR_EQUAL,
- COMP_BIGGER_OR_EQUAL,
- nowLong,
- nowLong-(nbDays*24*60*60*1000)
- );
- }
-
- //--------------------------------------------------------------------------
- /**
- * Constructs a range clause matching date values that are in Today date.
- *
- * Available only with field of type JahiaDateField ( date field ).
- *
- */
- public void addTodayDateClause(){
-
- // Now
- TimeZone tz = TimeZone.getTimeZone("UTC");
- Calendar cal = Calendar.getInstance(tz);
- Date nowDate = cal.getTime();
- long nowLong = nowDate.getTime();
-
- int year = cal.get(Calendar.YEAR);
- int mon = cal.get(Calendar.MONTH);
- int date = cal.get(Calendar.DAY_OF_MONTH);
- cal.set(year,mon,date,0,0,0);
- cal.set(Calendar.MILLISECOND,0);
-
- Date todayDate = cal.getTime();
- long todayLong = todayDate.getTime();
-
- // Today
- addDateClause( COMP_SMALLER_OR_EQUAL,
- COMP_BIGGER_OR_EQUAL,
- nowLong,
- todayLong
- );
- }
-
- //--------------------------------------------------------------------------
- /**
- * Return the metadata name
- *
- * @return String, the metadata name.
- */
- public String getMetadataName()
- {
- return this.metadataName;
- }
-
- //--------------------------------------------------------------------------
- /**
- * You can force field values to be corverted to long representation for
filtering comparison
- * Prefer String comparison when possible, because it is faster ( only one DB
query needed ).
- *
- * @param boolean number filtering status value.
- */
- public void setNumberFiltering(boolean val)
- {
- this.numberFiltering = val;
- }
-
- //--------------------------------------------------------------------------
- /**
- * Return the number filtering status.
- * If true, field values are converted to long representation before filtering
comparison
- *
- * @return boolean the number filtering status.
- */
- public boolean getNumberFiltering()
- {
- return this.numberFiltering;
- }
-
- //--------------------------------------------------------------------------
- /**
- * Return the vector of clauses.
- *
- * @return Vector, the list of FilterClause bean.
- */
- public Vector getClauses()
- {
- return this.clauses;
}
//--------------------------------------------------------------------------
@@ -523,8 +125,8 @@
public BitSet doFilter(int ctnListID)
throws JahiaException
{
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
+ if ( (this.getFieldName()==null)
+ || (this.getFieldName().trim().equals(""))
|| (this.getClauses()==null)
|| (this.getClauses().size()==0) )
{
@@ -533,7 +135,7 @@
BitSet result = null;
- if ( this.numberFiltering )
+ if ( this.getNumberFiltering() )
{
result = doNumberValueFiltering(ctnListID);
} else {
@@ -544,112 +146,6 @@
//--------------------------------------------------------------------------
/**
- * Return the select statement, build with the clauses for all container list
of the site.
- *
- * @param int ctnListID, the container list id
- * @return String , the sql statement. Null on error
- */
- public String getSelect(int ctnListID)
- {
- //JahiaConsole.println("ContainerFilterBean.getSelect","Started");
-
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
- || (this.getClauses()==null)
- || (this.getClauses().size()==0) )
- {
- return null;
- }
-
- StringBuffer buff = new StringBuffer("SELECT DISTINCT
id_jahia_ctn_entries,b.id_jahia_fields_data,b.workflow_state FROM jahia_ctn_entries a,
jahia_fields_data b, jahia_fields_def c WHERE listid_jahia_ctn_entries=");
- buff.append(ctnListID);
- buff.append(" AND ( 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(this.getMetadataName()));
- buff.append("' AND (");
-
- FilterClause fClause = null;
- int size = this.clauses.size();
- for ( int i=0 ; i<size ; i++ )
- {
- fClause = (FilterClause)this.clauses.get(i);
- if ( fClause != null && fClause.isValid() )
- {
- StringBuffer clauseBuff = new StringBuffer("(");
- if ( !fClause.isRangeClause() )
- {
- String[] values = fClause.getValues();
- for (int j=0 ; j<values.length; j++)
- {
- // TODO : hollis
- // need to review encode/decode special car
- String val = values[j];
-
- clauseBuff.append("(");
- clauseBuff.append(this.entryLoadRequest);
- clauseBuff.append(" AND ");
- clauseBuff.append(FIELD_VALUE);
- clauseBuff.append(fClause.getComp());
- clauseBuff.append("'");
- clauseBuff.append(JahiaTools.quote(val));
- clauseBuff.append("'");
- clauseBuff.append(")");
- if ( j<(values.length-1) ){
- clauseBuff.append(" OR ");
- }
- }
- clauseBuff.append(")");
- } else {
-
- String val = fClause.getLowerValue();
-
- clauseBuff.append("(");
- clauseBuff.append(this.entryLoadRequest);
- clauseBuff.append(" AND ");
- clauseBuff.append(FIELD_VALUE);
- clauseBuff.append(fClause.getLowerComp());
- clauseBuff.append("'");
- clauseBuff.append(JahiaTools.quote(val));
- clauseBuff.append("' AND ");
- clauseBuff.append(FIELD_VALUE);
- clauseBuff.append(fClause.getUpperComp());
- clauseBuff.append("'");
- clauseBuff.append(")");
-
- val = fClause.getUpperValue();
-
- clauseBuff.append(JahiaTools.quote(val));
- clauseBuff.append("')");
- }
- buff.append(clauseBuff.toString());
- if ( i<size-1 )
- {
- buff.append(" OR ");
- }
- }
- }
- buff.append(")) ORDER BY ");
- buff.append(ContainerFilterBean.FIELD_ID);
- buff.append(",");
- buff.append(ContainerFilterBean.FIELD_WORKFLOW_STATE);
-
- logger.debug("field filter query : " + buff.toString());
-
- return buff.toString();
- }
-
- //--------------------------------------------------------------------------
- /**
- * Set reference to a containerFilters
- *
- * @return
- * @throws JahiaException
- */
- public void setContainerFilters(ContainerFilters containerFilters){
- this.containerFilters = containerFilters;
- }
-
- //--------------------------------------------------------------------------
- /**
* Perform filtering for NUMBER like fields.
* Container field values are loaded and converted to long representation before
* filtering comparison.
@@ -666,15 +162,15 @@
//JahiaConsole.println(CLASS_NAME+".doNumberValueFiltering","Started for
ctnlist ["+ctnListID+"]");
BitSet result = new BitSet();
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
+ if ( (this.getFieldName()==null)
+ || (this.getFieldName().trim().equals(""))
|| (this.getClauses()==null)
|| (this.getClauses().size()==0) )
{
return null;
}
- Hashtable datas = getFieldValues(metadataName);
+ Hashtable datas = getFieldValues(this.getFieldName());
//JahiaConsole.println(CLASS_NAME+".doNumberValueFiltering","Nb datas : " +
datas.size());
if ( datas == null || datas.size()==0 ){
@@ -701,11 +197,11 @@
if ( L != null )
{
boolean match = false;
- int size = this.clauses.size();
+ int size = this.getClauses().size();
int i = 0;
while ( (i<size) && !match )
{
- fClause = (FilterClause)this.clauses.get(i);
+ fClause = (FilterClause)this .getClauses().get(i);
if ( fClause != null && fClause.isValid() )
{
match = fClause.compare(L.longValue());
@@ -720,7 +216,7 @@
contentObject instanceof ContentContainer ){
containerList = (ContentContainerList)((ContentContainer)
contentObject)
- .getParent(this.entryLoadRequest);
+ .getParent(this.getEntryLoadRequest());
if ( containerList != null &&
containerList.getID()==ctnListID){
result.set(contentObject.getID());
}
@@ -748,15 +244,15 @@
//JahiaConsole.println(CLASS_NAME+".doNumberValueFiltering","Started for
ctnlist ["+ctnListID+"]");
BitSet result = new BitSet();
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
+ if ( (this.getFieldName()==null)
+ || (this.getFieldName().trim().equals(""))
|| (this.getClauses()==null)
|| (this.getClauses().size()==0) )
{
return null;
}
- Hashtable datas = getFieldValues(metadataName);
+ Hashtable datas = getFieldValues(this.getFieldName());
//JahiaConsole.println(CLASS_NAME+".doNumberValueFiltering","Nb datas : " +
datas.size());
if ( datas == null || datas.size()==0 ){
@@ -782,11 +278,11 @@
int i = 0;
while ( (i<nbVals) && !match ){
val = (String)vals[i];
- int size = this.clauses.size();
+ int size = this.getClauses().size();
int j = 0;
while ( (j<size) && !match )
{
- fClause = (FilterClause)this.clauses.get(j);
+ fClause = (FilterClause)this.getClauses().get(j);
if ( fClause != null && fClause.isValid() )
{
match = fClause.compare(val);
@@ -803,7 +299,7 @@
containerList = (ContentContainerList) ( (
ContentContainer)
contentObject)
- .getParent(this.entryLoadRequest);
+ .getParent(this.getEntryLoadRequest());
if (containerList != null &&
containerList.getID() == ctnListID) {
result.set(contentObject.getID());
@@ -840,12 +336,6 @@
SoapParamBean jParams = new SoapParamBean(site, user);
int fieldId = 0;
- /*
- int wfState = this.entryLoadRequest.getWorkflowState();
- int versionId = this.entryLoadRequest.getVersionID();
- String languageCode = entryLoadRequest.getFirstLocale(true).toString();
- ContentObjectEntryState coes = new
ContentObjectEntryState(wfState,versionId,languageCode);
- */
JahiaField jahiaField = null;
for ( int i=0 ; i<objectKeys.size() ; i++ ){
objectKey = (ObjectKey)objectKeys.get(i);
@@ -853,7 +343,7 @@
//field = ContentField.getField(fieldId);
//fieldValue = field.getValue(coes);
jahiaField = ServicesRegistry.getInstance().getJahiaFieldService()
-
.loadField(fieldId,LoadFlags.ALL,jParams,this.entryLoadRequest);
+
.loadField(fieldId,LoadFlags.ALL,jParams,this.getEntryLoadRequest());
if ( jahiaField != null ){
fieldValue = jahiaField.getRawValue();
if (fieldValue != null) {
@@ -886,8 +376,8 @@
public BitSet doFilterBySite(int siteId, String containerDefinitionName, int
listId)
throws JahiaException
{
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
+ if ( (this.getFieldName()==null)
+ || (this.getFieldName().trim().equals(""))
|| (this.getClauses()==null)
|| (this.getClauses().size()==0) )
{
@@ -896,7 +386,7 @@
BitSet result = null;
- if ( this.numberFiltering )
+ if ( this.getNumberFiltering() )
{
result = doNumberValueFilteringBySite(siteId, containerDefinitionName);
} else {
@@ -907,120 +397,6 @@
//--------------------------------------------------------------------------
/**
- * Return the select statement, build with the clauses for a given site.
- * If siteId = -1 -> build query for all sites
- *
- * If the containerDefinitionName is null, return result from all containers
- * no regards to it definition !
- *
- * @param siteId
- * @param containerDefinitionName
- * @return
- */
- public String getSelectBySiteID(int siteId, String containerDefinitionName)
- {
-
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
- || (this.getClauses()==null)
- || (this.getClauses().size()==0) )
- {
- return null;
- }
-
- StringBuffer buff = new StringBuffer("SELECT DISTINCT
id_jahia_ctn_entries,b.id_jahia_fields_data,b.workflow_state FROM jahia_ctn_entries a,
jahia_fields_data b, jahia_fields_def c, jahia_ctn_def d WHERE ");
- if ( siteId != -1 ){
- buff.append(" jahiaid_jahia_ctn_entries=");
- buff.append(siteId);
- 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='");
- buff.append(JahiaTools.quote(this.getMetadataName()));
- buff.append("' ");
-
- if ( containerDefinitionName != null &&
- !"".equals(containerDefinitionName.trim()) ){
- buff.append(" AND a.ctndefid_jahia_ctn_entries = d.id_jahia_ctn_def ");
- buff.append(" AND d.name_jahia_ctn_def='");
- buff.append(JahiaTools.quote(containerDefinitionName));
- buff.append("'");
- }
-
- buff.append(" AND (");
-
- FilterClause fClause = null;
- int size = this.clauses.size();
- for ( int i=0 ; i<size ; i++ )
- {
- fClause = (FilterClause)this.clauses.get(i);
- if ( fClause != null && fClause.isValid() )
- {
- StringBuffer clauseBuff = new StringBuffer("(");
- if ( !fClause.isRangeClause() )
- {
- String[] values = fClause.getValues();
- for (int j=0 ; j<values.length; j++)
- {
- // TODO : hollis
- // need to review encode/decode special car
- String val = values[j];
-
- clauseBuff.append("(");
- clauseBuff.append(this.entryLoadRequest);
- clauseBuff.append(" AND ");
- clauseBuff.append(FIELD_VALUE);
- clauseBuff.append(fClause.getComp());
- clauseBuff.append("'");
- clauseBuff.append(JahiaTools.quote(val));
- clauseBuff.append("'");
- clauseBuff.append(")");
- if ( j<(values.length-1) ){
- clauseBuff.append(" OR ");
- }
- }
- clauseBuff.append(")");
- } else {
-
- String val = fClause.getLowerValue();
-
- clauseBuff.append("(");
- clauseBuff.append(this.entryLoadRequest);
- clauseBuff.append(" AND ");
- clauseBuff.append(FIELD_VALUE);
- clauseBuff.append(fClause.getLowerComp());
- clauseBuff.append("'");
- clauseBuff.append(JahiaTools.quote(val));
- clauseBuff.append("' AND ");
- clauseBuff.append(FIELD_VALUE);
- clauseBuff.append(fClause.getUpperComp());
- clauseBuff.append("'");
- clauseBuff.append(")");
-
- val = fClause.getUpperValue();
-
- clauseBuff.append(JahiaTools.quote(val));
- clauseBuff.append("')");
- }
- buff.append(clauseBuff.toString());
- if ( i<size-1 )
- {
- buff.append(" OR ");
- }
- }
- }
- buff.append(")) ORDER BY ");
- buff.append(ContainerFilterBean.FIELD_ID);
- buff.append(",");
- buff.append(ContainerFilterBean.FIELD_WORKFLOW_STATE);
-
- logger.debug("field filter query : " + buff.toString());
-
- return buff.toString();
- }
-
- //--------------------------------------------------------------------------
- /**
* Perform filtering for NUMBER like fields.
* Container field values are loaded and converted to long representation before
* filtering comparison.
@@ -1039,15 +415,15 @@
BitSet result = new BitSet();
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
+ if ( (this.getFieldName()==null)
+ || (this.getFieldName().trim().equals(""))
|| (this.getClauses()==null)
|| (this.getClauses().size()==0) )
{
return null;
}
- Hashtable datas = getFieldValuesBySite(siteId, metadataName,
containerDefinitionName);
+ Hashtable datas = getFieldValuesBySite(siteId, this.getFieldName(),
containerDefinitionName);
if ( datas == null || datas.size()==0 ){
return result;
@@ -1076,11 +452,11 @@
}
if ( L != null )
{
- int size = this.clauses.size();
+ int size = this.getClauses().size();
int j = 0;
while ( (j<size) && !match )
{
- fClause = (FilterClause)this.clauses.get(j);
+ fClause = (FilterClause)this.getClauses().get(j);
if ( fClause != null && fClause.isValid() )
{
match = fClause.compare(L.longValue());
@@ -1098,8 +474,8 @@
ContentDefinition contentDefinition =
ContentDefinition.
getContentDefinitionInstance(
- contentObject.getDefinitionKey(this.
- entryLoadRequest));
+ contentObject.getDefinitionKey(this
+ .getEntryLoadRequest()));
if ( contentDefinition != null &&
containerDefinitionName.equals(contentDefinition.getName()) ){
result.set(contentObject.getID());
@@ -1134,15 +510,15 @@
BitSet result = new BitSet();
- if ( (this.getMetadataName()==null)
- || (this.getMetadataName().trim().equals(""))
+ if ( (this.getFieldName()==null)
+ || (this.getFieldName().trim().equals(""))
|| (this.getClauses()==null)
|| (this.getClauses().size()==0) )
{
return null;
}
- Hashtable datas =
this.getFieldValuesBySite(siteId,metadataName,containerDefinitionName);
+ Hashtable datas =
this.getFieldValuesBySite(siteId,this.getFieldName(),containerDefinitionName);
if ( datas == null || datas.size()==0 ){
return result;
@@ -1165,11 +541,11 @@
int i = 0;
while ( (i<nbVals) && !match ){
val = (String)vals[i];
- int size = this.clauses.size();
+ int size = this.getClauses().size();
int j = 0;
while ( (j<size) && !match )
{
- fClause = (FilterClause)this.clauses.get(j);
+ fClause = (FilterClause)this.getClauses().get(j);
if ( fClause != null && fClause.isValid() )
{
match = fClause.compare(val);
@@ -1187,8 +563,8 @@
ContentDefinition contentDefinition =
ContentDefinition.
getContentDefinitionInstance(
- contentObject.getDefinitionKey(this.
- entryLoadRequest));
+ contentObject.getDefinitionKey(this
+ .getEntryLoadRequest()));
if ( contentDefinition != null &&
containerDefinitionName.equals(contentDefinition.getName()) ){
result.set(contentObject.getID());
@@ -1233,20 +609,17 @@
ContentField field = null;
String fieldValue = null;
ContentObject sourceContentObject = null;
-
+ SoapParamBean jParams = new SoapParamBean(site, user);
int fieldId = 0;
- int wfState = this.entryLoadRequest.getWorkflowState();
- int versionId = this.entryLoadRequest.getVersionID();
- String languageCode = entryLoadRequest.getFirstLocale(true).toString();
- ContentObjectEntryState coes = new
ContentObjectEntryState(wfState,versionId,languageCode);
-
+ JahiaField jahiaField = null;
for ( int i=0 ; i<objectKeys.size() ; i++ ){
objectKey = (ObjectKey)objectKeys.get(i);
fieldId = Integer.parseInt(objectKey.getIDInType());
- field = ContentField.getField(fieldId);
- if ( field != null ){
- if (siteId == -1 || field.getSiteID() == siteId) {
- fieldValue = field.getValue(coes);
+ jahiaField = ServicesRegistry.getInstance().getJahiaFieldService()
+
.loadField(fieldId,LoadFlags.ALL,jParams,this.getEntryLoadRequest());
+ if ( jahiaField != null ){
+ if (siteId == -1 || jahiaField.getSiteID() == siteId) {
+ fieldValue = jahiaField.getRawValue();
if (fieldValue != null) {
datas.put(objectKey, fieldValue);
}
@@ -1254,38 +627,6 @@
}
}
return datas;
- }
-
-
- //--------------------------------------------------------------------------
- /**
- * Check if a field values must be converted to long representation before
comparison or not
- *
- * @param int , the container list id
- * @return boolean , true is a Long Value comparison is needed
- */
- private boolean needNumberValueFiltering(int ctnListID)
- throws JahiaException {
-
- // TODO: text or number filtering should be defined by the field type.
- // actually, it is defined by the template designer who can
force number filtering or not.
- return ( this.numberFiltering );
- }
- //--------------------------------------------------------------------------
- /**
- * Check if the comparator is valid
- *
- * @param String comparator, the comparator
- */
- private boolean checkComparator(String comparator){
- if ( comparator == null )
- return false;
- return ( comparator.equals(COMP_EQUAL)
- || comparator.equals(COMP_SMALLER)
- || comparator.equals(COMP_SMALLER_OR_EQUAL)
- || comparator.equals(COMP_BIGGER_OR_EQUAL)
- || comparator.equals(COMP_BIGGER) );
}
-
}
Index: ContainerSorterBean.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/data/containers/ContainerSorterBean.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ContainerSorterBean.java 2 Aug 2004 12:54:18 -0000 1.4
+++ ContainerSorterBean.java 10 Aug 2004 17:49:43 -0000 1.5
@@ -77,6 +77,8 @@
private EntryLoadRequest entryLoadRequest = EntryLoadRequest.CURRENT;
+ protected ContainerSorterBean(){}
+
//--------------------------------------------------------------------------
/**
* Constructor