package osm.jp.gpx; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; @SuppressWarnings("serial") public class AppParameters extends Properties { static final String FILE_PATH = "AdjustTime.ini"; // GPX: 時間的に間隔が開いたGPXログを別の<trkseg>セグメントに分割する。 {ON | OFF} public static String GPX_GPXSPLIT = "GPX.gpxSplit"; // GPX: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF} public static String GPX_NO_FIRST_NODE = "GPX.noFirstNode"; // GPX: 基準時刻 {FILE_UPDATE | EXIF_TIME} public static String GPX_BASETIME = "GPX.BASETIME"; // GPX: ファイル更新時刻 yyyy:MM:dd HH:mm:ss public static String IMG_TIME = "IMG.TIME"; // 対象IMGフォルダ:(位置情報を付加したい画像ファイルが格納されているフォルダ) public static String IMG_SOURCE_FOLDER = "IMG.SOURCE_FOLDER"; // 基準時刻画像(正確な撮影時刻が判明できる画像) public static String IMG_BASE_FILE = "IMG.BASE_FILE"; // 対象GPXフォルダ:(GPXファイルが格納されているフォルダ) public static String GPX_SOURCE_FOLDER = "GPX.SOURCE_FOLDER"; // 出力フォルダ:(変換した画像ファイルを出力するフォルダ) public static String IMG_OUTPUT_FOLDER = "IMG.OUTPUT_FOLDER"; // 出力IMG: IMG出力をする {ON | OFF} public static String IMG_OUTPUT = "IMG.OUTPUT"; // 出力IMG: 'out of time'も IMG出力の対象とする {ON | OFF} // この場合は、対象IMGフォルダ内のすべてのIMGファイルが出力フォルダに出力される public static String IMG_OUTPUT_ALL = "IMG.OUTPUT_ALL"; // 出力IMG: EXIFを変換する public static String IMG_OUTPUT_EXIF = "IMG.OUTPUT_EXIF"; // 出力GPX: <SPEED>を上書き出力する {ON | OFF} public static String GPX_OUTPUT_SPEED = "GPX.OUTPUT_SPEED"; // 出力GPX: ソースGPXの<MAGVER>を無視する {ON | OFF} public static String GPX_OVERWRITE_MAGVAR = "GPX.OVERWRITE_MAGVAR"; public static String GPX_REUSE = "GPX.REUSE"; //public boolean param_ImgOutputAll = false; //public boolean exif = false; //public boolean param_GpxSplit = false; //public boolean param_GpxReuse = false; File file; public AppParameters() throws FileNotFoundException, IOException { super(); this.file = new File(FILE_PATH); syncFile(); } public AppParameters(Properties defaults) throws FileNotFoundException, IOException { super(defaults); this.file = new File(FILE_PATH); syncFile(); } public AppParameters(String iniFileName) throws FileNotFoundException, IOException { super(); this.file = new File(iniFileName); syncFile(); } private void syncFile() throws FileNotFoundException, IOException { boolean update = false; if (this.file.exists()) { // ファイルが存在すれば、その内容をロードする。 this.load(new FileInputStream(file)); } else { update = true; } //------------------------------------------------ // 対象フォルダ:(位置情報を付加したい画像ファイルが格納されているフォルダ) String valueStr = this.getProperty(IMG_SOURCE_FOLDER); if (valueStr == null) { update = true; this.setProperty(IMG_SOURCE_FOLDER, (new File(".")).getAbsolutePath()); } //------------------------------------------------ // 対象フォルダ:(GPXファイルが格納されているフォルダ) valueStr = this.getProperty(GPX_SOURCE_FOLDER); if (valueStr == null) { update = true; this.setProperty(GPX_SOURCE_FOLDER, (new File(".")).getAbsolutePath()); } //------------------------------------------------ // 基準時刻画像(正確な撮影時刻が判明できる画像) valueStr = this.getProperty(IMG_BASE_FILE); if (valueStr == null) { update = true; this.setProperty(IMG_BASE_FILE, ""); } //------------------------------------------------ // 出力フォルダ:(変換した画像ファイルとGPXファイルを出力するフォルダ) valueStr = this.getProperty(IMG_OUTPUT_FOLDER); if (valueStr == null) { update = true; this.setProperty(IMG_OUTPUT_FOLDER, (new File(".")).getAbsolutePath()); } //------------------------------------------------ // IMG出力: IMGを出力する valueStr = this.getProperty(IMG_OUTPUT); if (valueStr == null) { update = true; valueStr = String.valueOf(true); } this.setProperty(IMG_OUTPUT, String.valueOf(valueStr)); //------------------------------------------------ // 出力IMG: 'out of time'も IMG出力の対象とする valueStr = this.getProperty(IMG_OUTPUT_ALL); if (valueStr == null) { update = true; valueStr = String.valueOf(false); } this.setProperty(IMG_OUTPUT_ALL, String.valueOf(valueStr)); //------------------------------------------------ // IMG出力: EXIFを変換する valueStr = this.getProperty(IMG_OUTPUT_EXIF); if (valueStr == null) { update = true; valueStr = String.valueOf(true); } this.setProperty(IMG_OUTPUT_EXIF, String.valueOf(valueStr)); //------------------------------------------------ // GPX出力: 時間的に間隔が開いたGPXログを別の<trkseg>セグメントに分割する。 {ON | OFF} valueStr = this.getProperty(GPX_GPXSPLIT); if (valueStr == null) { update = true; this.setProperty(GPX_GPXSPLIT, String.valueOf(true)); } //------------------------------------------------ // GPX出力: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF} valueStr = this.getProperty(GPX_NO_FIRST_NODE); if (valueStr == null) { update = true; this.setProperty(GPX_NO_FIRST_NODE, String.valueOf(true)); } //------------------------------------------------ // GPX出力: ソースGPXの<MAGVAR>を無視する {ON | OFF} valueStr = this.getProperty(GPX_OVERWRITE_MAGVAR); if (valueStr == null) { update = true; this.setProperty(GPX_OVERWRITE_MAGVAR, String.valueOf(false)); } //------------------------------------------------ // GPX出力: <SPEED>を上書き出力する {ON | OFF} valueStr = this.getProperty(GPX_OUTPUT_SPEED); if (valueStr == null) { update = true; this.setProperty(GPX_OUTPUT_SPEED, String.valueOf(false)); } //------------------------------------------------ // GPX: 基準時刻 {FILE_UPDATE | EXIF} valueStr = this.getProperty(GPX_BASETIME); if (valueStr == null) { update = true; setProperty(AppParameters.GPX_BASETIME, "FILE_UPDATE"); } // その他のパラメータを読み取る valueStr = getProperty(AppParameters.GPX_GPXSPLIT); if (valueStr == null) { update = true; setProperty(AppParameters.GPX_GPXSPLIT, Boolean.toString(false)); } valueStr = getProperty(AppParameters.GPX_NO_FIRST_NODE); if (valueStr == null) { update = true; setProperty(AppParameters.GPX_NO_FIRST_NODE, Boolean.toString(false)); } valueStr = getProperty(AppParameters.IMG_OUTPUT_ALL); if (valueStr == null) { update = true; setProperty(AppParameters.IMG_OUTPUT_ALL, Boolean.toString(false)); } valueStr = getProperty(AppParameters.GPX_OVERWRITE_MAGVAR); if (valueStr == null) { update = true; setProperty(AppParameters.GPX_OVERWRITE_MAGVAR, Boolean.toString(false)); } valueStr = getProperty(AppParameters.GPX_OUTPUT_SPEED); if (valueStr == null) { update = true; setProperty(AppParameters.GPX_OUTPUT_SPEED, Boolean.toString(false)); } valueStr = getProperty(AppParameters.GPX_REUSE); if (valueStr == null) { update = true; setProperty(AppParameters.GPX_REUSE, Boolean.toString(false)); } if (update) { // ・ファイルがなければ新たに作る // ・項目が足りない時は書き足す。 this.store(new FileOutputStream(this.file), "defuilt settings"); } } public void store() throws FileNotFoundException, IOException { this.store(new FileOutputStream(this.file), "by AdjustTime"); } public void printout() { System.out.println(" - param: "+ AppParameters.IMG_TIME +"="+ getProperty(AppParameters.IMG_TIME) ); System.out.println(" - param: "+ AppParameters.IMG_BASE_FILE +"="+ getProperty(AppParameters.IMG_BASE_FILE) ); System.out.println(" - param: "+ AppParameters.GPX_BASETIME +"="+ getProperty(AppParameters.GPX_BASETIME) ); System.out.println(" - param: "+ AppParameters.IMG_SOURCE_FOLDER +"="+ getProperty(AppParameters.IMG_SOURCE_FOLDER) ); System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_FOLDER +"="+ getProperty(AppParameters.IMG_OUTPUT_FOLDER) ); System.out.println(" - param: "+ AppParameters.IMG_OUTPUT +"="+ getProperty(AppParameters.IMG_OUTPUT)); System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_ALL +"="+ isImgOutputAll()); System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_EXIF +"= "+ isImgOutputExif()); System.out.println(" - param: "+ AppParameters.GPX_SOURCE_FOLDER +"="+ getProperty(AppParameters.GPX_SOURCE_FOLDER)); System.out.println(" - param: "+ AppParameters.GPX_OVERWRITE_MAGVAR +"="+ getProperty(AppParameters.GPX_OVERWRITE_MAGVAR)); System.out.println(" - param: "+ AppParameters.GPX_OUTPUT_SPEED +"="+ getProperty(AppParameters.GPX_OUTPUT_SPEED)); System.out.println(" - param: "+ AppParameters.GPX_GPXSPLIT +"="+ isGpxSplit()); System.out.println(" - param: "+ AppParameters.GPX_NO_FIRST_NODE +"="+ isGpxNoFirstNode()); System.out.println(" - param: "+ AppParameters.GPX_REUSE +"="+ isGpxReuse()); } /** * 基準時刻(ファイル更新日時 | EXIF撮影日時) * @return boolean exifBase = false; */ public boolean isExifBase() { return (getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")); } /** * IMG出力: IMGを出力する * @return */ public boolean isImgOutput() { String valueStr = getProperty(AppParameters.IMG_OUTPUT); if ((valueStr != null) && valueStr.equals(Boolean.toString(true))) { return true; } return false; } public boolean isImgOutputExif() { String valueStr = getProperty(AppParameters.IMG_OUTPUT_EXIF); if ((valueStr != null) && valueStr.equals(Boolean.toString(true))) { return true; } return false; } /** * AppParameters.IMG_SOURCE_FOLDER * @return new File(getProperty(AppParameters.IMG_SOURCE_FOLDER)); */ public File getImgSourceFolder() { return new File(getProperty(AppParameters.IMG_SOURCE_FOLDER)); } public File getGpxSourceFolder() { String str = getProperty(AppParameters.GPX_SOURCE_FOLDER); if (str == null) { return null; } if (str.isEmpty()) { return null; } return new File(str); } /** * AppParameters.GPX_GPXSPLIT * @return */ public boolean isGpxSplit() { return isParam(AppParameters.GPX_GPXSPLIT); } public boolean isGpxNoFirstNode() { return isParam(AppParameters.GPX_NO_FIRST_NODE); } public boolean isImgOutputAll() { return isParam(AppParameters.IMG_OUTPUT_ALL); } public boolean isGpxOverwriteMagvar() { return isParam(AppParameters.GPX_OVERWRITE_MAGVAR); } public void setGpxOverwriteMagvar(boolean v) { this.setProperty(GPX_OVERWRITE_MAGVAR, String.valueOf(v)); } public boolean isGpxOutputSpeed() { return isParam(AppParameters.GPX_OUTPUT_SPEED); } public boolean isGpxReuse() { return isParam(AppParameters.GPX_REUSE); } boolean isParam(String item) { String valueStr = getProperty(item); if ((valueStr != null) && valueStr.equals(Boolean.toString(true))) { return true; } return false; } }