OSDN Git Service

出力フォルダを指定可能にする
authorhaya4 <hayashi.yuu@gmail.com>
Sun, 26 Jan 2020 00:49:09 +0000 (09:49 +0900)
committerhaya4 <hayashi.yuu@gmail.com>
Sun, 26 Jan 2020 00:49:09 +0000 (09:49 +0900)
src/main/java/osm/surveyor/matchtime/Restamp.java
src/main/resources/i18n.properties
src/main/resources/i18n_ja_JP.properties
src/test/java/osm/surveyor/matchtime/RestampTest.java

index b770042..6dd2b91 100644 (file)
@@ -63,6 +63,7 @@ public class Restamp extends Thread {
      *  ```\r
      * \r
      *  exp) $ java -jar Restamp.jar argv[0] argv[1] argv[2] argv[3] argv[4]\r
+     *  exp) $ java -jar Restamp.jar argv[0] argv[1] argv[2] argv[3] argv[4] argv[5]\r
      * \r
      * @param argv\r
      * argv[0] = 画像ファイルが格納されているディレクトリ          --> imgDir\r
@@ -70,103 +71,137 @@ public class Restamp extends Thread {
      * argv[2] = 基準画像ファイルの精確な撮影日時 "yyyy-MM-dd HH:mm:ss z" --> baseTime1\r
      * argv[3] = 時刻補正の基準とする画像ファイル                      --> baseFile2\r
      * argv[4] = 基準画像ファイルの精確な撮影日時 "yyyy-MM-dd HH:mm:ss z" --> baseTime2\r
+     * argv[5] = (option)変換済み画像ファイルの出力フォルダ.省略した場合は元画像を直接上書きする --> outputDir\r
      * @throws ImageReadException \r
      */\r
     public static void main(String[] argv) throws Exception\r
     {\r
         if (argv.length < 5) {\r
-            System.out.println("java Restamp <imgDir> <baseFile1> <timeStr1> <baseFile2> <timeStr2>");\r
+            System.out.println("java osm.surveyor.matchtime.Restamp <imgDir> <baseFile1> <timeStr1> <baseFile2> <timeStr2>");\r
+            System.out.println("java osm.surveyor.matchtime.Restamp <imgDir> <baseFile1> <timeStr1> <baseFile2> <timeStr2> <output dir>");\r
             return;\r
         }\r
         \r
         Path imgDir = Paths.get(argv[0]);\r
-        if (!Files.exists(imgDir)) {\r
-            // "[error] <imgDir>が存在しません。"\r
-            System.out.println(i18n.getString("msg.200"));\r
-            return;\r
-        }\r
-        if (!Files.isDirectory(imgDir)) {\r
-            // "[error] <imgDir>がフォルダじゃない"\r
-            System.out.println(i18n.getString("msg.210"));\r
-            return;\r
+        \r
+        Path outDir = imgDir;\r
+        if (argv.length >= 6) {\r
+            outDir = Paths.get(argv[5]);\r
         }\r
         \r
         Path baseFile1 = Paths.get(imgDir.toString(), argv[1]);\r
-        if (!Files.exists(baseFile1)) {\r
-            // "[error] <baseFile1>が存在しません。"\r
-            System.out.println(i18n.getString("msg.220"));\r
-            return;\r
-        }\r
-        if (!Files.isRegularFile(baseFile1)) {\r
-            // "[error] <baseFile1>がファイルじゃない"\r
-            System.out.println(i18n.getString("msg.230"));\r
-            return;\r
-        }\r
         \r
         DateFormat df1 = new SimpleDateFormat(TIME_PATTERN);\r
        Date baseTime1 = df1.parse(argv[2]);\r
+       Date baseTime2 = df1.parse(argv[4]);\r
 \r
         Path baseFile2 = Paths.get(imgDir.toString(), argv[3]);\r
-        if (!Files.exists(baseFile2)) {\r
-            // "[error] <baseFile2>が存在しません。"\r
-            System.out.println(i18n.getString("msg.240"));\r
-            return;\r
-        }\r
-        if (!Files.isRegularFile(baseFile2)) {\r
-            // "[error] <baseFile2>がファイルじゃない"\r
-            System.out.println(i18n.getString("msg.250"));\r
-            return;\r
-        }\r
-        \r
-       Date baseTime2 = df1.parse(argv[4]);\r
         \r
         Restamp obj = new Restamp();\r
-        obj.setUp(imgDir, baseFile1, baseTime1, baseFile2, baseTime2);\r
+        if (obj.setUp(imgDir, baseFile1, baseTime1, baseFile2, baseTime2, outDir)) {\r
+            obj.start();\r
+            try {\r
+                obj.join();\r
+            } catch(InterruptedException end) {}\r
+            if (obj.ex != null) {\r
+                throw obj.ex;\r
+            }\r
+        }\r
     }\r
     \r
     Path imgDir;\r
-    //Path outDir;\r
+    Path outDir;\r
     Date baseTime1;\r
     Date baseTime2;\r
     Path baseFile1;\r
     Path baseFile2;\r
     public static ResourceBundle i18n = ResourceBundle.getBundle("i18n");\r
        \r
+    /**\r
+     * パラメータの設定とチェック\r
+     * @param imgDir\r
+     * @param baseFile1\r
+     * @param baseTime1\r
+     * @param baseFile2\r
+     * @param baseTime2\r
+     * @param outDir\r
+     * @return パラメータチェックに合格すればtrue\r
+     * @throws Exception \r
+     */\r
     @SuppressWarnings("Convert2Lambda")\r
-    public void setUp(\r
+    public boolean setUp(\r
             Path imgDir, \r
             Path baseFile1, Date baseTime1,  \r
-            Path baseFile2, Date baseTime2) throws Exception {\r
+            Path baseFile2, Date baseTime2,\r
+            Path outDir) throws Exception {\r
         this.imgDir = imgDir;\r
+        this.outDir = outDir;\r
         this.baseTime1 = baseTime1;\r
         this.baseTime2 = baseTime2;\r
         this.baseFile1 = baseFile1;\r
         this.baseFile2 = baseFile2;\r
         \r
-        /*\r
-        File outDir = new File(imgDir, "restamp.out");\r
-        if (outDir.exists()) {\r
-            // "[error] <outDir>が存在する。"\r
-            if (!outDir.isDirectory()) {\r
-                // "[error] <outDir>がフォルダじゃない"\r
+        // <imgDir:ソースフォルダ>のチェック\r
+        if (!Files.exists(imgDir)) {\r
+            // "[error] <imgDir>が存在しません。"\r
+            System.out.println(i18n.getString("msg.200"));\r
+            return false;\r
+        }\r
+        if (!Files.isDirectory(imgDir)) {\r
+            // "[error] <imgDir>がフォルダじゃない"\r
+            System.out.println(i18n.getString("msg.210"));\r
+            return false;\r
+        }\r
+        \r
+        // <outDir>のチェック\r
+        if (Files.exists(outDir)) {\r
+            if (!Files.isDirectory(outDir)) {\r
+                // "[error] <出力先フォルダ>はフォルダじゃない"\r
                 System.out.println(i18n.getString("msg.270"));\r
-                return;\r
+                return false;\r
             }\r
         }\r
         else {\r
-            // "<outDir>が存在しない。"\r
-            outDir.mkdir();\r
+            // "[error] <outDir>は存在しません。"\r
+            try {\r
+                Files.createDirectories(outDir);\r
+            }\r
+            catch (IOException e) {\r
+                System.out.println(i18n.getString("msg.275"));\r
+                return false;\r
+            }\r
+        }\r
+        if (!Files.isWritable(outDir)) {\r
+            // "[error] <出力先フォルダ>には書き込みできません"\r
+            System.out.println(i18n.getString("msg.275"));\r
+            return false;\r
         }\r
-        this.outDir = outDir;\r
-        */\r
         \r
-        this.start();\r
-        try {\r
-            this.join();\r
-        } catch(InterruptedException end) {}\r
-        if (this.ex != null) {\r
-            throw this.ex;\r
+        // <baseFile1>のチェック\r
+        if (!Files.exists(baseFile1)) {\r
+            // "[error] <baseFile1>が存在しません。"\r
+            System.out.println(i18n.getString("msg.220"));\r
+            return false;\r
         }\r
+        if (!Files.isRegularFile(baseFile1)) {\r
+            // "[error] <baseFile1>がファイルじゃない"\r
+            System.out.println(i18n.getString("msg.230"));\r
+            return false;\r
+        }\r
+\r
+        // <baseFile2>のチェック\r
+        if (!Files.exists(baseFile2)) {\r
+            // "[error] <baseFile2>が存在しません。"\r
+            System.out.println(i18n.getString("msg.240"));\r
+            return false;\r
+        }\r
+        if (!Files.isRegularFile(baseFile2)) {\r
+            // "[error] <baseFile2>がファイルじゃない"\r
+            System.out.println(i18n.getString("msg.250"));\r
+            return false;\r
+        }\r
+        \r
+        return true;\r
     }\r
     \r
     @Override\r
index f581273..df9b53f 100644 (file)
@@ -69,5 +69,7 @@ msg.230=[error] <baseFile1> is not a file.
 msg.240=[error] Not exists <baseFile2>.
 msg.250=[error] <baseFile2> is not a file.
 msg.260=[error] Not exists <Output folder>.
+msg.265=[error] Did not create <outDir> folder.
 msg.270=[error] <Output folder> is not folder.
+msg.275=[error] <Output folder> is not writable.
 IMAGES/FIT16.GIF=images/Fit16.gif
index 2535af0..a77c64a 100644 (file)
@@ -70,5 +70,7 @@ msg.230=[error] <baseFile1>\u304c\u30d5\u30a1\u30a4\u30eb\u3058\u3083\u306a\u304
 msg.240=[error] <baseFile1>\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
 msg.250=[error] <baseFile1>\u304c\u30d5\u30a1\u30a4\u30eb\u3058\u3083\u306a\u3044
 msg.260=[error] <\u51fa\u529b\u5148\u30d5\u30a9\u30eb\u30c0>\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
-msg.270=[error] <\u51fa\u529b\u5148\u30d5\u30a9\u30eb\u30c0>\u304c\u30d5\u30a9\u30eb\u30c0\u3058\u3083\u306a\u3044
+msg.265=[error] <\u51fa\u529b\u5148\u30d5\u30a9\u30eb\u30c0>\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
+msg.270=[error] <\u51fa\u529b\u5148\u30d5\u30a9\u30eb\u30c0>\u306f\u30d5\u30a9\u30eb\u30c0\u3058\u3083\u306a\u3044
+msg.275=[error] <\u51fa\u529b\u5148\u30d5\u30a9\u30eb\u30c0>\u306b\u306f\u66f8\u304d\u8fbc\u307f\u3067\u304d\u307e\u305b\u3093
 IMAGES/FIT16.GIF=images/Fit16.gif
index f1dec34..ebe24c7 100644 (file)
@@ -32,13 +32,16 @@ public class RestampTest {
     @Before
     public void setUp() {
         dirPath = "./src/test/data/images";
+        outPath = "./out";
     }
     
     @After
     public void tearDown() {
+        
     }
 
     String dirPath;
+    String outPath;
 
     @Test
     public void testMain() {
@@ -160,10 +163,43 @@ public class RestampTest {
         }
     }
     
+    @Test
+    public void testMain_5() {
+        String[] ans = {
+            "2019-09-04 16:26:53 JST",  // 0.0
+            "2019-09-04 16:26:55 JST",  // 2.0
+            "2019-09-04 16:26:58 JST",  // 3.0
+            "2019-09-04 16:27:00 JST",  // 2.0
+            "2019-09-04 16:27:03 JST",  // 3.0
+            "2019-09-04 16:27:05 JST",  // 2.0
+            "2019-09-04 16:27:08 JST",  // 3.0
+            "2019-09-04 16:27:10 JST",  // 2.0
+            "2019-09-04 16:27:13 JST",  // 3.0
+        };
+        
+        try {
+            String[] argv = new String[]{
+                dirPath,
+                "00003.jpg",
+                "2019-09-04 16:26:58 JST",
+                "00005.jpg",
+                "2019-09-04 16:27:03 JST",
+                outPath
+            };
+            Restamp.main(argv);
+            check(new File(outPath), ans);
+        }
+        catch (Exception e) {
+            fail();
+        }
+    }
+    
     void check(File imgDir, String[] ans) {
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
 
         File[] files = imgDir.listFiles();
+        assertThat(files.length, is(ans.length));
+        
         java.util.Arrays.sort(files, (File file1, File file2) -> file1.getName().compareTo(file2.getName()));
         
         int i = 0;