[HepData-svn] r1518 - trunk/hepdata-webapp/src/main/java/cedar/hepdata/webapp/pages

blackhole at projects.hepforge.org blackhole at projects.hepforge.org
Tue 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