// Path: src/org/osmdroid/utils/HttpConnection.java
// public class HttpConnection {
// 	final static Logger log = LoggerFactory.getLogger(HttpConnection.class);
// 
// 	private DefaultHttpClient client;
// 	private InputStream stream;
// 	private HttpEntity entity;
// 	private String mUserAgent;
// 
// 	private final static int TIMEOUT_CONNECTION = 3000; //ms 
// 	private final static int TIMEOUT_SOCKET = 8000; //ms
// 
// 	/**
// 	 * Constructor. Opens the url with an HttpURLConnection, then opens a stream
// 	 * on it. param sUrl : url to open
// 	 */
// 	public HttpConnection() {
// 		stream = null;
// 		entity = null;
// 		HttpParams httpParameters = new BasicHttpParams();
// 		/* useful? HttpProtocolParams.setContentCharset(httpParameters,
// 		 * "UTF-8"); HttpProtocolParams.setHttpElementCharset(httpParameters,
// 		 * "UTF-8"); */
// 		// Set the timeout in milliseconds until a connection is established.
// 		HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_CONNECTION);
// 		// Set the default socket timeout (SO_TIMEOUT) 
// 		// in milliseconds which is the timeout for waiting for data.
// 		HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_SOCKET);
// 		client = new DefaultHttpClient(httpParameters);
// 		//TODO: created here. Reuse to do for better perfs???...
// 	}
// 
// 	public void setUserAgent(String userAgent) {
// 		mUserAgent = userAgent;
// 	}
// 
// 	public void doGet(String sUrl) {
// 		HttpGet request = new HttpGet(sUrl);
// 		if (mUserAgent != null)
// 			request.setHeader("User-Agent", mUserAgent);
// 		try {
// 			HttpResponse response = client.execute(request);
// 			StatusLine status = response.getStatusLine();
// 			if (status.getStatusCode() != 200) {
// 				log.error("Invalid response from server: " + status.toString());
// 			} else {
// 				entity = response.getEntity();
// 			}
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 		}
// 	}
// 
// 	public void doPost(String sUrl, List<NameValuePair> nameValuePairs) {
// 		HttpPost request = new HttpPost(sUrl);
// 		if (mUserAgent != null)
// 			request.setHeader("User-Agent", mUserAgent);
// 		try {
// 			request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// 			HttpResponse response = client.execute(request);
// 			StatusLine status = response.getStatusLine();
// 			if (status.getStatusCode() != 200) {
// 				log.error("Invalid response from server: " + status.toString());
// 			} else {
// 				entity = response.getEntity();
// 			}
// 		} catch (ClientProtocolException e) {
// 			e.printStackTrace();
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 		}
// 	}
// 
// 	/**
// 	 * @return the opened InputStream, or null if creation failed for any
// 	 *         reason.
// 	 */
// 	public InputStream getStream() {
// 		try {
// 			if (entity != null)
// 				stream = entity.getContent();
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 		}
// 		return stream;
// 	}
// 
// 	/**
// 	 * @return the whole content as a String, or null if creation failed for any
// 	 *         reason.
// 	 */
// 	public String getContentAsString() {
// 		try {
// 			if (entity != null) {
// 				return EntityUtils.toString(entity, "UTF-8");
// 				//setting the charset is important if none found in the entity. 
// 			}
// 			return null;
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// 
// 	/**
// 	 * Calling close once is mandatory.
// 	 */
// 	public void close() {
// 		if (stream != null) {
// 			try {
// 				stream.close();
// 				stream = null;
// 			} catch (IOException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 		if (entity != null) {
// 			try {
// 				entity.consumeContent();
// 				//"finish". Important if we want to reuse the client object one day... 
// 				entity = null;
// 			} catch (IOException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 		if (client != null) {
// 			client.getConnectionManager().shutdown();
// 			client = null;
// 		}
// 	}
// 
// }


import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.oscim.core.BoundingBox;
import org.oscim.core.GeoPoint;
import org.oscim.core.Tag;
import org.oscim.core.osm.OsmData;
import org.oscim.core.osm.OsmNode;
import org.oscim.utils.osmpbf.OsmPbfReader;
import org.osmdroid.utils.HttpConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
package org.osmdroid.location;



public class OverpassPOIProvider implements POIProvider {

	final static Logger log = LoggerFactory
	    .getLogger(OverpassPOIProvider.class);

	public static final String TAG_KEY_WEBSITE = "website".intern();

