Code Search for Developers
 
 
  

ControlledVocabularySearchServlet.java from DSpace at Krugle


Show ControlledVocabularySearchServlet.java syntax highlighted

/*
 * ConceptSearchServlet.java
 * 
 * Version: $Revision: 1414 $
 * 
 * Date: $Date: 2006-02-08 06:41:08 -0800 (Wed, 08 Feb 2006) $
 * 
 * Copyright (c) 2002, Hewlett-Packard Company and Massachusetts Institute of
 * Technology. All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met: -
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer. - Redistributions in binary
 * form must reproduce the above copyright notice, this list of conditions and
 * the following disclaimer in the documentation and/or other materials provided
 * with the distribution. - Neither the name of the Hewlett-Packard Company nor
 * the name of the Massachusetts Institute of Technology nor the names of their
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package org.dspace.app.webui.servlet;

import java.io.IOException;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.dspace.app.webui.util.JSPManager;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.Item;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.core.LogManager;
import org.dspace.handle.HandleManager;
import org.dspace.search.DSQuery;
import org.dspace.search.QueryArgs;
import org.dspace.search.QueryResults;

/**
 * Servlet that provides funcionality for searching the repository using a
 * controlled vocabulary as a basis for selecting the search keywords.
 * 
 * @author Miguel Ferreira
 * @version $Revision: 1414 $
 */
public class ControlledVocabularySearchServlet extends DSpaceServlet
{
    // the log
    private static Logger log = Logger
            .getLogger(ControlledVocabularySearchServlet.class);

    // the jsp that displays the HTML version of controlled-vocabulary
    private static final String SEARCH_JSP = "/controlledvocabulary/search.jsp";

    // the jsp that will show the search results
    private static final String RESULTS_JSP = "/controlledvocabulary/results.jsp";

