Skip to content

Commit

Permalink
Merge branch 'abstractsearchengine' into dusty-dev
Browse files Browse the repository at this point in the history
Conflicts:
	.classpath
	.project
	.settings/org.eclipse.jdt.core.prefs
	.settings/org.eclipse.wst.common.component
	.settings/org.maven.ide.eclipse.prefs
  • Loading branch information
n8fr8 committed Sep 21, 2010
2 parents 8a3fba2 + 7db23d0 commit 8b19770
Show file tree
Hide file tree
Showing 159 changed files with 392 additions and 1,743 deletions.
8 changes: 8 additions & 0 deletions .classpath
Expand Up @@ -5,5 +5,13 @@
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.iam.jdt.core.mavenClasspathContainer">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/tomcat"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
2 changes: 1 addition & 1 deletion .project
Expand Up @@ -35,4 +35,4 @@
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
<nature>org.datanucleus.ide.eclipse.projectnature</nature>
</natures>
</projectDescription>
</projectDescription>
2 changes: 1 addition & 1 deletion .settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
#Sat Sep 11 23:29:12 EDT 2010
#Mon Sep 20 22:47:57 EDT 2010
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
Expand Down
6 changes: 5 additions & 1 deletion .settings/org.eclipse.wst.common.component
Expand Up @@ -11,6 +11,10 @@
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/target/classes"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
</wb-module>
<property name="java-output-path" value="/OpenLegislation/target/classes"/>
<property name="context-root" value="legislation"/>
</wb-module>
</project-modules>
2 changes: 1 addition & 1 deletion .settings/org.maven.ide.eclipse.prefs
@@ -1,4 +1,4 @@
#Sat Sep 11 20:25:57 EDT 2010
#Mon Sep 20 22:47:57 EDT 2010
activeProfiles=
eclipse.preferences.version=1
fullBuildGoals=process-test-resources
Expand Down
267 changes: 192 additions & 75 deletions src/main/java/gov/nysenate/openleg/APIServlet.java
@@ -1,11 +1,24 @@
package gov.nysenate.openleg;

import gov.nysenate.openleg.model.Bill;
import gov.nysenate.openleg.model.Transcript;
import gov.nysenate.openleg.search.Result;
import gov.nysenate.openleg.search.SearchEngine2;
import gov.nysenate.openleg.search.SearchResult;
import gov.nysenate.openleg.search.SearchResultSet;
import gov.nysenate.openleg.search.SenateResponse;
import gov.nysenate.openleg.util.BillCleaner;

import java.io.IOException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
Expand All @@ -14,6 +27,10 @@
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.lucene.queryParser.ParseException;
import org.codehaus.jackson.map.ObjectMapper;

import com.google.gson.Gson;


