NIHVIVO-2460 Migrate menu pages to Solr index

This commit is contained in:
ryounes 2011-05-24 20:46:46 +00:00
parent e05a531d95
commit 3fbbd561c5
6 changed files with 40 additions and 39 deletions

View file

@ -143,17 +143,16 @@
</listener> </listener>
<!-- The Lucene index uses a "public" filter, so the PropertyRestrictionPolicyHelper must already be set up. --> <!-- The Lucene index uses a "public" filter, so the PropertyRestrictionPolicyHelper must already be set up. -->
<!--
<listener> <listener>
<listener-class> edu.cornell.mannlib.vitro.webapp.search.lucene.LuceneSetup </listener-class> <listener-class> edu.cornell.mannlib.vitro.webapp.search.lucene.LuceneSetup </listener-class>
</listener> </listener>
-->
<!--
<listener> <listener>
<listener-class> <listener-class>
edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup
</listener-class> </listener-class>
</listener> </listener>
-->
<!--<listener> <!--<listener>
<listener-class> <listener-class>
@ -875,46 +874,47 @@
<url-pattern>/listObjectPropertyStatements</url-pattern> <url-pattern>/listObjectPropertyStatements</url-pattern>
</servlet-mapping> </servlet-mapping>
<!--
<servlet> <servlet>
<servlet-name>IndividualListController</servlet-name> <servlet-name>IndividualListController</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController</servlet-class>
</servlet> </servlet>
<!-- -->
<servlet> <servlet>
<servlet-name>IndividualListController</servlet-name> <servlet-name>IndividualListController</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.freemarker.SolrIndividualListController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.controller.freemarker.SolrIndividualListController</servlet-class>
</servlet> </servlet>
-->
<servlet-mapping> <servlet-mapping>
<servlet-name>IndividualListController</servlet-name> <servlet-name>IndividualListController</servlet-name>
<url-pattern>/individuallist</url-pattern> <url-pattern>/individuallist</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet> <!--
<servlet>
<servlet-name>IndividualListRdf</servlet-name> <servlet-name>IndividualListRdf</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.EntityURLController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.controller.EntityURLController</servlet-class>
</servlet> </servlet>
<!-- -->
<servlet> <servlet>
<servlet-name>IndividualListRdf</servlet-name> <servlet-name>IndividualListRdf</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.IndividualListRdfController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.controller.IndividualListRdfController</servlet-class>
</servlet> </servlet>
-->
<servlet-mapping> <servlet-mapping>
<servlet-name>IndividualListRdf</servlet-name> <servlet-name>IndividualListRdf</servlet-name>
<url-pattern>/listrdf/*</url-pattern> <url-pattern>/listrdf/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<!--
<servlet> <servlet>
<servlet-name>SearchController</servlet-name> <servlet-name>SearchController</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.PagedSearchController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.PagedSearchController</servlet-class>
</servlet> </servlet>
<!-- -->
<servlet> <servlet>
<servlet-name>SearchController</servlet-name> <servlet-name>SearchController</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.SolrPagedSearchController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.SolrPagedSearchController</servlet-class>
</servlet> </servlet>
-->
<servlet-mapping> <servlet-mapping>
<servlet-name>SearchController</servlet-name> <servlet-name>SearchController</servlet-name>
<url-pattern>/search</url-pattern> <url-pattern>/search</url-pattern>
@ -933,16 +933,16 @@
<url-pattern>/searchcontroller</url-pattern> <url-pattern>/searchcontroller</url-pattern>
</servlet-mapping> </servlet-mapping>
<!--
<servlet> <servlet>
<servlet-name>AutocompleteController</servlet-name> <servlet-name>AutocompleteController</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.AutocompleteController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.AutocompleteController</servlet-class>
</servlet> </servlet>
<!-- -->
<servlet> <servlet>
<servlet-name>AutocompleteController</servlet-name> <servlet-name>AutocompleteController</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.SolrAutocompleteController</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.search.controller.SolrAutocompleteController</servlet-class>
</servlet> </servlet>
-->
<servlet-mapping> <servlet-mapping>
<servlet-name>AutocompleteController</servlet-name> <servlet-name>AutocompleteController</servlet-name>
<url-pattern>/autocomplete</url-pattern> <url-pattern>/autocomplete</url-pattern>
@ -988,16 +988,16 @@
<url-pattern>/contact</url-pattern> <url-pattern>/contact</url-pattern>
</servlet-mapping> </servlet-mapping>
<!--
<servlet> <servlet>
<servlet-name>JSON Service</servlet-name> <servlet-name>JSON Service</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.JSONServlet</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.controller.JSONServlet</servlet-class>
</servlet> </servlet>
<!-- -->
<servlet> <servlet>
<servlet-name>JSON Service</servlet-name> <servlet-name>JSON Service</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.SolrJsonServlet</servlet-class> <servlet-class>edu.cornell.mannlib.vitro.webapp.controller.SolrJsonServlet</servlet-class>
</servlet> </servlet>
-->
<servlet-mapping> <servlet-mapping>
<servlet-name>JSON Service</servlet-name> <servlet-name>JSON Service</servlet-name>
<url-pattern>/dataservice</url-pattern> <url-pattern>/dataservice</url-pattern>

View file

@ -33,9 +33,8 @@ import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.SolrIndividualListController.PageRecord;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.SolrIndividualListController; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.SolrIndividualListController;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
@ -44,7 +43,6 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.EditConfiguration; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.EditConfiguration;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.SelectListGenerator; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.SelectListGenerator;
import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch; import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel;
/** /**
* This servlet is for servicing requests for JSON objects/data. * This servlet is for servicing requests for JSON objects/data.
@ -54,6 +52,7 @@ import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.Individual
*/ */
public class SolrJsonServlet extends VitroHttpServlet { public class SolrJsonServlet extends VitroHttpServlet {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(SolrJsonServlet.class.getName()); private static final Log log = LogFactory.getLog(SolrJsonServlet.class.getName());
private static final int REPLY_SIZE = 256; private static final int REPLY_SIZE = 256;
@ -79,8 +78,8 @@ public class SolrJsonServlet extends VitroHttpServlet {
}else if( vreq.getParameter("getN3EditOptionList") != null ){ }else if( vreq.getParameter("getN3EditOptionList") != null ){
doN3EditOptionList(req,resp); doN3EditOptionList(req,resp);
return; return;
}else if( vreq.getParameter("getLuceneIndividualsByVClass") != null ){ }else if( vreq.getParameter("getSolrIndividualsByVClass") != null ){
getLuceneIndividualsByVClass(req,resp); getSolrIndividualsByVClass(req,resp);
return; return;
}else if( vreq.getParameter("getVClassesForVClassGroup") != null ){ }else if( vreq.getParameter("getVClassesForVClassGroup") != null ){
getVClassesForVClassGroup(req,resp); getVClassesForVClassGroup(req,resp);
@ -127,7 +126,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
writer.write(map.toString()); writer.write(map.toString());
} }
private void getLuceneIndividualsByVClass( HttpServletRequest req, HttpServletResponse resp ){ private void getSolrIndividualsByVClass( HttpServletRequest req, HttpServletResponse resp ){
String errorMessage = null; String errorMessage = null;
JSONObject rObj = null; JSONObject rObj = null;
try{ try{
@ -146,7 +145,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
log.debug("parameter vclassId URI parameter expected "); log.debug("parameter vclassId URI parameter expected ");
throw new Exception("parameter vclassId URI parameter expected "); throw new Exception("parameter vclassId URI parameter expected ");
} }
rObj = getLuceneIndividualsByVClass(vclass.getURI(),req, getServletContext()); rObj = getSolrIndividualsByVClass(vclass.getURI(),req, getServletContext());
}catch(Exception ex){ }catch(Exception ex){
errorMessage = ex.toString(); errorMessage = ex.toString();
log.error(ex,ex); log.error(ex,ex);
@ -175,7 +174,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
} }
public static JSONObject getLuceneIndividualsByVClass(String vclassURI, HttpServletRequest req, ServletContext context) throws Exception { public static JSONObject getSolrIndividualsByVClass(String vclassURI, HttpServletRequest req, ServletContext context) throws Exception {
VitroRequest vreq = new VitroRequest(req); VitroRequest vreq = new VitroRequest(req);
VClass vclass=null; VClass vclass=null;
@ -193,6 +192,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
if( log.isDebugEnabled() ){ if( log.isDebugEnabled() ){
@SuppressWarnings("unchecked")
Enumeration<String> e = vreq.getParameterNames(); Enumeration<String> e = vreq.getParameterNames();
while(e.hasMoreElements()){ while(e.hasMoreElements()){
String name = (String)e.nextElement(); String name = (String)e.nextElement();
@ -224,9 +224,9 @@ public class SolrJsonServlet extends VitroHttpServlet {
.put("name",vclass.getName())); .put("name",vclass.getName()));
if (vclass != null) { if (vclass != null) {
String alpha = IndividualListController.getAlphaParameter(vreq); String alpha = SolrIndividualListController.getAlphaParameter(vreq);
int page = IndividualListController.getPageParameter(vreq); int page = SolrIndividualListController.getPageParameter(vreq);
Map<String,Object> map = IndividualListController.getResultsForVClass( Map<String,Object> map = SolrIndividualListController.getResultsForVClass(
vclass.getURI(), vclass.getURI(),
page, page,
alpha, alpha,
@ -236,6 +236,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
rObj.put("totalCount", map.get("totalCount")); rObj.put("totalCount", map.get("totalCount"));
rObj.put("alpha", map.get("alpha")); rObj.put("alpha", map.get("alpha"));
@SuppressWarnings("unchecked")
List<Individual> inds = (List<Individual>)map.get("entities"); List<Individual> inds = (List<Individual>)map.get("entities");
JSONArray jInds = new JSONArray(); JSONArray jInds = new JSONArray();
@ -261,6 +262,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
rObj.put("individuals", jInds); rObj.put("individuals", jInds);
JSONArray wpages = new JSONArray(); JSONArray wpages = new JSONArray();
@SuppressWarnings("unchecked")
List<PageRecord> pages = (List<PageRecord>)map.get("pages"); List<PageRecord> pages = (List<PageRecord>)map.get("pages");
for( PageRecord pr: pages ){ for( PageRecord pr: pages ){
JSONObject p = new JSONObject(); JSONObject p = new JSONObject();
@ -384,6 +386,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
HttpSession session = vreq.getSession(); HttpSession session = vreq.getSession();
if( session == null ) if( session == null )
throw new ServletException("there is no session to get the pervious results from"); throw new ServletException("there is no session to get the pervious results from");
@SuppressWarnings("unchecked")
List<Individual> entsInVClass = (List<Individual>) session.getAttribute(resKey); List<Individual> entsInVClass = (List<Individual>) session.getAttribute(resKey);
if( entsInVClass == null ) if( entsInVClass == null )
throw new ServletException("Could not find List<Individual> for resultKey " + resKey); throw new ServletException("Could not find List<Individual> for resultKey " + resKey);
@ -391,7 +394,6 @@ public class SolrJsonServlet extends VitroHttpServlet {
List<Individual> entsToReturn = new ArrayList<Individual>(REPLY_SIZE); List<Individual> entsToReturn = new ArrayList<Individual>(REPLY_SIZE);
boolean more = false; boolean more = false;
int count = 0; int count = 0;
int size = REPLY_SIZE;
/* we have a large number of items to send back so we need to stash the list in the session scope */ /* we have a large number of items to send back so we need to stash the list in the session scope */
if( entsInVClass.size() > REPLY_SIZE){ if( entsInVClass.size() > REPLY_SIZE){
more = true; more = true;
@ -546,7 +548,7 @@ public class SolrJsonServlet extends VitroHttpServlet {
private JSONArray individualsToJson(List<Individual> individuals) throws ServletException { private JSONArray individualsToJson(List<Individual> individuals) throws ServletException {
JSONArray ja = new JSONArray(); JSONArray ja = new JSONArray();
Iterator it = individuals.iterator(); Iterator<Individual> it = individuals.iterator();
try{ try{
while(it.hasNext()){ while(it.hasNext()){
Individual ent = (Individual) it.next(); Individual ent = (Individual) it.next();
@ -562,6 +564,4 @@ public class SolrJsonServlet extends VitroHttpServlet {
return ja; return ja;
} }
} }

View file

@ -41,6 +41,7 @@ public class HomePageController extends FreemarkerHttpServlet {
if(pageData != null) if(pageData != null)
body.putAll(pageData); body.putAll(pageData);
} }
body.put("dataServiceUrlVClassesForVClassGroup", UrlBuilder.getUrl("/dataservice?getVClassesForVClassGroup=1&classgroupUri="));
return new TemplateResponseValues(BODY_TEMPLATE, body); return new TemplateResponseValues(BODY_TEMPLATE, body);
} }

View file

@ -56,6 +56,7 @@ public class PageController extends FreemarkerHttpServlet{
if( page.containsKey("title") ){ if( page.containsKey("title") ){
mapForTemplate.put("title", page.get("title")); mapForTemplate.put("title", page.get("title"));
} }
mapForTemplate.put("dataServiceUrlIndividualsByVClass", UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClass=1&vclassId="));
} catch (Throwable th) { } catch (Throwable th) {
return doNotFound(vreq); return doNotFound(vreq);
} }

View file

@ -67,7 +67,7 @@ ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/browseClassGrou
<script type="text/javascript"> <script type="text/javascript">
var browseData = { var browseData = {
baseUrl: '${urls.base}', baseUrl: '${urls.base}',
dataServiceUrl: '${urls.base}/dataservice?getVClassesForVClassGroup=1&classgroupUri=', dataServiceUrl: '${dataServiceUrlVClassesForVClassGroup}',
defaultBrowseClassGroupUri: '${firstPopulatedClassGroup.uri!}', defaultBrowseClassGroupUri: '${firstPopulatedClassGroup.uri!}',
defaultBrowseClassGroupCount: '${firstPopulatedClassGroup.individualCount!}' defaultBrowseClassGroupCount: '${firstPopulatedClassGroup.individualCount!}'
}; };

View file

@ -15,11 +15,10 @@
</#if> </#if>
</#list> </#list>
<#-- For v1.3: The controller should pass in the dataservice url. -->
<script type="text/javascript"> <script type="text/javascript">
var menupageData = { var menupageData = {
baseUrl: '${urls.base}', baseUrl: '${urls.base}',
dataServiceUrl: '${urls.base}/dataservice?getLuceneIndividualsByVClass=1&vclassId=', dataServiceUrl: '${dataServiceUrlIndividualsByVClass}',
defaultBrowseVClassUri: '${firstNonEmptyVClass}' defaultBrowseVClassUri: '${firstNonEmptyVClass}'
}; };
</script> </script>