/* * (c) Copyright 2008, 2009 Hewlett-Packard Development Company, LP * All rights reserved. * [See end of file] */ package search; import java.io.IOException ; import java.io.InputStream ; import java.io.InputStreamReader ; import java.io.Reader ; import java.net.HttpURLConnection ; import java.util.Iterator ; import org.openjena.atlas.iterator.NullIterator ; import org.openjena.atlas.lib.StrUtils ; import com.hp.hpl.jena.sparql.util.Convert ; public abstract class SearchBase implements Search { @Override public final Iterator search(String... words) { String str = StrUtils.strjoin(" ", words) ; str = Convert.encWWWForm(str) ; InputStream in = execGet(str) ; if ( in == null ) return new NullIterator() ; return parse(in) ; } protected abstract InputStream execGet(String searchString) ; protected abstract Iterator parse(InputStream in) ; // Put somewhere! public static String readAll(InputStream in, String charset) { try { Reader r = new InputStreamReader(in, charset) ;//FileUtils.asUTF8(in) ; StringBuilder sw = new StringBuilder(64*1024); char buff[] = new char[8*1024]; while (true) { int len = r.read(buff); if (len < 0) break; sw.append(buff, 0, len); } r.close(); return sw.toString(); } catch (IOException ex) { throw new SearchException(ex) ; } } protected InputStream execCommon(HttpURLConnection httpConnection) { try { int responseCode = httpConnection.getResponseCode() ; String responseMessage = Convert.decWWWForm(httpConnection.getResponseMessage()) ; // 1xx: Informational // 2xx: Success // 3xx: Redirection // 4xx: Client Error // 5xx: Server Error if ( 300 <= responseCode && responseCode < 400 ) throw new SearchException(responseCode+" "+responseMessage) ; // Other 400 and 500 - errors if ( responseCode >= 400 ) throw new SearchException(responseCode+" "+responseMessage) ; // Request suceeded InputStream in = httpConnection.getInputStream() ; // Map> x = httpConnection.getHeaderFields() ; // for ( String f : x.keySet() ) // System.out.println(f+" = "+x.get(f)) ; return in ; } catch (IOException ioEx) { throw new SearchException(ioEx) ; } } } /* * (c) Copyright 2008, 2009 Hewlett-Packard Development Company, LP * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */