Changeset 1565


Ignore:
Timestamp:
09/10/06 16:45:10 (13 years ago)
Author:
mpritcha
Message:

doFullTextSearch now returns full document-uri. Set defaults for start, howMany.

Location:
TI01-discovery/trunk/ws-Discovery2/src/ndg/services/discovery
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/trunk/ws-Discovery2/src/ndg/services/discovery/DiscoveryServiceSkeleton.java

    r1558 r1565  
    3434                        agent.setStart( requestContent.getStart() ); 
    3535                } 
    36                 else  
    37                 { 
    38                         agent.setStart( 1 ); 
    39                 } 
    4036                 
    4137                if ( requestContent.isSetHowMany() ) 
     
    4339                        agent.setHowMany( requestContent.getHowMany() ); 
    4440                } 
    45                 else 
    46                 { 
    47                         agent.setHowMany( 30 ); 
    48                 } 
     41 
    4942                if ( requestContent.isSetOrderBy() ) 
    5043                { 
    5144                        agent.setOrderBy( requestContent.getOrderBy().toString() ); 
    52                 } 
    53                 else 
    54                 { 
    55                         agent.setOrderBy( "date" ); 
    5645                } 
    5746 
  • TI01-discovery/trunk/ws-Discovery2/src/ndg/services/discovery/FullTextSearchAgent.java

    r1554 r1565  
    88import java.io.BufferedReader; 
    99import java.io.InputStreamReader; 
     10import java.io.ByteArrayInputStream; 
    1011import java.io.IOException; 
     12 
     13import javax.xml.xpath.*; 
     14import javax.xml.*; 
     15import javax.xml.namespace.*; 
     16import org.xml.sax.InputSource; 
     17import org.w3c.dom.*; 
    1118 
    1219import org.apache.xmlrpc.XmlRpc; 
     
    5764        public SearchSummary doSearch() { 
    5865 
    59                 SearchSummary result = null; 
     66                SearchSummary result = new SearchSummary(); 
    6067                XmlRpc.setEncoding("UTF-8"); 
    6168                Vector myResultDocuments = new Vector(); 
     
    7885 
    7986 
    80                         Hashtable options = new Hashtable(); 
    81                         options.put("indent", "yes"); 
    82                         options.put("encoding", "UTF-8"); 
    83                         options.put("process-xsl-pi", "no"); 
    84  
    8587                        //1. Execute the search 
    86                         Vector executeQueryParams = new Vector(); 
     88                        Vector queryParams = new Vector(); 
    8789 
    8890                        // Load fullText XQuery from a file 
     
    104106                                else 
    105107                                { 
    106                                         xqueryStr += line; 
     108                                        xqueryStr += line + "\n"; 
    107109                                } 
    108110                        } 
     
    111113                        // Substitute __term__ in the xquery for value from request message 
    112114                        xqueryStr = xqueryStr.replaceAll("__term__", term); 
    113                         executeQueryParams.addElement( xqueryStr );  
    114                         executeQueryParams.addElement( options ); 
    115                         resultId = ((Integer)xmlrpc.execute( "executeQuery", executeQueryParams )).intValue(); 
     115                        //xqueryStr = xqueryStr.replaceAll("__orderBy__", orderBy); 
    116116 
    117                         //2. Fetch the querySummary 
    118                         Vector querySummaryParams = new Vector(); 
    119                         querySummaryParams.addElement( resultId ); //resultId from last query 
    120                         Hashtable querySummaryHashtable = (Hashtable)xmlrpc.execute( "querySummary", querySummaryParams ); 
    121                         result = new SearchSummary( querySummaryHashtable, resultId ); 
     117                        queryParams.addElement( xqueryStr.getBytes("UTF-8") );  
    122118 
    123                         //3. Do a releaseQueryResult 
    124                         Vector releaseQueryResultParams = new Vector(); 
    125                         releaseQueryResultParams.addElement( resultId ); //resultId from last query 
    126                         xmlrpc.execute( "releaseQueryResult", releaseQueryResultParams ); 
     119                        queryParams.addElement( this.howMany ); 
     120                        queryParams.addElement( this.start );  
     121 
     122                        Hashtable options = new Hashtable(); 
     123                        options.put("indent", "yes"); 
     124                        options.put("encoding", "UTF-8"); 
     125                        options.put("process-xsl-pi", "no"); 
     126                        queryParams.addElement( options ); 
     127                        byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
     128                        ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
     129 
     130                        // Mark the beginning of the Stream, so can reset before each xpath evaluation (!) 
     131                        resultStream.mark( resultStream.available() ); 
     132                        InputSource resultSource = new InputSource( resultStream ); 
     133                         
     134                        XPath xpath = XPathFactory.newInstance().newXPath(); 
     135                        String hitsExpr = "/exist:result/@hits";  
     136                        String documentExpr = "//exist:result/document"; 
     137                        xpath.setNamespaceContext( new existNamespaceContextImpl() ); 
     138 
     139                        result.setHits( (new Integer( xpath.evaluate(hitsExpr, resultSource) )).intValue() ); 
     140                         
     141                        resultStream.reset(); 
     142                        NodeList nodeList = (NodeList)xpath.evaluate( documentExpr, resultSource, XPathConstants.NODESET );  
     143                        Vector documents = new Vector(); 
     144                        for (int i=0; i<nodeList.getLength(); i++) 
     145                        { 
     146                                Hashtable thisDoc = new Hashtable(); 
     147                                thisDoc.put("name", nodeList.item(i).getFirstChild().getNodeValue() ); 
     148                                thisDoc.put("matches", 1); 
     149                                thisDoc.put("position", i); 
     150                                documents.add( thisDoc ); 
     151                        } 
     152                        result.setDocuments( documents );        
     153                        result.setStatus( true ); 
     154 
    127155                } 
    128156                catch (org.apache.xmlrpc.XmlRpcException e) 
     
    144172        } 
    145173 
     174        public class existNamespaceContextImpl implements NamespaceContext 
     175    { 
     176        public String getNamespaceURI(String prefix) 
     177        { 
     178                        return "http://exist.sourceforge.net/NS/exist"; 
     179        } 
     180      
     181                // Doesn't matter what the prefix in the source doc is, override it 
     182                // Important thing is that the namespace URI matches, and that 
     183                // whatever prefix is set here, is used in the xpath query 
     184        public String getPrefix(String namespace) 
     185        { 
     186                        return "exist"; 
     187        } 
     188 
     189        public Iterator getPrefixes(String namespace) 
     190        { 
     191            return null; 
     192        } 
     193    }  
     194 
    146195        // setter methods for start, howMany, OrderBy already defined in superclass SearchAgent 
    147196 
  • TI01-discovery/trunk/ws-Discovery2/src/ndg/services/discovery/SearchAgent.java

    r1554 r1565  
    2828        String orderBy; 
    2929 
     30        public static final int startDefault = 1; 
     31        public static final int howManyDefault = 30; 
     32 
    3033        // Output parameters 
    3134        boolean status; 
     
    4043 
    4144        /** 
    42          * Sets the start position of result set 
     45         * Sets the start position of result set. 
     46         * <p>Value should be integer > 0, else defaults to howManyDefault. 
    4347         * @param i position of first result to fetch 
    4448         */ 
    4549        public void setStart(int i) 
    4650        { 
    47                 this.start = i; 
     51                if ( i > 0) 
     52                { 
     53                        this.start = i; 
     54                } 
     55                else 
     56                { 
     57                        this.start = this.startDefault; 
     58                } 
    4859        } 
    4960 
    5061        /** 
    51          * Sets how many results to fetch 
     62         * Sets how many results to fetch. 
     63         * <p>Value should be integer > 0, else defaults to howManyDefault. 
    5264         * @param i position of first result to fetch 
    5365         */ 
    5466        public void setHowMany(int i) 
    5567        { 
    56                 this.howMany = i; 
     68                if ( i > 0) 
     69                { 
     70                        this.howMany = i; 
     71                } 
     72                else 
     73                { 
     74                        this.howMany = this.howManyDefault; 
     75                } 
    5776        } 
    5877 
     
    6382        public void setOrderBy(String s) 
    6483        { 
    65                 this.orderBy = s; 
     84                if ( s.equals("date") ) 
     85                { 
     86                        this.orderBy = " order by $i//DIF_Creation_Date"; 
     87                } 
     88                else if ( s.equals("dataCentre") ) 
     89                { 
     90                        this.orderBy = "order by $i//Data_Center/Data_Center_Name/Short_Name"; 
     91                } 
     92                else 
     93                { 
     94                        this.orderBy = "order by document-uri($i)"; 
     95                } 
    6696        } 
    6797} 
Note: See TracChangeset for help on using the changeset viewer.