Revision: 2965
http://archive-access.svn.sourceforge.net/archive-access/?rev=2965&view=rev
Author: binzino
Date: 2010-02-22 22:25:58 +0000 (Mon, 22 Feb 2010)
Log Message:
-----------
Initial fully functional revision.
Modified Paths:
--------------
trunk/archive-access/projects/nutchwax/archive/src/java/org/archive/nutchwax/OpenSearchMasterServlet.java
Modified: trunk/archive-access/projects/nutchwax/archive/src/java/org/archive/nutchwax/OpenSearchMasterServlet.java
===================================================================
--- trunk/archive-access/projects/nutchwax/archive/src/java/org/archive/nutchwax/OpenSearchMasterServlet.java 2010-02-22 22:20:45 UTC (rev 2964)
+++ trunk/archive-access/projects/nutchwax/archive/src/java/org/archive/nutchwax/OpenSearchMasterServlet.java 2010-02-22 22:25:58 UTC (rev 2965)
@@ -17,36 +17,132 @@
package org.archive.nutchwax;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
import java.io.IOException;
-import java.io.BufferedReader;
import java.io.InputStreamReader;
-import java.io.FileInputStream;
+import java.util.ArrayList;
import java.util.List;
-import java.util.ArrayList;
+import java.util.Map;
+import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
-import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.Namespace;
+import org.jdom.output.XMLOutputter;
/**
*
*/
public class OpenSearchMasterServlet extends HttpServlet
{
+ OpenSearchMaster master;
+
+ int hitsPerSite = 0;
public void init( ServletConfig config )
throws ServletException
{
+ String slavesFile = config.getInitParameter( "slaves" );
+
+ if ( slavesFile == null || slavesFile.trim().length() == 0 )
+ {
+ throw new ServletException( "Required init parameter missing: slaves" );
+ }
+
+ int timeout = getInteger( config.getInitParameter( "timeout" ), 0 );
+ int hitsPerSite = getInteger( config.getInitParameter( "hitsPerSite" ), 0 );
+
+ try
+ {
+ this.master = new OpenSearchMaster( slavesFile, timeout );
+ }
+ catch ( IOException ioe )
+ {
+ throw new ServletException( ioe );
+ }
+ }
+
+ public void destroy( )
+ {
}
public void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
+ long responseTime = System.nanoTime( );
+ request.setCharacterEncoding( "UTF-8" );
+
+ String query = getString ( request.getParameter( "query" ), "" );
+ int startIndex = getInteger( request.getParameter( "start" ), 0 );
+ int numHits = getInteger( request.getParameter( "hitsPerPage" ), 10 );
+ int hitsPerSite = getInteger( request.getParameter( "hitsPerSite" ), this.hitsPerSite );
+
+ Document doc = this.master.query( query, startIndex, numHits, hitsPerSite );
+
+ Element eUrlParams = new Element( "urlParams", Namespace.getNamespace( "http://www.nutch.org/opensearchrss/1.0/" ) );
+
+ for ( Map.Entry<String,String[]> e : ((Map<String,String[]>) request.getParameterMap( )).entrySet( ) )
+ {
+ String key = e.getKey( );
+ for ( String value : e.getValue( ) )
+ {
+ Element eParam = new Element( "param", Namespace.getNamespace( "http://www.nutch.org/opensearchrss/1.0/" ) );
+ eParam.setAttribute( "name", key );
+ eParam.setAttribute( "value", value );
+ eUrlParams.addContent( eParam );
+ }
+ }
+
+ doc.getRootElement( ).getChild( "channel" ).addContent( eUrlParams );
+
+ (new XMLOutputter()).output( doc, response.getOutputStream( ) );
}
+ String getString ( String value, String defaultValue )
+ {
+ if ( value != null )
+ {
+ value = value.trim();
+
+ if ( value.length( ) != 0 )
+ {
+ return value;
+ }
+ }
+
+ return defaultValue;
+ }
+
+ int getInteger( String value, int defaultValue )
+ {
+ if ( value != null )
+ {
+ value = value.trim();
+
+ if ( value.length( ) != 0 )
+ {
+ try
+ {
+ int i = Integer.parseInt( value );
+
+ return i;
+ }
+ catch ( NumberFormatException nfe )
+ {
+ // TODO: log?
+ }
+ }
+ }
+
+ return defaultValue;
+ }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|