|
[HepData-svn] r1518 - trunk/hepdata-webapp/src/main/java/cedar/hepdata/webapp/pagesblackhole at projects.hepforge.org blackhole at projects.hepforge.orgTue Mar 13 16:32:22 GMT 2012
Author: whalley Date: Tue Mar 13 16:32:22 2012 New Revision: 1518 Log: search via inspire and new reaction search based on dsreaction Modified: trunk/hepdata-webapp/src/main/java/cedar/hepdata/webapp/pages/Search.java Modified: trunk/hepdata-webapp/src/main/java/cedar/hepdata/webapp/pages/Search.java ============================================================================== --- trunk/hepdata-webapp/src/main/java/cedar/hepdata/webapp/pages/Search.java Tue Mar 13 16:31:03 2012 (r1517) +++ trunk/hepdata-webapp/src/main/java/cedar/hepdata/webapp/pages/Search.java Tue Mar 13 16:32:22 2012 (r1518) @@ -11,9 +11,17 @@ import org.apache.tapestry5.ioc.annotations.*; import org.apache.tapestry5.services.*; + +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.DefaultHttpClient; + import org.hibernate.*; //import org.hibernate.criterion.*; import java.util.*; +import java.util.regex.*; import java.io.*; import java.lang.Long; import java.lang.Integer; @@ -80,7 +88,8 @@ q = URLDecoder.decode(q,"UTF-8"); } catch(Exception ex){} q = q.replace("@","+"); - setSearchString(q.replace("_", " ")); + q = q.replace("_", " "); + setSearchString(q.replace("\"", "%22")); } public void onActivate(EventContext context) { parseContext(context); @@ -94,7 +103,7 @@ try{ query = URLEncoder.encode(query,"UTF-8"); } catch(Exception ex){}; - _search.setSearchString(query.replace(" ", "_")); +// _search.setSearchString(query.replace(" ", "_")); return _search; } @@ -144,12 +153,14 @@ public Long getEnding() { Integer pagemaxnum = getStarting() + getLength() - 1; - Long absmaxnum = getNumPapers(); +// Long absmaxnum = getNumPapers(); + Long absmaxnum = _records; return Math.min(pagemaxnum, absmaxnum); } public boolean getIsMultiPage() { - return getNumPapers() > getLength(); + return _records > getLength(); +// return getNumPapers() > getLength(); } public boolean getIsMultiPaper(){ @@ -213,26 +224,72 @@ public List <Paper> getPapers() { String queryString = getSearchString(); - Query q = ConstructQueryPaper.mkQueryFromSearchString(queryString, "", _session); + List<Paper> list = new ArrayList(); int first = _counter; - if(_listall.equals("no")){ - q.setFirstResult(first).setMaxResults(getLength()); + if(queryString.indexOf(":")>-1) { + String[] tempquery = queryString.split(":"); + HttpClient httpclient = new DefaultHttpClient(); + try { + int recstart=1; + int reclength=200; + if(_listall.equals("no")){ + recstart=first+1; + reclength=getLength(); + } + tempquery[1]=tempquery[1].replaceAll("\\s+","+"); + String which = ""; + if(!tempquery[0].equals("")){ which = tempquery[0] + ":";} + HttpGet httpget = new HttpGet("http://inspirehep.net/search?p="+which+tempquery[1]+"+and+856:DURHAM&of=tm&ot=001&jrec="+recstart+"&rg="+reclength); + ResponseHandler<String> responseHandler = new BasicResponseHandler(); + try { String responseBody = httpclient.execute(httpget, responseHandler); + + String[] temp = responseBody.split("\n"); + for (int i=0; i<temp.length; i++){ + String[] temp2 = temp[i].split("__ "); + Query q = _session.createQuery("select distinct p from Paper p where p._inspireId="+temp2[1]); + Paper p = (Paper) q.uniqueResult(); + if(p!=null){ + list.add(p); + } + } + int size = list.size(); + for (int i=0; i<size; i++){ + if(list.get(i).getSpiresId() != null){ + Long irn = list.get(i).getSpiresId(); + if(i < size-1) { + Long irnnext = list.get(i+1).getSpiresId(); + if(irn.equals(irnnext)){ + list.remove(i+1); size--; + } + } + } + } + } + catch ( Exception e) + {} + } finally { + httpclient.getConnectionManager().shutdown(); + } + } + else{ + Query q = ConstructQueryPaper.mkQueryFromSearchString(queryString, "", _session); + if(_listall.equals("no")){ + q.setFirstResult(first).setMaxResults(getLength()); + } + list = q.list(); + int size = list.size(); + for (int i=0; i<size; i++){ + if(list.get(i).getSpiresId() != null){ + Long irn = list.get(i).getSpiresId(); + if(i < size-1) { + Long irnnext = list.get(i+1).getSpiresId(); + if(irn.equals(irnnext)){ + list.remove(i+1); size--; + } + } + } + } } - List <Paper> list = q.list(); - int size = list.size(); - for (int i=0; i<size; i++){ - if(list.get(i).getSpiresId() != null){ - - Long irn = list.get(i).getSpiresId(); - if(i < size-1) { - Long irnnext = list.get(i+1).getSpiresId(); - if(irn.equals(irnnext)){ - list.remove(i+1); size--; - } - } - - } - } return list; } @@ -258,20 +315,67 @@ } + @Persist + private Long _records; + public Long getNumRecords(){ + return _records; + } + + public Long getNumPapers() { String queryString = getSearchString(); - Query q = ConstructQueryPaper.mkQueryFromSearchString(queryString, "count", _session); - Object result = q.uniqueResult(); - if (result instanceof BigInteger) { - return new Long(((BigInteger)result).longValue()); - } else { - return (Long) result; + List<Paper> list = new ArrayList(); + if(queryString.indexOf(":")>-1) { + String[] tempquery = queryString.split(":"); + HttpClient httpclient = new DefaultHttpClient(); + try { + tempquery[1]=tempquery[1].replaceAll("\\s+","+"); + String which = ""; + if(!tempquery[0].equals("")){ which = tempquery[0] + ":";} + HttpGet httpget = new HttpGet("http://inspirehep.net/search?p="+which+tempquery[1]+"+and+856:DURHAM&of=hm&ot=001"); + + ResponseHandler<String> responseHandler = new BasicResponseHandler(); + try { String responseBody = httpclient.execute(httpget, responseHandler); + Matcher m = Pattern.compile("<strong>\\s*([\\d,]+)\\s*</strong>\\s+records\\s+found").matcher(responseBody); + _records = Long.parseLong("0"); + while(m.find()){ + _records = Long.parseLong(m.group(1).replace(",","")); + } + } + catch ( Exception e) + {} + } finally { + httpclient.getConnectionManager().shutdown(); + } + return _records; + } + else{ + Query q = ConstructQueryPaper.mkQueryFromSearchString(queryString, "count", _session); + Object result = q.uniqueResult(); + if (result instanceof BigInteger) { + _records = new Long(((BigInteger)result).longValue()); + return new Long(((BigInteger)result).longValue()); + } else { + _records=(Long) result; + return (Long) result; + } } } public List<String> getPaperIdContext() { List<String> ctx = new Vector<String>(); - ctx.add("p" + Long.toString(_paper.getId())); + if(_paper.getInspireId() != null) { + ctx.add("ins" + Long.toString(_paper.getInspireId())); + } + else if(_paper.getSpiresId() != null) { + ctx.add("irn" + Long.toString(_paper.getSpiresId())); + } + else if(_paper.getRedId() != null) { + ctx.add("red" + Long.toString(_paper.getRedId())); + } + else{ + ctx.add("p" + Long.toString(_paper.getId())); + } return ctx; } @@ -285,7 +389,18 @@ public List<String> getShortPaperIdContext() { List<String> ctx = new Vector<String>(); - ctx.add("p" + Long.toString(_paper.getId())); + if(_paper.getInspireId() != null) { + ctx.add("ins" + Long.toString(_paper.getInspireId())); + } + else if(_paper.getSpiresId() != null) { + ctx.add("irn" + Long.toString(_paper.getSpiresId())); + } + else if(_paper.getRedId() != null) { + ctx.add("red" + Long.toString(_paper.getRedId())); + } + else{ + ctx.add("p" + Long.toString(_paper.getId())); + } ctx.add("short"); return ctx; } @@ -338,7 +453,8 @@ if(ps.equals("next")) { firstnextlast = "yes"; } if(ps.equals("prev")) { _counter -= 40; firstnextlast = "yes"; } if(ps.equals("first")) { _counter = 0; firstnextlast = "yes"; } - if(ps.equals("last")) { _counter = getNumPapers().intValue()-20; firstnextlast = "yes"; } +// if(ps.equals("last")) { _counter = getNumPapers().intValue()-20; firstnextlast = "yes"; } + if(ps.equals("last")) { _counter = _records.intValue()-20; firstnextlast = "yes"; } if(ps.equals("all")) { _listall = "yes"; } } if(firstnextlast.equals("no")) { _counter = 0; }
More information about the HepData-svn mailing list |