📄 jahiacontainerset.java
字号:
ContainerSorterBean sorter = getContainerSorter( params, containerListName, clistID, resultHasChanged, resultBitSet); if ( sorter != null && sorter.result()!=null ){ return sorter.result(); } else { // it's a fake sorter or sorting failed // so return the list of matching ctn ids, without sorting try { Vector ctnIds = null; // get all container ids ctnIds = ServicesRegistry.getInstance() .getJahiaContainersService().getctnidsInList(clistID); if ( resultBitSet == null ){ return ctnIds; } else { Vector v = new Vector(); int size = ctnIds.size(); for (int i=0; i < size; i++) { int ctnid = ((Integer)ctnIds.elementAt(i)).intValue(); if ( resultBitSet.get(ctnid) ){ v.add(ctnIds.elementAt(i)); } } return v; } } catch ( Throwable t ){ JahiaConsole.println("ContainerSorterBean.doSort", "Exception occured :" + t.getMessage()); t.printStackTrace(); } } } catch ( Throwable t ){ JahiaConsole.println("JahiaContainerSet.doContainerFilterSearch", "Exception occured : " + t.getMessage() ); t.printStackTrace(); } return null; // on any error return null vector, so Jahia will return all // containers without search, filtering or sorting of any sort. } //-------------------------------------------------------------------------- /** * Apply container search if needed * * @param ParamBean jParams, the param bean. * @param String the container list name. * @param int the container list id. * @return ContainerSearcher, can be null * @author NK */ private ContainerSearcher getCtnListSearcher( ParamBean params, String containerListName, int clistID ) throws JahiaException { ContainerSearcher cachedContainerSearcher = null; ContainerSearcher cSearcher = null; HttpSession session = params.getSession(); if ( session != null ) { // retrieve the previous searcher cached in session cachedContainerSearcher = (ContainerSearcher)session.getAttribute( JahiaSearchConstant.CLIST_SEARCHQUERY_INPUT_PREFIX + clistID ); } // Check if a search must be applyed to this container list. String searchQuery = params.getParameter( JahiaSearchConstant.CLIST_SEARCHQUERY_INPUT_PREFIX + containerListName ); if ( searchQuery == null || searchQuery.trim().equals("") ){ // create a fake searcher cSearcher = new ContainerSearcher(clistID); if ( cachedContainerSearcher == null ){ cSearcher.setUpdateStatus(); // we cannot determinate the previous search result, // so let say search result has changed. } else if ( cachedContainerSearcher.getResult() != null ){ cSearcher.setUpdateStatus(); // previous search returned some results and because now , no result // are returned, so let say search result has changed. } } else { boolean doNewSearch = true; if ( cachedContainerSearcher != null && ( cachedContainerSearcher.getQuery() != null ) && cachedContainerSearcher.getQuery().equals(searchQuery) ) { // check if the container list has been changed the last time the search was performed long lastSearchTime = cachedContainerSearcher.getLastSearchTime(); ContainersChangeEventListener listener = (ContainersChangeEventListener) JahiaListenersRegistry.getInstance() .getListener(ContainersChangeEventListener.class.getName()); if ( listener != null ) { long lastCtnListChangeTime = listener.getCtnListLastChangeTime(clistID); if ( lastCtnListChangeTime <= lastSearchTime ) { cSearcher = cachedContainerSearcher; cSearcher.resetUpdateStatus(); // to indicate no new search has been launched. JahiaConsole.println("JahiaContainerSet.getCtnListSearcher", "Container Searcher found in session with same query and ctnlList did not change -> no need to run search again."); doNewSearch = false; } } } if ( doNewSearch ) { cSearcher = new ContainerSearcher(clistID); cSearcher.search(searchQuery,params); JahiaConsole.println("JahiaContainerSet.getCtnListSearcher", "Container Searcher launched new search"); } } // cache the container searcher in session if ( session != null && cSearcher != null ) { session.setAttribute( JahiaSearchConstant.CLIST_SEARCHQUERY_INPUT_PREFIX + clistID , cSearcher ); } return cSearcher; } //-------------------------------------------------------------------------- /** * Apply container filtering if needed * * @param ParamBean jParams, the param bean. * @param String the container list name. * @param int the container list id. * @return ContainerFilters, can be null * @author NK */ private ContainerFilters getCtnListFilters( ParamBean params, String containerListName, int clistID ) throws JahiaException { JahiaConsole.println("JahiaContainerSet.getCtnListFilters", "Started for container list : " + containerListName + "[" + clistID + "]"); ContainerFilters cFilters = (ContainerFilters)params.getRequest() .getAttribute(containerListName + "_filter_handler"); // retrieve the previous searcher cached in session ContainerFilters cachedContainerFilters = null; HttpSession session = params.getSession(); if ( session != null ) { cachedContainerFilters = (ContainerFilters)session.getAttribute( clistID + "_filter_handler" ); } if ( cFilters == null || !cFilters.isQueryValid() ){ JahiaConsole.println("JahiaContainerSet.getCtnListFilters", "create fake filter"); // create a fake filter cFilters = new ContainerFilters(clistID, new Vector()); if ( cachedContainerFilters == null ){ cFilters.setUpdateStatus(); // we cannot determinate the previous filter result, // so let say filter result has changed. } else if ( cachedContainerFilters.bits() != null ){ cFilters.setUpdateStatus(); // previous filtering returned some results and because now , no result // will be returned, so let say filtering result has changed. } } else { boolean doNewFiltering = true; // We need to create a container filter handler with the correct container list ID! ContainerFilters customCFilters = new ContainerFilters(clistID,cFilters.getContainerFilters()); if ( cachedContainerFilters != null && ( cachedContainerFilters.getQuery() != null ) && cachedContainerFilters.getQuery().equals(customCFilters.getQuery()) ) { // check if the container list has been changed the last time the filtering was performed long lastFilteringTime = cachedContainerFilters.getLastFilteringTime(); ContainersChangeEventListener listener = (ContainersChangeEventListener) JahiaListenersRegistry.getInstance() .getListener(ContainersChangeEventListener.class.getName()); if ( listener != null ) { long lastCtnListChangeTime = listener.getCtnListLastChangeTime(clistID); if ( lastCtnListChangeTime <= lastFilteringTime ) { customCFilters = cachedContainerFilters; customCFilters.resetUpdateStatus(); // to indicate no new filtering has been launched. JahiaConsole.println("JahiaContainerSet.getCtnListFilters", "Container Filters found in session with same query and ctnlList did not change -> no need to run filtering again."); doNewFiltering = false; } } } if ( doNewFiltering ) { customCFilters.doFilter(); JahiaConsole.println("JahiaContainerSet.getCtnListFilters", "Container Filters launched new filtering"); } cFilters = customCFilters; } // cache the container filters in session if ( session != null && cFilters != null ) { session.setAttribute( clistID + "_filter_handler" , cFilters ); } return cFilters; } //-------------------------------------------------------------------------- /** * Apply container sorting if needed * * @param ParamBean jParams, the param bean. * @param String the container list name. * @param int the container list id. * @param boolean filteringResultHasChanged, does pre-filtering * and searching 's result change ?. * @param BitSet the filtering and search result as BitSet * * @return ContainerSorterBean, the container sort handler * @author NK */ private ContainerSorterBean getContainerSorter( ParamBean params, String containerListName, int clistID, boolean resultHasChanged, BitSet resultBitSet ) throws JahiaException { //JahiaConsole.println("JahiaContainerSet.getContainersSorter", // "Started"); ContainerSorterBean sorter = (ContainerSorterBean)params.getRequest() .getAttribute(containerListName + "_sort_handler"); // retrieve the previous sorter cached in session ContainerSorterBean cachedSorter = null; HttpSession session = params.getSession(); if ( session != null ) { cachedSorter = (ContainerSorterBean)session.getAttribute( clistID + "_sort_handler" ); } if ( sorter == null || !sorter.isValid() ){ //JahiaConsole.println("JahiaContainerSet.getContainersSorter", // "Create fake sorter"); // create a fake sorter sorter = new ContainerSorterBean(clistID, ""); // with undefined sorting field if ( cachedSorter == null ){ sorter.setUpdateStatus(); // we cannot determinate the previous filter result, // so let say sorter result has changed. } else if ( cachedSorter.result() != null ){ sorter.setUpdateStatus(); // previous sorter returned some results and because now , no result // will be returned, so let say sort result has changed. } } else { JahiaConsole.println("JahiaContainerSet.getContainersSorter", "Found sort hanlder on field [" + sorter.getSortingFieldName() + "]"); boolean doNewSorting = true; // We need to create a container sort handler with the correct container list ID! ContainerSorterBean customCSorter = new ContainerSorterBean(clistID,sorter.getSortingFieldName()); customCSorter.setAscOrdering(sorter.isAscOrdering()); customCSorter.setNumberOrdering(sorter.isNumberOrdering()); if ( cachedSorter != null && cachedSorter.isValid() && cachedSorter.getSortingFieldName().equals(customCSorter.getSortingFieldName()) && (cachedSorter.isAscOrdering()==customCSorter.isAscOrdering()) && !resultHasChanged ) { // check if the container list did change since the last time the sorting was performed long lastSortingTime = cachedSorter.getLastSortingTime(); ContainersChangeEventListener listener = (ContainersChangeEventListener) JahiaListenersRegistry.getInstance() .getListener(ContainersChangeEventListener.class.getName()); if ( listener != null ) { long lastCtnListChangeTime = listener.getCtnListLastChangeTime(clistID); if ( lastCtnListChangeTime <= lastSortingTime ) { customCSorter = cachedSorter; customCSorter.resetUpdateStatus(); // to indicate no new sorting has been launched. JahiaConsole.println("JahiaContainerSet.getContainerSorter", "Container Sorter found in session with same sorting field and ctnlList did not change -> no need to run sorting again."); doNewSorting = false; } } } if ( doNewSorting ) { customCSorter.doSort(resultBitSet); JahiaConsole.println("JahiaContainerSet.getContainersSorter", "Container Sorter launched new sort"); } sorter = customCSorter; } // cache the container filters in session if ( session != null && sorter != null ) { session.setAttribute( clistID + "_sort_handler" , sorter ); } return sorter; } } // end JahiaContainerSet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -