org.betaconceptframework.astroboa.console.jsf.browse.ContentObjectSearchByText.java Source code

Java tutorial

Introduction

Here is the source code for org.betaconceptframework.astroboa.console.jsf.browse.ContentObjectSearchByText.java

Source

/**
 * Copyright 2006 BetaCONCEPT
 * Created on Nov 1, 2006
 */
/*
 * Copyright (C) 2005-2012 BetaCONCEPT Limited
 *
 * This file is part of Astroboa.
 *
 * Astroboa is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Astroboa is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Astroboa.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.betaconceptframework.astroboa.console.jsf.browse;

import javax.faces.application.FacesMessage;

import org.apache.commons.lang.StringUtils;
import org.betaconceptframework.astroboa.api.model.query.Order;
import org.betaconceptframework.astroboa.api.model.query.criteria.ContentObjectCriteria;
import org.betaconceptframework.astroboa.console.commons.ContentObjectStatefulSearchService;
import org.betaconceptframework.astroboa.console.jsf.ContentObjectList;
import org.betaconceptframework.astroboa.console.jsf.PageController;
import org.betaconceptframework.astroboa.console.jsf.SearchResultsFilterAndOrdering;
import org.betaconceptframework.astroboa.console.jsf.UIComponentBinding;
import org.betaconceptframework.astroboa.model.factory.CmsCriteriaFactory;
import org.betaconceptframework.astroboa.util.CmsConstants;
import org.betaconceptframework.ui.jsf.AbstractUIBean;
import org.betaconceptframework.ui.jsf.utility.JSFUtilities;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

/**
 * @author gchomatas
 *
 */
@Name("contentObjectSearchByText")
@Scope(ScopeType.CONVERSATION)
/**
 * @author Gregory Chomatas (gchomatas@betaconcept.com)
 * @author Savvas Triantafyllou (striantafyllou@betaconcept.com)
 * 
 */
public class ContentObjectSearchByText extends AbstractUIBean {

    private static final long serialVersionUID = 1L;

    // Statically Injected objects
    private ContentObjectStatefulSearchService contentObjectStatefulSearchService;
    private ContentObjectList contentObjectList;
    private SearchResultsFilterAndOrdering searchResultsFilterAndOrdering;
    private PageController pageController;

    // Dynamically Injected Beans
    @In(required = false)
    UIComponentBinding uiComponentBinding;

    // this object holds all the search criteria upon which every searching/browsing for content objects in the repository is done
    ContentObjectCriteria contentObjectCriteria;

    // holds the text string by which we are searching
    private String searchedText;

    /*
     * search into the repository for objects that their text fields or their binary data contain a certain text string
     */
    public String findContentObjectsByTextAndPresent_UIAction() {

        // reset search criteria to begin a new search
        contentObjectCriteria = null;
        contentObjectCriteria = CmsCriteriaFactory.newContentObjectCriteria();

        if (uiComponentBinding != null)
            uiComponentBinding.resetContentObjectTableScrollerComponent();

        contentObjectList.resetViewAndStateBeforeNewContentSearchResultsPresentation();

        if (StringUtils.isBlank(searchedText)) {
            //In case a new page is rendered, that is TaxonomyEditpage was loaded and
            //user clicked to search content objects with an empty string this message won't be 
            //loaded to the new page
            JSFUtilities.addMessage(null,
                    "?  ?    ",
                    FacesMessage.SEVERITY_WARN);
            return null;
        }

        // add searched text to the criteria
        if (StringUtils.deleteWhitespace(searchedText).equals(searchedText) && !searchedText.contains("\"")
                && !searchedText.contains("'") && !searchedText.contains("*")) {
            //If Search Text contains only one word and not any special search character then Append * at the end
            contentObjectCriteria.addFullTextSearchCriterion(searchedText + CmsConstants.ANY_NAME);
        } else {
            contentObjectCriteria.addFullTextSearchCriterion(searchedText);
        }

        contentObjectCriteria.setOffsetAndLimit(0, pageController.getRowsPerDataTablePage());
        contentObjectCriteria.doNotCacheResults();

        // set required ordering
        if (searchResultsFilterAndOrdering.getSelectedResultsOrder() != null) {
            contentObjectCriteria.addOrderProperty("profile.modified",
                    Order.valueOf(searchResultsFilterAndOrdering.getSelectedResultsOrder()));
        } else {
            contentObjectCriteria.addOrderProperty("profile.modified", Order.descending);
        }

        //contentObjectCriteria.addOrderByRelevance(Order.descending);

        // now we are ready to run the query
        try {
            long startTime = System.currentTimeMillis();
            int resultSetSize = contentObjectStatefulSearchService.searchForContentWithPagedResults(
                    contentObjectCriteria, true, JSFUtilities.getLocaleAsString(),
                    pageController.getRowsPerDataTablePage());
            long endTime = System.currentTimeMillis();
            getLogger().debug("Find Content Objects by Topic UUID:FIRST EXECUTION to get object count took: "
                    + (endTime - startTime) + "ms");

            if (resultSetSize > 0) {

                contentObjectList.setContentObjectListHeaderMessage(JSFUtilities.getParameterisedStringI18n(
                        "object.list.message.contentObjectListHeaderMessageForTextSearch",
                        new String[] { searchedText, String.valueOf(resultSetSize) }));
                contentObjectList.setLabelForFileGeneratedWhenExportingListToXml(searchedText);
            } else
                JSFUtilities.addMessage(null, "object.list.message.noContentObjectsContainingThisTextInfo", null,
                        FacesMessage.SEVERITY_INFO);
        } catch (Exception e) {
            logger.error("Error while loading content objects ", e);
            JSFUtilities.addMessage(null, "object.list.message.contentObjectRetrievalError", null,
                    FacesMessage.SEVERITY_ERROR);
            return null;
        }

        return null;
    }

    public String getSearchedText() {
        return searchedText;
    }

    public void setSearchedText(String searchedText) {
        this.searchedText = searchedText;
    }

    // injected objects setters and getters 

    public void setContentObjectList(ContentObjectList contentObjectList) {
        this.contentObjectList = contentObjectList;
    }

    public void setContentObjectStatefulSearchService(
            ContentObjectStatefulSearchService contentObjectStatefulSearchService) {
        this.contentObjectStatefulSearchService = contentObjectStatefulSearchService;
    }

    public void setSearchResultsFilterAndOrdering(SearchResultsFilterAndOrdering searchResultsFilterAndOrdering) {
        this.searchResultsFilterAndOrdering = searchResultsFilterAndOrdering;
    }

    public void setPageController(PageController pageController) {
        this.pageController = pageController;
    }
}