From: <bi...@us...> - 2010-02-22 22:26:05
|
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. |