    /**
     * Handles requests
     */
    protected void doDSGet(Context context, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException,
            SQLException, AuthorizeException
    {

        String action = request.getParameter("action") == null ? "" : request
                .getParameter("action");

        if (action.equals("search"))
        {
            List keywords = extractKeywords(request);
            String query = join(keywords, " or ");
            doSearch(context, request, query);
            JSPManager.showJSP(request, response, RESULTS_JSP);
        }
        else if (action.equals("filter"))
        {
            String filter = request.getParameter("filter");
            request.getSession().setAttribute("conceptsearch.filter", filter);
            JSPManager.showJSP(request, response, SEARCH_JSP);
        }
        else
        {
            JSPManager.showJSP(request, response, SEARCH_JSP);
        }
    }

    /**
     * Collects the selected terms from the HTML taxonomy displayed on the
     * search form
     * 
     * @param request
     *            The HttpServletRequest
     * @return A Vector with the selected terms from the taxonomy.
     */
    private List extractKeywords(HttpServletRequest request)
    {
        List keywords = new Vector();
        Enumeration enumeration = request.getParameterNames();
        while (enumeration.hasMoreElements())
        {
            String element = (String) enumeration.nextElement();
            if (element.startsWith("cb_"))
            {
                keywords.add("\"" + request.getParameter(element) + "\"");
            }
        }
        return keywords;
    }

    /**
     * Searches the repository and and puts the results in the request object
     * 
     * @param context
     *            The DSpace context
     * @param request
     *            The request object
     * @param query
     *            The query expression
     * @throws IOException
     * @throws SQLException
     */
    private void doSearch(Context context, HttpServletRequest request,
            String query) throws IOException, SQLException
    {
        // Get the query
        // String query = request.getParameter("query");
        int start = UIUtil.getIntParameter(request, "start");
        String advanced = request.getParameter("advanced");
        String fromAdvanced = request.getParameter("from_advanced");
        String advancedQuery = "";
        HashMap queryHash = new HashMap();

        // can't start earlier than 0 in the results!
        if (start < 0)
        {
            start = 0;
        }

        List itemHandles = new ArrayList();
        List collectionHandles = new ArrayList();
        List communityHandles = new ArrayList();

        Item[] resultsItems;
        Collection[] resultsCollections;
        Community[] resultsCommunities;

        QueryResults qResults = null;
        QueryArgs qArgs = new QueryArgs();

        // if the "advanced" flag is set, build the query string from the
        // multiple query fields
        if (advanced != null)
        {
            query = qArgs.buildQuery(request);
            advancedQuery = qArgs.buildHTTPQuery(request);
        }

        // Ensure the query is non-null
        if (query == null)
        {
            query = "";
        }

        // Get the location parameter, if any
        String location = request.getParameter("location");
        String newURL;

        // Build log information
        String logInfo = "";

        // Get our location
        Community community = UIUtil.getCommunityLocation(request);
        Collection collection = UIUtil.getCollectionLocation(request);

        // get the start of the query results page
        // List resultObjects = null;
        qArgs.setQuery(query);
        qArgs.setStart(start);

        // Perform the search
        if (collection != null)
        {
            logInfo = "collection_id=" + collection.getID() + ",";

            // Values for drop-down box
            request.setAttribute("community", community);
            request.setAttribute("collection", collection);

            qResults = DSQuery.doQuery(context, qArgs, collection);
        }
        else if (community != null)
        {
            logInfo = "community_id=" + community.getID() + ",";

            request.setAttribute("community", community);

            // Get the collections within the community for the dropdown box
            request
                    .setAttribute("collection.array", community
                            .getCollections());

            qResults = DSQuery.doQuery(context, qArgs, community);
        }
        else
        {
            // Get all communities for dropdown box
            Community[] communities = Community.findAll(context);
            request.setAttribute("community.array", communities);

            qResults = DSQuery.doQuery(context, qArgs);
        }

        // now instantiate the results and put them in their buckets
        for (int i = 0; i < qResults.getHitHandles().size(); i++)
        {
            String myHandle = (String) qResults.getHitHandles().get(i);
            Integer myType = (Integer) qResults.getHitTypes().get(i);

            // add the handle to the appropriate lists
            switch (myType.intValue())
            {
            case Constants.ITEM:
                itemHandles.add(myHandle);

                break;

            case Constants.COLLECTION:
                collectionHandles.add(myHandle);

                break;

            case Constants.COMMUNITY:
                communityHandles.add(myHandle);

                break;
            }
        }

        int numCommunities = communityHandles.size();
        int numCollections = collectionHandles.size();
        int numItems = itemHandles.size();

        // Make objects from the handles - make arrays, fill them out
        resultsCommunities = new Community[numCommunities];
        resultsCollections = new Collection[numCollections];
        resultsItems = new Item[numItems];

        for (int i = 0; i < numItems; i++)
        {
            String myhandle = (String) itemHandles.get(i);

            Object o = HandleManager.resolveToObject(context, myhandle);

            resultsItems[i] = (Item) o;

            if (resultsItems[i] == null)
            {
                throw new SQLException("Query \"" + query
                        + "\" returned unresolvable handle: " + myhandle);
            }
        }

        for (int i = 0; i < collectionHandles.size(); i++)
        {
            String myhandle = (String) collectionHandles.get(i);

            Object o = HandleManager.resolveToObject(context, myhandle);

            resultsCollections[i] = (Collection) o;

            if (resultsCollections[i] == null)
            {
                throw new SQLException("Query \"" + query
                        + "\" returned unresolvable handle: " + myhandle);
            }
        }

        for (int i = 0; i < communityHandles.size(); i++)
        {
            String myhandle = (String) communityHandles.get(i);

            Object o = HandleManager.resolveToObject(context, myhandle);

            resultsCommunities[i] = (Community) o;

            if (resultsCommunities[i] == null)
            {
                throw new SQLException("Query \"" + query
                        + "\" returned unresolvable handle: " + myhandle);
            }
        }

        // Log
        log.info(LogManager.getHeader(context, "search", logInfo + "query=\""
                + query + "\",results=(" + resultsCommunities.length + ","
                + resultsCollections.length + "," + resultsItems.length + ")"));

        // Pass in some page qualities
        // total number of pages
        int pageTotal = 1 + ((qResults.getHitCount() - 1) / qResults
                .getPageSize());

        // current page being displayed
        int pageCurrent = 1 + (qResults.getStart() / qResults.getPageSize());

        // pageLast = min(pageCurrent+9,pageTotal)
        int pageLast = ((pageCurrent + 9) > pageTotal) ? pageTotal
                : (pageCurrent + 9);

        // pageFirst = max(1,pageCurrent-9)
        int pageFirst = ((pageCurrent - 9) > 1) ? (pageCurrent - 9) : 1;

        // Pass the results to the display JSP
        request.setAttribute("items", resultsItems);
        request.setAttribute("communities", resultsCommunities);
        request.setAttribute("collections", resultsCollections);

        request.setAttribute("pagetotal", new Integer(pageTotal));
        request.setAttribute("pagecurrent", new Integer(pageCurrent));
        request.setAttribute("pagelast", new Integer(pageLast));
        request.setAttribute("pagefirst", new Integer(pageFirst));

        request.setAttribute("queryresults", qResults);

        // And the original query string
        request.setAttribute("query", query);

    }

    /**
     * Joins each element present in a list with a separator
     * 
     * @param list
     *            The list of elements
     * @param separator
     *            The separator that will be used between each element
     * @return A string with all the elements concatened and separated by the
     *         provided connector
     */
    public static String join(List list, String separator)
    {
        String result = "";
        Iterator iterator = list.listIterator();
        while (iterator.hasNext())
        {
            result += iterator.next().toString();
            if (iterator.hasNext())
                result += separator;
        }
        return result;
    }

    /**
     * Handle posts
     */
    protected void doDSPost(Context context, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException,
            SQLException, AuthorizeException
    {
        doDSGet(context, request, response);
    }

}




See more files for this project here

DSpace

Open Source Digital Asset Management system that enables services for access, provision, stewardship and re-use of digital assets with a focus on educational and research materials

Project homepage: http://sourceforge.net/projects/dspace
Programming language(s): Java,JSP,XML
License: other

  admin/
    AuthorizeAdminServlet.java
    BitstreamFormatRegistry.java
    CollectionWizardServlet.java
    EPersonAdminServlet.java
    EPersonListServlet.java
    EditCommunitiesServlet.java
    EditItemServlet.java
    GroupEditServlet.java
    GroupListServlet.java
    ItemMapServlet.java
    LicenseEditServlet.java
    MetadataFieldRegistryServlet.java
    MetadataSchemaRegistryServlet.java
    NewsEditServlet.java
    SuperviseServlet.java
    WithdrawnBrowserServlet.java
    WorkflowAbortServlet.java
  AbstractBrowserServlet.java
  AdvancedSearchServlet.java
  BitstreamServlet.java
  BrowserServlet.java
  CommunityListServlet.java
  ControlledVocabularySearchServlet.java
  ControlledVocabularyServlet.java
  DSpaceServlet.java
  EditProfileServlet.java
  FeedServlet.java
  FeedbackServlet.java
  HTMLServlet.java
  HandleServlet.java
  InternalErrorServlet.java
  LDAPServlet.java
  LoadDSpaceConfig.java
  LogoutServlet.java
  MyDSpaceServlet.java
  OpenURLServlet.java
  PasswordServlet.java
  RegisterServlet.java
  RetrieveServlet.java
  SimpleSearchServlet.java
  SitemapServlet.java
  StatisticsServlet.java
  SubmissionController.java
  SubscribeServlet.java
  SuggestServlet.java
  ViewWorkspaceItemServlet.java
  WorkspaceServlet.java