< prev index next >

application/org.openjdk.jmc.rcp.application/src/main/java/org/openjdk/jmc/rcp/application/commands/OpenFile.java

Print this page

        

@@ -32,10 +32,16 @@
  */
 package org.openjdk.jmc.rcp.application.commands;
 
 import java.io.File;
 import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Deque;
+import java.util.ArrayDeque;
+import java.util.Arrays;
 
 import org.openjdk.jmc.commands.IExecute;
 import org.openjdk.jmc.commands.Statement;
 import org.openjdk.jmc.ui.MCPathEditorInput;
 import org.openjdk.jmc.ui.WorkbenchToolkit;

@@ -46,14 +52,54 @@
 public class OpenFile implements IExecute {
         private static final String FILE_NAME_PARAMETER = "filename"; //$NON-NLS-1$
 
         @Override
         public boolean execute(Statement statement, PrintStream out) {
+
                 String fileName = statement.getString(FILE_NAME_PARAMETER);
+                fileName = fileName.replaceFirst("^~", System.getProperty("user.home"));
+                Path path = Paths.get(fileName);
+                if (!Files.exists(path)) {
+                        fileName = findFile(fileName,new File(System.getProperty("user.home")));
+                }
                 if (fileName != null) {
                         WorkbenchToolkit.openEditor(new MCPathEditorInput(new File(fileName)));
                 } else {
                         out.println(statement.getCommand().getIdentifier() + " requires a filename"); //$NON-NLS-1$
                 }
                 return false;
         }
+
+        public String findFile(String name,File file) {
+                File next = null;
+                File list[] = null;
+                Deque<File> stack = null;
+                list = file.listFiles();
+                if (list != null) {
+                        stack = new ArrayDeque<File>(Arrays.asList(list));
+                }
+                if (stack != null) {
+                        while (!stack.isEmpty()) {
+                                next = stack.pop();
+                                if (!next.isHidden() && !next.isDirectory()) {
+                                        if (name.equals(next.getName())) {
+                                                return next.getAbsolutePath();
+                                        }
+                                } else if (!next.isHidden() && next.isDirectory()) {
+                                        list = file.listFiles();
+                                        if (list != null) {
+                                                for (File fil : list) {
+                                                        if (!fil.isHidden() && !fil.isDirectory()) {
+                                                                if (name.equals(fil.getName())) {
+                                                                        return fil.getAbsolutePath();
+                                                                }
+                                                        } else if (!fil.isHidden() && fil.isDirectory()) {
+                                                                stack.add(fil);
+                                                        }
+                                                }
+                                        }
+                                }
+                        }
+                }
+                return null;
+    }
 }
< prev index next >