package osm.jp.api;

import java.net.*;
import java.io.*;

/**
 * Java HTTP クライアントサンプル - HttpURLConnection 版 -
 *
 * @author 68user http://X68000.q-e-d.net/~68user/
 */
public class HttpPOST {
	//public static String host = "http://api06.dev.openstreetmap.org";
	//public static String host = "http://api.openstreetmap.org";
	public static String host = "http://overpass-api.de";
	
	public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException {
		double minlat = 35.13d;
		double maxlat = 35.66d;
        double minlon = 138.99d;
		double maxlon = 139.79d;
        getCapabilities(new File("output.xml"), "highway", "bus_stop", minlat, maxlat, minlon, maxlon);
        getCapabilities(new File("output.xml"), "highway", "disused:bus_stop", minlat, maxlat, minlon, maxlon);
        getCapabilities(new File("output.xml"), "amenity", "bus_station", minlat, maxlat, minlon, maxlon);
        getCapabilities(new File("output.xml"), "public_transport", "platform", minlat, maxlat, minlon, maxlon);
        getCapabilities(new File("output.xml"), "public_transport", "stop_position", minlat, maxlat, minlon, maxlon);
    }
	
	public static void getCapabilities(File oFile, String key, String value, double minLat, double maxLat, double minLon, double maxLon) throws MalformedURLException, ProtocolException, IOException {
		if (oFile.isFile()) {
			oFile.delete();
		}

		System.out.println(host + "/api/interpreter");
        URL url = new URL(host + "/api/interpreter");

        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
        urlconn.setRequestMethod("POST");
        urlconn.setDoOutput(true);              		// POSTのデータを後ろに付ける
        urlconn.setInstanceFollowRedirects(false);		// 勝手にリダイレクトさせない
        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
        urlconn.setRequestProperty("Content-Type","text/xml;charset=utf-8");
        urlconn.connect();

        // 送信
        PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(urlconn.getOutputStream(), "utf-8")));
        outputWriter(pw, "<osm-script timeout=\"900\" element-limit=\"1073741824\">");
        outputWriter(pw, " <union>");
        outputWriter(pw, "  <query type=\"node\">");
        outputWriter(pw, "   <has-kv k=\""+ key +"\" v=\""+ value +"\"/>");
        outputWriter(pw, "   <bbox-query s=\"" + minLat + "\" n=\"" + maxLat + "\" w=\"" + minLon + "\" e=\"" + maxLon + "\"/>");
        outputWriter(pw, "  </query>");
        outputWriter(pw, " </union>");
        outputWriter(pw, " <print/>");
        outputWriter(pw, "</osm-script>");
        pw.close();       		// closeで送信完了
        
        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
        System.out.println("\n---- ボディ ----");

        BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));

		BufferedWriter hw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(oFile), "UTF-8"));
        while (true) {
            String line = reader.readLine();
            if (line == null) {
                break;
            }
    		hw.write(line);
    		hw.newLine();
        }
        hw.close();
        reader.close();
        urlconn.disconnect();
	}
	
	public static void outputWriter(PrintWriter pw, String text) {
		System.out.println("\t" + text);
		pw.print(text);
	}
}