public class APIServlet extends HttpServlet implements OpenLegConstants {
Expand Down Expand Up @@ -116,39 +133,6 @@ else if (format.equals(FORMAT_XML)) //for now with XML

handleAPIv1(format, type, key, pageIdx, pageSize, req, resp);
}
else if (version.equals("2.0"))
{
String format = st.nextToken().toLowerCase();
String type = st.nextToken().toLowerCase();

req.setAttribute(KEY_TYPE,type);

String key = "";

if (st.hasMoreTokens())
key = URLDecoder.decode(st.nextToken(),OpenLegConstants.ENCODING);

if (st.hasMoreTokens())
{
pageIdx = Integer.parseInt(st.nextToken());

if (st.hasMoreTokens())
{
pageSize = Integer.parseInt(st.nextToken());

}
else
{
pageSize = pageIdx;
pageIdx = Integer.parseInt(key);
key = "";
}
}
else if (format.equals(FORMAT_XML)) //for now with XML
pageSize = DEFAULT_API_PAGE_SIZE;

handleAPIv2(format, type, key, pageIdx, pageSize, req, resp);
}
else if (version.equals("html"))
{

Expand Down Expand Up @@ -274,7 +258,10 @@ else if (format.equals(FORMAT_XML)) //for now with XML
public void handleAPIv1 (String format, String type, String key, int pageIdx, int pageSize, HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException
{


String viewPath = "";


key = key.trim();

if (pageSize > MAX_PAGE_SIZE)
Expand All @@ -283,17 +270,162 @@ public void handleAPIv1 (String format, String type, String key, int pageIdx, in
req.setAttribute(PAGE_IDX,pageIdx+"");
req.setAttribute(PAGE_SIZE,pageSize+"");
req.setAttribute("type",type);
req.setAttribute("term", key);


//now calculate start, end idx based on pageIdx and pageSize
int start = (pageIdx - 1) * pageSize;
int end = start + pageSize;

logger.info("request: key=" + key + ";type=" + type + ";format=" + format + ";paging=" + start + "/" + end);

String viewPath = "";
try
{

if (type.endsWith("s"))
{
type = type.substring(0,type.length()-1);
}

String command = "";
String term = "otype:" + type;

if (key != null && key.length() > 0)
term += " AND " + " oid:" + key;

req.setAttribute("type", type);
req.setAttribute("term", term);
req.setAttribute("format", format);

String sFormat = "json";

SenateResponse sr = new SearchEngine2().search(dateReplace(term),sFormat,start,pageSize,null,true);

logger.info("got search results: " + sr.getResults().size());

if(sr.getResults().size() == 0) {
term = term+"*";
sr = new SearchEngine2().search(dateReplace(term),sFormat,start,pageSize,null,true);
}

if (sr.getResults().size()==0)
{
viewPath = "/";
}
else if (sr.getResults().size()==1)
{

String jsonData = sr.getResults().get(0).getData();
jsonData = jsonData.substring(jsonData.indexOf(":")+1);
jsonData = jsonData.substring(0,jsonData.lastIndexOf("}"));
String className = "gov.nysenate.openleg.model." + type.substring(0,1).toUpperCase() + type.substring(1);

/*
ObjectMapper mapper = new ObjectMapper();
if (type.equals("calendar"))
{
className = "gov.nysenate.openleg.model.calendar.Calendar";
}
else if (type.equals("meeting"))
{
className = "gov.nysenate.openleg.model.committee.Meeting";
}
Object resultObj = mapper.readValue(rData, Class.forName(className));
*/

if (type.equals("calendar"))
{
className = "gov.nysenate.openleg.model.calendar.Calendar";
}
else if (type.equals("meeting"))
{
className = "gov.nysenate.openleg.model.committee.Meeting";
}
Object resultObj = new Gson().fromJson(jsonData, Class.forName(className));

req.setAttribute(type, resultObj);

viewPath = "/views/" + type + "-" + format + ".jsp";
}
else
{
viewPath = "/views/" + "search" + "-" + format + ".jsp";

SearchResultSet srs = new SearchResultSet();
srs.setTotalHitCount((Integer)sr.getMetadata().get("totalresults"));

ArrayList<SearchResult> srList = new ArrayList<SearchResult>();

for (Result newResult : sr.getResults())
{
SearchResult sResult = new SearchResult();
sResult.setId(newResult.getOid());
sResult.setLastModified(new Date());
sResult.setScore(1.0f);


String jsonData = sr.getResults().get(0).getData();
jsonData = jsonData.substring(jsonData.indexOf(":")+1);
jsonData = jsonData.substring(0,jsonData.lastIndexOf("}"));

String className = "gov.nysenate.openleg.model." + type.substring(0,1).toUpperCase() + type.substring(1);
if (type.equals("calendar"))
{
className = "gov.nysenate.openleg.model.calendar.Calendar";
}
else if (type.equals("meeting"))
{
className = "gov.nysenate.openleg.model.committee.Meeting";
}

Object resultObj = new Gson().fromJson(jsonData, Class.forName(className));


String title = "";
String summary = "";

HashMap<String,String> fields = new HashMap<String,String>();

if (type.equals("bill"))
{
Bill bill = (Bill)resultObj;
title = bill.getTitle();
summary = bill.getSummary();

if (bill.getSponsor()!=null)
fields.put("sponsor",bill.getSponsor().getFullname());
}
else if (type.equals("transcript"))
{
Transcript transcript = (Transcript)resultObj;
title = "Transcript: " + transcript.getTimeStamp().toLocaleString();
summary = transcript.getType() + ": " + transcript.getLocation();
}

sResult.setTitle(title);
sResult.setSummary(summary);

sResult.setType(newResult.getOtype());


sResult.setFields(fields);

srList.add(sResult);
}

srs.setResults(srList);

req.setAttribute("results", srs);
}

}
catch (Exception e)
{
logger.warn("search controller didn't work for: " + req.getRequestURI(),e);
}


/*
if (!format.equals("html") && !format.equals("mobile"))
{
String viewType = type;
Expand Down Expand Up @@ -347,6 +479,7 @@ else if (type.endsWith("s") && format.equals("mobile"))
}
}
}
*/

try
{
Expand All @@ -358,48 +491,10 @@ else if (type.endsWith("s") && format.equals("mobile"))
{
logger.warn("search controller didn't work for: " + req.getRequestURI(),e);
}
}



public void handleAPIv2 (String format, String type, String key, int pageIdx, int pageSize, HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException
{

key = key.trim();

if (pageSize > MAX_PAGE_SIZE)
throw new ServletException ("The maximum page size is " + MAX_PAGE_SIZE);

req.setAttribute(PAGE_IDX,pageIdx+"");
req.setAttribute(PAGE_SIZE,pageSize+"");
req.setAttribute("type",type);
req.setAttribute("term", key);

//now calculate start, end idx based on pageIdx and pageSize
int start = (pageIdx - 1) * pageSize;
int end = start + pageSize;

logger.info("request: key=" + key + ";type=" + type + ";format=" + format + ";paging=" + start + "/" + end);

String viewPath = "";

viewPath = "/views/2p0" + type + "-" + format + ".jsp";

try
{
logger.info("routing to search controller:" + viewPath);

getServletContext().getRequestDispatcher(viewPath).forward(req, resp);
}
catch (Exception e)
{
logger.warn("search controller didn't work for: " + req.getRequestURI(),e);
}
}



/*
public static boolean routeSearchRequest (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
Expand Down Expand Up @@ -508,7 +603,29 @@ else if (type.equals("actions"))
}
*/

public String dateReplace(String term) throws ParseException {
Pattern p = Pattern.compile("(\\d{1,2}[-]?){2}(\\d{2,4})T\\d{2}-\\d{2}");
Matcher m = p.matcher(term);

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy'T'KK-mm");

while(m.find()) {
String d = term.substring(m.start(),m.end());

Date date = null;
try {
date = sdf.parse(d);
term = term.substring(0, m.start()) + date.getTime() + term.substring(m.end());
} catch (java.text.ParseException e) {
e.printStackTrace();
}

m.reset(term);

}

return term;
}



Expand Down

0 comments on commit 8b19770

Please sign in to comment.