package osm.jp.postgis;
import java.io.*;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import jp.co.areaweb.tools.database.*;

public class Do_sqlfiles {
	/**
	 * メイン
	 *
	 *	java -cp .:SelectBusstop.jar:hayashi_0225.jar:postgresql-9.4.1212.jar osm.jp.SelectBusstop
	 *	
	 *
	 * @throws IOException
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 * @throws FileNotFoundException
	 * @throws TransformerException
	 * @throws SAXException
	 * @throws ParserConfigurationException */
	public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException
	{
		Connection con = DatabaseTool.openDb("postgis");
		
		try {
			/**
			 * 都道府県ごとのGMLディレクトリの処理
			 */
			File dir = new File(".");
			File[] dirs = dir.listFiles();
			for (File iDir : dirs) {
				if (checkGMLdir(iDir)) {
					System.out.println(iDir.getName());
					
					File[] files = iDir.listFiles();
					for (File iFile : files) {
						if (checkFile(iFile)) {
							System.out.println(iFile.getAbsoluteFile());

							// ローカルデータベース内の情報をPostGIS用の「busstop.sql」に出力する
							InputStreamReader fr  = new InputStreamReader(new FileInputStream(iFile), "UTF-8");
							BufferedReader br  = new BufferedReader(fr);

						    // 既存のreadLine()では\rまたは\n、および\r\nにて改行とみなしている。
						    String strLine  = null;
						    while ((strLine = br.readLine()) != null) { // null=ファイルの最後
						    	System.out.println(strLine);
						        sqlExecute(con, strLine);
						    }
					    	System.out.println("commit;");
					        sqlExecute(con, "commit;");
						    br.close();
						    fr.close();						
						}
					}
				}
			}
		}
		finally {
			DatabaseTool.closeDb(con);
		}
	}
	
    /**
     * sqlStrを実行する
     * @param conn データベースコネクション
     * @param sqlStr 実行するＳＱＬ文
     * @throws SQLException ＳＱＬ実行エラー
     */
    static void sqlExecute(Connection conn, String sqlStr) throws SQLException {
        Statement stat = conn.createStatement();
        stat.execute(sqlStr);
        stat.close();
    }
	
	/**
	 * 数値地図情報のデータファイルかどうかを見極める
	 * @param f
	 * @return
	 */
	static boolean checkGMLdir(File f) {
		if (!f.isDirectory()) {
			return false;
		}
		String name = f.getName();
		if (!name.startsWith(GML_DIR_PREFIX)) {
			return false;
		}
		if (!name.toUpperCase().endsWith(GML_DIR_PRIFIX)) {
			return false;
		}
		return true;
	}

	public static final String GML_DIR_PREFIX = "P11-10_";
	public static final String GML_DIR_PRIFIX = "_GML";

	/**
	 * SQLファイルかどうかを見極める
	 * @param f
	 * @return
	 */
	static boolean checkFile(File f) {
		String name = f.getName();
		if (name.equals("busstop.sql")) {
			return true;
		}
		return false;
	}

}