Skip to content

v0.2.53..v0.2.54 changeset MergeOsmFilesCommand.java

Garret Voltz edited this page Mar 31, 2020 · 1 revision
diff --git a/hoot-services/src/main/java/hoot/services/controllers/grail/MergeOsmFilesCommand.java b/hoot-services/src/main/java/hoot/services/controllers/grail/MergeOsmFilesCommand.java
index 7a7bbca..3a06b87 100644
--- a/hoot-services/src/main/java/hoot/services/controllers/grail/MergeOsmFilesCommand.java
+++ b/hoot-services/src/main/java/hoot/services/controllers/grail/MergeOsmFilesCommand.java
@@ -28,7 +28,9 @@ package hoot.services.controllers.grail;
 
 import java.io.File;
 import java.io.FilenameFilter;
+import java.time.LocalDateTime;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -48,14 +50,7 @@ class MergeOsmFilesCommand extends GrailCommand {
 
     private final Map<String, Object> substitutionMap = new HashMap<>();
     private final Class<?> caller;
-
-    private static final FilenameFilter filter = new FilenameFilter() {
-        @Override
-        public boolean accept(File f, String name) {
-            // We want to find only .osm files
-            return name.endsWith(".osm");
-        }
-    };
+    private final FilenameFilter filter;
 
     MergeOsmFilesCommand(String jobId, GrailParams params, String debugLevel, Class<?> caller) {
         super(jobId, params);
@@ -63,30 +58,50 @@ class MergeOsmFilesCommand extends GrailCommand {
 
         this.caller = caller;
 
+        List<String> options = Collections.emptyList();
+        if (params.getAdvancedOptions() != null) {
+            options = params.getAdvancedOptions().entrySet().stream().map(ent -> ent.getKey() + "=" + ent.getValue()).collect(Collectors.toList());
+        }
+
         substitutionMap.put("DEBUG_LEVEL", debugLevel);
+        substitutionMap.put("HOOT_OPTIONS", toHootOptions(options));
         substitutionMap.put("OUTPUT", params.getOutput());
+
+        filter = (File f, String name) -> name.matches(params.getInput1());
     }
 
     @Override
     public CommandResult execute() {
+        String command;
+        CommandResult commandResult;
         //Get list of osm files in work dir
         File workDir = params.getWorkDir();
         File[] osmfiles = workDir.listFiles(filter);
         List<String> filePaths = Arrays.asList(osmfiles).stream().map(File::getAbsolutePath).collect(Collectors.toList());
 
-        String command = "hoot convert --${DEBUG_LEVEL}";
 
-        for (int i=0; i<filePaths.size(); i++) {
-            String input = "INPUT" + i;
-            substitutionMap.put(input, filePaths.get(i));
-            command += " ${" + input + "}";
-        }
+        if (filePaths.size() > 0) {
+            command = "hoot convert --${DEBUG_LEVEL} ${HOOT_OPTIONS}";
 
-        command += " ${OUTPUT}";
+            for (int i=0; i<filePaths.size(); i++) {
+                String input = "INPUT" + i;
+                substitutionMap.put(input, filePaths.get(i));
+                command += " ${" + input + "}";
+            }
 
-        super.configureCommand(command, substitutionMap, caller);
+            command += " ${OUTPUT}";
 
-        CommandResult commandResult = super.execute();
+            super.configureCommand(command, substitutionMap, caller);
+            commandResult = super.execute();
+        } else {
+            commandResult = new CommandResult();
+            commandResult.setJobId(jobId);
+            commandResult.setCommand("No osm files to merge");
+            commandResult.setStart(LocalDateTime.now());
+            commandResult.setCaller(caller.getName());
+            commandResult.setFinish(LocalDateTime.now());
+            commandResult.setExitCode(CommandResult.SUCCESS);
+        }
 
         return commandResult;
     }
Clone this wiki locally