src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/AbstractDCmd.java
changeset 50745 a390cbb82d47
parent 50226 408021edf22f
child 50881 a21cad3fa448
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/AbstractDCmd.java	Sun Jun 24 16:25:47 2018 +0100
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/dcmd/AbstractDCmd.java	Mon Jun 25 02:07:42 2018 +0200
@@ -27,8 +27,10 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.nio.file.Files;
 import java.nio.file.InvalidPathException;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -63,15 +65,19 @@
         return result.toString();
     }
 
-    protected final SafePath resolvePath(String path, String errorMsg) throws DCmdException {
-        if (path == null) {
-            return null;
+    protected final SafePath resolvePath(Recording recording, String filename) throws InvalidPathException {
+        if (filename == null) {
+             return makeGenerated(recording, Paths.get("."));
         }
-        try {
-            return new SafePath(path);
-        } catch (InvalidPathException e) {
-            throw new DCmdException(e, errorMsg, ", invalid path \"" + path + "\".");
+        Path path = Paths.get(filename);
+        if (Files.isDirectory(path)) {
+            return makeGenerated(recording, path);
         }
+        return new SafePath(path.toAbsolutePath().normalize());
+    }
+
+    private SafePath makeGenerated(Recording recording, Path directory) {
+        return new SafePath(directory.toAbsolutePath().resolve(Utils.makeFilename(recording)).normalize());
     }
 
     protected final Recording findRecording(String name) throws DCmdException {
@@ -83,10 +89,12 @@
         }
     }
 
-    protected final void reportOperationComplete(String actionPrefix, Recording r, SafePath file) {
+    protected final void reportOperationComplete(String actionPrefix, String name, SafePath file) {
         print(actionPrefix);
-        print(" recording ");
-        print("\"" + r.getName() + "\"");
+        print(" recording");
+        if (name != null) {
+            print(" \"" + name + "\"");
+        }
         if (file != null) {
             print(",");
             try {
@@ -136,7 +144,7 @@
     }
 
     protected final void printBytes(long bytes, String separation) {
-       print(Utils.formatBytes(bytes, separation));
+        print(Utils.formatBytes(bytes, separation));
     }
 
     protected final void printTimespan(Duration timespan, String separator) {