	@Override
	public List<POI> getPOIInside(BoundingBox boundingBox, String query,
	        int maxResults) {
// Path: src/org/osmdroid/utils/HttpConnection.java
// public class HttpConnection {
// 	final static Logger log = LoggerFactory.getLogger(HttpConnection.class);
// 
// 	private DefaultHttpClient client;
// 	private InputStream stream;
// 	private HttpEntity entity;
// 	private String mUserAgent;
// 
// 	private final static int TIMEOUT_CONNECTION = 3000; //ms 
// 	private final static int TIMEOUT_SOCKET = 8000; //ms
// 
// 	/**
// 	 * Constructor. Opens the url with an HttpURLConnection, then opens a stream
// 	 * on it. param sUrl : url to open
// 	 */
// 	public HttpConnection() {
// 		stream = null;
// 		entity = null;
// 		HttpParams httpParameters = new BasicHttpParams();
// 		/* useful? HttpProtocolParams.setContentCharset(httpParameters,
// 		 * "UTF-8"); HttpProtocolParams.setHttpElementCharset(httpParameters,
// 		 * "UTF-8"); */
// 		// Set the timeout in milliseconds until a connection is established.
// 		HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_CONNECTION);
// 		// Set the default socket timeout (SO_TIMEOUT) 
// 		// in milliseconds which is the timeout for waiting for data.
// 		HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_SOCKET);
// 		client = new DefaultHttpClient(httpParameters);
// 		//TODO: created here. Reuse to do for better perfs???...
// 	}
// 
// 	public void setUserAgent(String userAgent) {
// 		mUserAgent = userAgent;
// 	}
// 
// 	public void doGet(String sUrl) {
// 		HttpGet request = new HttpGet(sUrl);
// 		if (mUserAgent != null)
// 			request.setHeader("User-Agent", mUserAgent);
// 		try {
// 			HttpResponse response = client.execute(request);
// 			StatusLine status = response.getStatusLine();
// 			if (status.getStatusCode() != 200) {
// 				log.error("Invalid response from server: " + status.toString());
// 			} else {
// 				entity = response.getEntity();
// 			}
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 		}
// 	}
// 
// 	public void doPost(String sUrl, List<NameValuePair> nameValuePairs) {
// 		HttpPost request = new HttpPost(sUrl);
// 		if (mUserAgent != null)
// 			request.setHeader("User-Agent", mUserAgent);
// 		try {
// 			request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// 			HttpResponse response = client.execute(request);
// 			StatusLine status = response.getStatusLine();
// 			if (status.getStatusCode() != 200) {
// 				log.error("Invalid response from server: " + status.toString());
// 			} else {
// 				entity = response.getEntity();
// 			}
// 		} catch (ClientProtocolException e) {
// 			e.printStackTrace();
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 		}
// 	}
// 
// 	/**
// 	 * @return the opened InputStream, or null if creation failed for any
// 	 *         reason.
// 	 */
// 	public InputStream getStream() {
// 		try {
// 			if (entity != null)
// 				stream = entity.getContent();
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 		}
// 		return stream;
// 	}
// 
// 	/**
// 	 * @return the whole content as a String, or null if creation failed for any
// 	 *         reason.
// 	 */
// 	public String getContentAsString() {
// 		try {
// 			if (entity != null) {
// 				return EntityUtils.toString(entity, "UTF-8");
// 				//setting the charset is important if none found in the entity. 
// 			}
// 			return null;
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// 
// 	/**
// 	 * Calling close once is mandatory.
// 	 */
// 	public void close() {
// 		if (stream != null) {
// 			try {
// 				stream.close();
// 				stream = null;
// 			} catch (IOException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 		if (entity != null) {
// 			try {
// 				entity.consumeContent();
// 				//"finish". Important if we want to reuse the client object one day... 
// 				entity = null;
// 			} catch (IOException e) {
// 				e.printStackTrace();
// 			}
// 		}
// 		if (client != null) {
// 			client.getConnectionManager().shutdown();
// 			client = null;
// 		}
// 	}
// 
// }


// Path: src/org/osmdroid/location/OverpassPOIProvider.java
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.oscim.core.BoundingBox;
import org.oscim.core.GeoPoint;
import org.oscim.core.Tag;
import org.oscim.core.osm.OsmData;
import org.oscim.core.osm.OsmNode;
import org.oscim.utils.osmpbf.OsmPbfReader;
import org.osmdroid.utils.HttpConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

package org.osmdroid.location;



public class OverpassPOIProvider implements POIProvider {

	final static Logger log = LoggerFactory
	    .getLogger(OverpassPOIProvider.class);

	public static final String TAG_KEY_WEBSITE = "website".intern();

	@Override
	public List<POI> getPOIInside(BoundingBox boundingBox, String query,
	        int maxResults) {
		HttpConnection connection = new HttpConnection();