// Created by plusminus on 18:22:30 - 05.11.2008 package org.androad.sys.ors.aas; import java.io.BufferedInputStream; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import junit.framework.Assert; import org.osmdroid.util.GeoPoint; import org.androad.sys.ors.exceptions.ORSException; import org.androad.util.constants.Constants; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; public class AASRequester implements Constants{ // =========================================================== // Constants // =========================================================== public static final int AAS_MAXMINUTES = 60; private static final String URL_AAS_EUROPE = "http://data.giub.uni-bonn.de/openrouteservice/php/AAS_AccessibilityRequest.php"; // =========================================================== // Fields // =========================================================== // =========================================================== // Constructors // =========================================================== // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== /** * @param gp * @param pMinutes * @throws SAXException * @throws ORSException */ public static AASResponse request(final GeoPoint gp, final int pMinutes) throws IOException, SAXException, ORSException { Assert.assertNotNull(gp); if(pMinutes < 1 || pMinutes > AAS_MAXMINUTES) { throw new IllegalArgumentException("pMinutes must be between: 1 and " + AAS_MAXMINUTES); } final String url = URL_AAS_EUROPE; final HttpClient httpClient = new DefaultHttpClient(); // httpClient.getParams().setParameter("http.socket.timeout", new Integer(1200000)); // 2min final HttpPost request = new HttpPost(url); // create the multipart request and add the parts to it final MultipartEntity requestEntity = AASRequestComposer.create(gp, pMinutes); request.setEntity(requestEntity); final HttpResponse response = httpClient.execute(request); final int status = response.getStatusLine().getStatusCode(); if (status != HttpStatus.SC_OK) { throw new IOException(); } else { { // DEBUG // final Reader r = new InputStreamReader(new BufferedInputStream(response.getEntity().getContent())); // // see above // final char[] buf = new char[32 * 1024]; // int read; // final StringBuilder sb = new StringBuilder(); // while((read = r.read(buf)) != -1) // sb.append(buf, 0, read); // // Log.d(DEBUGTAG, sb.toString().replace('\n', ' ')); // return null; } /* Get a SAXParser from the SAXPArserFactory. */ final SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp; try { sp = spf.newSAXParser(); } catch (final ParserConfigurationException e) { throw new SAXException(e); } /* Get the XMLReader of the SAXParser we created. */ final XMLReader xr = sp.getXMLReader(); /* Create a new ContentHandler and apply it to the XML-Reader*/ final AASParser aasParser = new AASParser(); xr.setContentHandler(aasParser); /* Parse the xml-data from our URL. */ xr.parse(new InputSource(new BufferedInputStream(response.getEntity().getContent()))); /* The Handler now provides the parsed data to us. */ return aasParser.getASSResponse(); } } // =========================================================== // Inner and Anonymous Classes // =========================================================== }