Newer
Older
adjustgpx-gui / src / main / java / osm / jp / gpx / AppParameters.java
@haya4 haya4 on 25 Apr 2020 12 KB ImgFolder
  1. package osm.jp.gpx;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.util.Properties;
  9.  
  10. @SuppressWarnings("serial")
  11. public class AppParameters extends Properties {
  12. static final String FILE_PATH = "AdjustTime.ini";
  13. // GPX: 時間的に間隔が開いたGPXログを別の<trkseg>セグメントに分割する。 {ON | OFF}
  14. public static String GPX_GPXSPLIT = "GPX.gpxSplit";
  15.  
  16. // GPX: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF}
  17. public static String GPX_NO_FIRST_NODE = "GPX.noFirstNode";
  18.  
  19. // GPX: 基準時刻 {FILE_UPDATE | EXIF_TIME}
  20. public static String GPX_BASETIME = "GPX.BASETIME";
  21.  
  22. // GPX: ファイル更新時刻 yyyy:MM:dd HH:mm:ss
  23. public static String IMG_TIME = "IMG.TIME";
  24.  
  25. // 対象IMGフォルダ:(位置情報を付加したい画像ファイルが格納されているフォルダ)
  26. public static String IMG_SOURCE_FOLDER = "IMG.SOURCE_FOLDER";
  27.  
  28. // 基準時刻画像(正確な撮影時刻が判明できる画像)
  29. public static String IMG_BASE_FILE = "IMG.BASE_FILE";
  30.  
  31. // 対象GPXフォルダ:(GPXファイルが格納されているフォルダ)
  32. public static String GPX_SOURCE_FOLDER = "GPX.SOURCE_FOLDER";
  33.  
  34. // 出力フォルダ:(変換した画像ファイルを出力するフォルダ)
  35. public static String IMG_OUTPUT_FOLDER = "IMG.OUTPUT_FOLDER";
  36.  
  37. // 出力IMG: IMG出力をする {ON | OFF}
  38. public static String IMG_OUTPUT = "IMG.OUTPUT";
  39.  
  40. // 出力IMG: 'out of time'も IMG出力の対象とする {ON | OFF}
  41. //   この場合は、対象IMGフォルダ内のすべてのIMGファイルが出力フォルダに出力される
  42. public static String IMG_OUTPUT_ALL = "IMG.OUTPUT_ALL";
  43.  
  44. // 出力IMG: EXIFを変換する
  45. public static String IMG_OUTPUT_EXIF = "IMG.OUTPUT_EXIF";
  46.  
  47. // 出力GPX: <SPEED>を上書き出力する {ON | OFF}
  48. public static String GPX_OUTPUT_SPEED = "GPX.OUTPUT_SPEED";
  49.  
  50. // 出力GPX: ソースGPXの<MAGVER>を無視する {ON | OFF}
  51. public static String GPX_OVERWRITE_MAGVAR = "GPX.OVERWRITE_MAGVAR";
  52. public static String GPX_REUSE = "GPX.REUSE";
  53.  
  54. //public boolean param_ImgOutputAll = false;
  55. //public boolean exif = false;
  56. //public boolean param_GpxSplit = false;
  57. //public boolean param_GpxReuse = false;
  58.  
  59. File file;
  60.  
  61. public AppParameters() throws FileNotFoundException, IOException {
  62. super();
  63. this.file = new File(FILE_PATH);
  64. syncFile();
  65. }
  66.  
  67. public AppParameters(Properties defaults) throws FileNotFoundException, IOException {
  68. super(defaults);
  69. this.file = new File(FILE_PATH);
  70. syncFile();
  71. }
  72.  
  73. public AppParameters(String iniFileName) throws FileNotFoundException, IOException {
  74. super();
  75. this.file = new File(iniFileName);
  76. syncFile();
  77. }
  78.  
  79. private void syncFile() throws FileNotFoundException, IOException {
  80. boolean update = false;
  81.  
  82. if (this.file.exists()) {
  83. // ファイルが存在すれば、その内容をロードする。
  84. this.load(new FileInputStream(file));
  85. }
  86. else {
  87. update = true;
  88. }
  89.  
  90. //------------------------------------------------
  91. // 対象フォルダ:(位置情報を付加したい画像ファイルが格納されているフォルダ)
  92. String valueStr = this.getProperty(IMG_SOURCE_FOLDER);
  93. if (valueStr == null) {
  94. update = true;
  95. this.setProperty(IMG_SOURCE_FOLDER, (new File(".")).getAbsolutePath());
  96. }
  97.  
  98. //------------------------------------------------
  99. // 対象フォルダ:(GPXファイルが格納されているフォルダ)
  100. valueStr = this.getProperty(GPX_SOURCE_FOLDER);
  101. if (valueStr == null) {
  102. update = true;
  103. this.setProperty(GPX_SOURCE_FOLDER, (new File(".")).getAbsolutePath());
  104. }
  105.  
  106. //------------------------------------------------
  107. // 基準時刻画像(正確な撮影時刻が判明できる画像)
  108. valueStr = this.getProperty(IMG_BASE_FILE);
  109. if (valueStr == null) {
  110. update = true;
  111. this.setProperty(IMG_BASE_FILE, "");
  112. }
  113.  
  114. //------------------------------------------------
  115. // 出力フォルダ:(変換した画像ファイルとGPXファイルを出力するフォルダ)
  116. valueStr = this.getProperty(IMG_OUTPUT_FOLDER);
  117. if (valueStr == null) {
  118. update = true;
  119. this.setProperty(IMG_OUTPUT_FOLDER, (new File(".")).getAbsolutePath());
  120. }
  121.  
  122. //------------------------------------------------
  123. // IMG出力: IMGを出力する
  124. valueStr = this.getProperty(IMG_OUTPUT);
  125. if (valueStr == null) {
  126. update = true;
  127. valueStr = String.valueOf(true);
  128. }
  129. this.setProperty(IMG_OUTPUT, String.valueOf(valueStr));
  130.  
  131. //------------------------------------------------
  132. // 出力IMG: 'out of time'も IMG出力の対象とする
  133. valueStr = this.getProperty(IMG_OUTPUT_ALL);
  134. if (valueStr == null) {
  135. update = true;
  136. valueStr = String.valueOf(false);
  137. }
  138. this.setProperty(IMG_OUTPUT_ALL, String.valueOf(valueStr));
  139.  
  140. //------------------------------------------------
  141. // IMG出力: EXIFを変換する
  142. valueStr = this.getProperty(IMG_OUTPUT_EXIF);
  143. if (valueStr == null) {
  144. update = true;
  145. valueStr = String.valueOf(true);
  146. }
  147. this.setProperty(IMG_OUTPUT_EXIF, String.valueOf(valueStr));
  148.  
  149. //------------------------------------------------
  150. // GPX出力: 時間的に間隔が開いたGPXログを別の<trkseg>セグメントに分割する。 {ON | OFF}
  151. valueStr = this.getProperty(GPX_GPXSPLIT);
  152. if (valueStr == null) {
  153. update = true;
  154. this.setProperty(GPX_GPXSPLIT, String.valueOf(true));
  155. }
  156.  
  157. //------------------------------------------------
  158. // GPX出力: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF}
  159. valueStr = this.getProperty(GPX_NO_FIRST_NODE);
  160. if (valueStr == null) {
  161. update = true;
  162. this.setProperty(GPX_NO_FIRST_NODE, String.valueOf(true));
  163. }
  164.  
  165. //------------------------------------------------
  166. // GPX出力: ソースGPXの<MAGVAR>を無視する {ON | OFF}
  167. valueStr = this.getProperty(GPX_OVERWRITE_MAGVAR);
  168. if (valueStr == null) {
  169. update = true;
  170. this.setProperty(GPX_OVERWRITE_MAGVAR, String.valueOf(false));
  171. }
  172.  
  173. //------------------------------------------------
  174. // GPX出力: <SPEED>を上書き出力する {ON | OFF}
  175. valueStr = this.getProperty(GPX_OUTPUT_SPEED);
  176. if (valueStr == null) {
  177. update = true;
  178. this.setProperty(GPX_OUTPUT_SPEED, String.valueOf(false));
  179. }
  180.  
  181. //------------------------------------------------
  182. // GPX: 基準時刻 {FILE_UPDATE | EXIF}
  183. valueStr = this.getProperty(GPX_BASETIME);
  184. if (valueStr == null) {
  185. update = true;
  186. setProperty(AppParameters.GPX_BASETIME, "FILE_UPDATE");
  187. }
  188.  
  189. // その他のパラメータを読み取る
  190. valueStr = getProperty(AppParameters.GPX_GPXSPLIT);
  191. if (valueStr == null) {
  192. update = true;
  193. setProperty(AppParameters.GPX_GPXSPLIT, Boolean.toString(false));
  194. }
  195.  
  196. valueStr = getProperty(AppParameters.GPX_NO_FIRST_NODE);
  197. if (valueStr == null) {
  198. update = true;
  199. setProperty(AppParameters.GPX_NO_FIRST_NODE, Boolean.toString(false));
  200. }
  201. valueStr = getProperty(AppParameters.IMG_OUTPUT_ALL);
  202. if (valueStr == null) {
  203. update = true;
  204. setProperty(AppParameters.IMG_OUTPUT_ALL, Boolean.toString(false));
  205. }
  206.  
  207. valueStr = getProperty(AppParameters.GPX_OVERWRITE_MAGVAR);
  208. if (valueStr == null) {
  209. update = true;
  210. setProperty(AppParameters.GPX_OVERWRITE_MAGVAR, Boolean.toString(false));
  211. }
  212.  
  213. valueStr = getProperty(AppParameters.GPX_OUTPUT_SPEED);
  214. if (valueStr == null) {
  215. update = true;
  216. setProperty(AppParameters.GPX_OUTPUT_SPEED, Boolean.toString(false));
  217. }
  218. valueStr = getProperty(AppParameters.GPX_REUSE);
  219. if (valueStr == null) {
  220. update = true;
  221. setProperty(AppParameters.GPX_REUSE, Boolean.toString(false));
  222. }
  223. if (update) {
  224. // ・ファイルがなければ新たに作る
  225. // ・項目が足りない時は書き足す。
  226. this.store(new FileOutputStream(this.file), "defuilt settings");
  227. }
  228. }
  229.  
  230. public void store() throws FileNotFoundException, IOException {
  231. this.store(new FileOutputStream(this.file), "by AdjustTime");
  232. }
  233. public void printout() {
  234. System.out.println(" - param: "+ AppParameters.IMG_TIME +"="+ getProperty(AppParameters.IMG_TIME) );
  235. System.out.println(" - param: "+ AppParameters.IMG_BASE_FILE +"="+ getProperty(AppParameters.IMG_BASE_FILE) );
  236. System.out.println(" - param: "+ AppParameters.GPX_BASETIME +"="+ getProperty(AppParameters.GPX_BASETIME) );
  237. System.out.println(" - param: "+ AppParameters.IMG_SOURCE_FOLDER +"="+ getProperty(AppParameters.IMG_SOURCE_FOLDER) );
  238. System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_FOLDER +"="+ getProperty(AppParameters.IMG_OUTPUT_FOLDER) );
  239. System.out.println(" - param: "+ AppParameters.IMG_OUTPUT +"="+ getProperty(AppParameters.IMG_OUTPUT));
  240. System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_ALL +"="+ isImgOutputAll());
  241. System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_EXIF +"= "+ isImgOutputExif());
  242. System.out.println(" - param: "+ AppParameters.GPX_SOURCE_FOLDER +"="+ getProperty(AppParameters.GPX_SOURCE_FOLDER));
  243. System.out.println(" - param: "+ AppParameters.GPX_OVERWRITE_MAGVAR +"="+ getProperty(AppParameters.GPX_OVERWRITE_MAGVAR));
  244. System.out.println(" - param: "+ AppParameters.GPX_OUTPUT_SPEED +"="+ getProperty(AppParameters.GPX_OUTPUT_SPEED));
  245. System.out.println(" - param: "+ AppParameters.GPX_GPXSPLIT +"="+ isGpxSplit());
  246. System.out.println(" - param: "+ AppParameters.GPX_NO_FIRST_NODE +"="+ isGpxNoFirstNode());
  247. System.out.println(" - param: "+ AppParameters.GPX_REUSE +"="+ isGpxReuse());
  248. }
  249. /**
  250. * 基準時刻(ファイル更新日時 | EXIF撮影日時)
  251. * @return boolean exifBase = false;
  252. */
  253. public boolean isExifBase() {
  254. return (getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME"));
  255. }
  256. /**
  257. * IMG出力: IMGを出力する
  258. * @return
  259. */
  260. public boolean isImgOutput() {
  261. String valueStr = getProperty(AppParameters.IMG_OUTPUT);
  262. if ((valueStr != null) && valueStr.equals(Boolean.toString(true))) {
  263. return true;
  264. }
  265. return false;
  266. }
  267.  
  268. public boolean isImgOutputExif() {
  269. String valueStr = getProperty(AppParameters.IMG_OUTPUT_EXIF);
  270. if ((valueStr != null) && valueStr.equals(Boolean.toString(true))) {
  271. return true;
  272. }
  273. return false;
  274. }
  275. /**
  276. * AppParameters.IMG_SOURCE_FOLDER
  277. * @return new File(getProperty(AppParameters.IMG_SOURCE_FOLDER));
  278. */
  279. public File getImgSourceFolder() {
  280. return new File(getProperty(AppParameters.IMG_SOURCE_FOLDER));
  281. }
  282. public File getGpxSourceFolder() {
  283. String str = getProperty(AppParameters.GPX_SOURCE_FOLDER);
  284. if (str == null) {
  285. return null;
  286. }
  287. if (str.isEmpty()) {
  288. return null;
  289. }
  290. return new File(str);
  291. }
  292.  
  293. /**
  294. * AppParameters.GPX_GPXSPLIT
  295. * @return
  296. */
  297. public boolean isGpxSplit() {
  298. return isParam(AppParameters.GPX_GPXSPLIT);
  299. }
  300.  
  301. public boolean isGpxNoFirstNode() {
  302. return isParam(AppParameters.GPX_NO_FIRST_NODE);
  303. }
  304. public boolean isImgOutputAll() {
  305. return isParam(AppParameters.IMG_OUTPUT_ALL);
  306. }
  307.  
  308. public boolean isGpxOverwriteMagvar() {
  309. return isParam(AppParameters.GPX_OVERWRITE_MAGVAR);
  310. }
  311.  
  312. public void setGpxOverwriteMagvar(boolean v) {
  313. this.setProperty(GPX_OVERWRITE_MAGVAR, String.valueOf(v));
  314. }
  315.  
  316. public boolean isGpxOutputSpeed() {
  317. return isParam(AppParameters.GPX_OUTPUT_SPEED);
  318. }
  319. public boolean isGpxReuse() {
  320. return isParam(AppParameters.GPX_REUSE);
  321. }
  322. boolean isParam(String item) {
  323. String valueStr = getProperty(item);
  324. if ((valueStr != null) && valueStr.equals(Boolean.toString(true))) {
  325. return true;
  326. }
  327. return false;
  328. }
  329. }