edu.cornell.mannlib.vitro.webapp.utils.ConceptSearchService.ConceptSearchServiceUtils.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.utils.ConceptSearchService.ConceptSearchServiceUtils.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.utils.ConceptSearchService;

import java.util.HashMap;
import java.util.List;

import javax.servlet.ServletContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import edu.cornell.mannlib.semservices.bo.Concept;
import edu.cornell.mannlib.semservices.service.ExternalConceptService;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;

/**
 * Utilities for search    
 */
public class ConceptSearchServiceUtils {
    private static final Log log = LogFactory.getLog(ConceptSearchServiceUtils.class);
    //Get the appropriate search service class
    //TODO: Change this so retrieved from the system instead using a query
    private static final String UMLSVocabSource = "http://link.informatics.stonybrook.edu/umls";
    private static final String AgrovocVocabSource = "http://aims.fao.org/aos/agrovoc/agrovocScheme";
    private static final String GemetVocabSource = "http://www.eionet.europa.eu/gemet/gemetThesaurus";
    private static final String LCSHVocabSource = "http://id.loc.gov/authorities/subjects";

    //Get the class that corresponds to the appropriate search
    public static String getConceptSearchServiceClassName(String searchServiceName) {
        HashMap<String, String> map = getMapping();
        if (map.containsKey(searchServiceName)) {
            return map.get(searchServiceName);
        }
        return null;
    }

    //Get the URLS for the different services
    //URL to label
    public static HashMap<String, VocabSourceDescription> getVocabSources() {
        HashMap<String, VocabSourceDescription> map = new HashMap<String, VocabSourceDescription>();
        map.put(UMLSVocabSource, new VocabSourceDescription("UMLS", UMLSVocabSource,
                "http://www.nlm.nih.gov/research/umls/", "Unified Medical Language System"));
        //Commenting out agrovoc for now until implementation is updated
        map.put(AgrovocVocabSource, new VocabSourceDescription("AGROVOC", AgrovocVocabSource,
                "http://www.fao.org/agrovoc/", "Agricultural Vocabulary"));
        map.put(GemetVocabSource, new VocabSourceDescription("GEMET", GemetVocabSource,
                "http://www.eionet.europa.eu/gemet", "GEneral Multilingual Environmental Thesaurus"));
        map.put(LCSHVocabSource, new VocabSourceDescription("LCSH", LCSHVocabSource,
                "http://id.loc.gov/authorities/subjects/", "Library of Congress Subject Headings"));

        return map;
    }

    //Get additional vocab source info

    //Get the hashmap mapping service name to Service class
    private static HashMap<String, String> getMapping() {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put(UMLSVocabSource, "edu.cornell.mannlib.semservices.service.impl.UMLSService");
        map.put(AgrovocVocabSource, "edu.cornell.mannlib.semservices.service.impl.AgrovocService");
        map.put(GemetVocabSource, "edu.cornell.mannlib.semservices.service.impl.GemetService");
        map.put(LCSHVocabSource, "edu.cornell.mannlib.semservices.service.impl.LCSHService");

        return map;
    }

    public static List<Concept> getSearchResults(ServletContext context, VitroRequest vreq) throws Exception {
        String searchServiceName = getSearchServiceUri(vreq);
        String searchServiceClassName = getConceptSearchServiceClassName(searchServiceName);

        ExternalConceptService conceptServiceClass = null;

        Object object = null;
        try {
            Class classDefinition = Class.forName(searchServiceClassName);
            object = classDefinition.newInstance();
            conceptServiceClass = (ExternalConceptService) object;
        } catch (InstantiationException e) {
            System.out.println(e);
        } catch (IllegalAccessException e) {
            System.out.println(e);
        } catch (ClassNotFoundException e) {
            System.out.println(e);
        }

        if (conceptServiceClass == null) {
            log.error("could not find Concept Search Class for " + searchServiceName);
            return null;
        }

        //Get search
        String searchTerm = getSearchTerm(vreq);
        List<Concept> conceptResults = conceptServiceClass.getConcepts(searchTerm);
        return conceptResults;
    }

    private static String getSearchServiceUri(VitroRequest vreq) {
        return vreq.getParameter("source");
    }

    private static String getSearchTerm(VitroRequest vreq) {
        return vreq.getParameter("searchTerm");
    }

}