📄 containerfilters.java
字号:
//// ____.// __/\ ______| |__/\. _______// __ .____| | \ | +----+ \// _______| /--| | | - \ _ | : - \_________// \\______: :---| : : | : | \________>// |__\---\_____________:______: :____|____:_____\// /_____|//// . . . i n j a h i a w e t r u s t . . .////////////// 27.05.2002 NK added in Jahiapackage org.jahia.data.containers;import java.util.BitSet;import java.util.Vector;import java.util.Date;import java.util.TimeZone;import java.util.Calendar;import org.jahia.params.*; // ParamBeanimport org.jahia.registries.*; // JahiaRegistriesimport org.jahia.exceptions.*;import org.jahia.registries.ServicesRegistry;import org.jahia.utils.JahiaConsole;import org.jahia.exceptions.JahiaException;/** * Jahia Standard Containers Filtering Handler for a given container list. * * @see ContainerFilterBean * @see JahiaContainerSet * @author Khue Nguyen <a href="mailto:khue@jahia.org">khue@jahia.org</a> */public class ContainerFilters { private static final String CLASS_NAME = ContainerFilters.class.getName(); private int ctnListID = -1; private BitSet bits; private Vector containerFilters; private String query; private boolean isValid = false; private boolean updated = false; private long lastFilteringTime = -1; //-------------------------------------------------------------------------- /** * Constructor * * @param int ctnListID, the container list id. * @param Vector containerFilters, a vector of ContainerFilterBean Bean. */ public ContainerFilters(int ctnListID, Vector containerFilters) throws JahiaException { this.ctnListID = ctnListID; this.containerFilters = containerFilters; buildQuery(); } //-------------------------------------------------------------------------- /** * Constructor * * @param String containerListName, the container list name. * @param ParamBean, the param bean. * @param Vector containerFilters, a vector of ContainerFilterBean Bean. */ public ContainerFilters(String containerListName, ParamBean params, Vector containerFilters) throws JahiaException { //JahiaConsole.println("ContainerFilters","Created container filter : " + containerListName); this.containerFilters = containerFilters; if ( containerListName != null ){ int clistID = ServicesRegistry.getInstance().getJahiaContainersService(). getContainerListID( containerListName, params.getPage().getID() ); if ( clistID != -1 ){ this.ctnListID = clistID; buildQuery(); } } } //-------------------------------------------------------------------------- /** * Perform filtering. * The expected result is a bit set of matching container ids. * * @return BitSet bits, the expected result as a bit set of matching ctn ids,each bit position set to true correspond to matching ctn ids. */ public BitSet doFilter() throws JahiaException { if ( !isQueryValid() ) return null; BitSet result = new BitSet(); BitSet bits = null; ContainerFilterBean containerFilter = null; Vector v = getContainerFilters(); int size = v.size(); for ( int i=0 ; i<size ; i++ ) { bits = new BitSet(); containerFilter = (ContainerFilterBean)v.get(i); bits = containerFilter.doFilter(getCtnListID()); if ( bits != null ) { if ( i == 0 ){ result.or(bits); } else { result.and(bits); } } } this.bits = result; this.updated = true; // Set search time TimeZone tz = TimeZone.getTimeZone("UTC"); Calendar cal = Calendar.getInstance(tz); Date nowDate = cal.getTime(); this.lastFilteringTime = nowDate.getTime(); return result; } //-------------------------------------------------------------------------- /** * Return the bit set of matching ctn ids. * YOu must call doFilter first. * * @return BitSet the bit set of matching ctn ids. */ public BitSet bits() { return this.bits; } //-------------------------------------------------------------------------- /** * Return the container list id. * * @return int ctnListID, the container list id. */ public int getCtnListID() { return this.ctnListID; } //-------------------------------------------------------------------------- /** * Return the query as String. * This query is only a SQL query representation of the combination of all filter select statement, * but not the one performed again the DB ! "Intersect" Set operator is not available with * all DB ( i.e : ACCESS ). * * @return String, the query. */ public String getQuery() { return this.query; } //-------------------------------------------------------------------------- /** * Return the vector of container filter bean. * * @return Vector, the vector ofcontainer filter bean. */ public Vector getContainerFilters() { return this.containerFilters; } //-------------------------------------------------------------------------- /** * Return true if the query is valid. * * @return boolean , true if the query is valid. */ public boolean isQueryValid() { return this.isValid; } //-------------------------------------------------------------------------- /** * Return the last filtering running time. * * @return long , the last filtering time */ public long getLastFilteringTime() { return this.lastFilteringTime; } //-------------------------------------------------------------------------- /** * Return the update status. Each time the doFilter method is called, this update status is set to true. * * @return boolean, the internal updated status value. */ public boolean getUpdateStatus() { return this.updated; } //-------------------------------------------------------------------------- /** * Set the update status to true. * */ public void setUpdateStatus() { this.updated = true; } //-------------------------------------------------------------------------- /** * You can reset the internal update status by setting it to false * */ public void resetUpdateStatus() { this.updated = false; } //-------------------------------------------------------------------------- /** * Compare two queries. * * @return boolean , true if the given query is different with the internal query. */ public boolean compareQuery(String query) { if ( !isQueryValid() || query == null ){ return false; } return (this.query.equals(query)); } //-------------------------------------------------------------------------- /** * Build the internal DB query. * */ private void buildQuery() { //JahiaConsole.println("ContainerFilters.buildQuery","Started"); if ( containerFilters == null || containerFilters.size()==0 ) { return; } StringBuffer buff = new StringBuffer(); String fieldFilterQuery; ContainerFilterBean containerFilter; int size = containerFilters.size(); for ( int i=0 ; i<size ; i++ ) { containerFilter = (ContainerFilterBean)containerFilters.get(i); if ( containerFilter == null ) return; fieldFilterQuery = containerFilter.getSelect(this.getCtnListID()); if ( fieldFilterQuery != null && !fieldFilterQuery.trim().equals("") ) { buff.append(fieldFilterQuery); } if ( i<size-1 ) { buff.append(" INTERSECT "); } } this.query = buff.toString(); //JahiaConsole.println("ContainerFilters.buildQuery","Builded query : " + this.query); this.isValid = true; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -