karaf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbono...@apache.org
Subject [09/50] [abbrv] karaf git commit: [KARAF-4372] Fix url/file completion
Date Mon, 22 Aug 2016 09:30:07 GMT
[KARAF-4372] Fix url/file completion

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/cf07bccd
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/cf07bccd
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/cf07bccd

Branch: refs/heads/master
Commit: cf07bccd25067a9804c6a8870176f5f57ea842ac
Parents: 6afaf03
Author: Guillaume Nodet <gnodet@apache.org>
Authored: Tue Jul 19 09:27:48 2016 +0200
Committer: Jean-Baptiste Onofré <jbonofre@apache.org>
Committed: Mon Aug 22 11:29:19 2016 +0200

----------------------------------------------------------------------
 .../karaf/shell/api/console/Candidate.java      |  4 ++
 .../karaf/shell/api/console/Completer.java      |  8 +++-
 .../shell/support/completers/FileCompleter.java | 15 ++++--
 .../shell/support/completers/UriCompleter.java  | 48 ++++++++------------
 4 files changed, 40 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/cf07bccd/shell/core/src/main/java/org/apache/karaf/shell/api/console/Candidate.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/api/console/Candidate.java b/shell/core/src/main/java/org/apache/karaf/shell/api/console/Candidate.java
index c882566..6930c44 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/api/console/Candidate.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/api/console/Candidate.java
@@ -32,6 +32,10 @@ public class Candidate implements Comparable<Candidate> {
         this(value, value, null, null, null, null, true);
     }
 
+    public Candidate(String value, boolean complete) {
+        this(value, value, null, null, null, null, complete);
+    }
+
     public Candidate(String value, String displ, String group, String descr, String suffix,
String key, boolean complete) {
         Objects.requireNonNull(value);
         this.value = value;

http://git-wip-us.apache.org/repos/asf/karaf/blob/cf07bccd/shell/core/src/main/java/org/apache/karaf/shell/api/console/Completer.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/api/console/Completer.java b/shell/core/src/main/java/org/apache/karaf/shell/api/console/Completer.java
index 527f0db..4392f04 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/api/console/Completer.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/api/console/Completer.java
@@ -38,9 +38,13 @@ public interface Completer {
 
     default void completeCandidates(Session session, CommandLine commandLine, List<Candidate>
candidates) {
         List<String> strings = new ArrayList<>();
-        complete(session, commandLine, strings);
+        int idx = complete(session, commandLine, strings);
+        String word = "";
+        if (idx > commandLine.getBufferPosition() - commandLine.getArgumentPosition())
{
+            word = commandLine.getBuffer().substring(commandLine.getBufferPosition() - commandLine.getArgumentPosition(),
idx);
+        }
         for (String string : strings) {
-            candidates.add(new Candidate(string));
+            candidates.add(new Candidate(word + string));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/cf07bccd/shell/core/src/main/java/org/apache/karaf/shell/support/completers/FileCompleter.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/support/completers/FileCompleter.java
b/shell/core/src/main/java/org/apache/karaf/shell/support/completers/FileCompleter.java
index 6bf8f4d..d7e837f 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/support/completers/FileCompleter.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/support/completers/FileCompleter.java
@@ -20,6 +20,7 @@ package org.apache.karaf.shell.support.completers;
 import java.io.File;
 import java.util.List;
 
+import org.apache.karaf.shell.api.console.Candidate;
 import org.apache.karaf.shell.api.console.CommandLine;
 import org.apache.karaf.shell.api.console.Completer;
 import org.apache.karaf.shell.api.console.Session;
@@ -57,9 +58,13 @@ public class FileCompleter implements Completer
     }
 
     public int complete(final Session session, CommandLine commandLine, final List<String>
candidates) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void completeCandidates(final Session session, CommandLine commandLine, final
List<Candidate> candidates) {
         // buffer can be null
         if (candidates == null) {
-            return 0;
+            return;
         }
 
         String buffer = commandLine.getCursorArgument();
@@ -97,7 +102,7 @@ public class FileCompleter implements Completer
 
         File[] entries = dir == null ? new File[0] : dir.listFiles();
 
-        return matchFiles(buffer, translated, entries, candidates) + commandLine.getBufferPosition()
- commandLine.getArgumentPosition();
+        matchFiles(buffer, translated, entries, candidates);
     }
 
     protected String separator() {
@@ -112,7 +117,7 @@ public class FileCompleter implements Completer
         return new File(".");
     }
 
-    protected int matchFiles(final String buffer, final String translated, final File[] files,
final List<String> candidates) {
+    protected int matchFiles(final String buffer, final String translated, final File[] files,
final List<Candidate> candidates) {
         if (files == null) {
             return -1;
         }
@@ -127,8 +132,8 @@ public class FileCompleter implements Completer
         }
         for (File file : files) {
             if (file.getAbsolutePath().startsWith(translated)) {
-                CharSequence name = file.getName() + (matches == 1 && file.isDirectory()
? separator() : " ");
-                candidates.add(render(file, name).toString());
+                boolean dir = file.isDirectory();
+                candidates.add(new Candidate(render(file, dir ? file.toString() + "/" : file.toString()).toString(),
!dir));
             }
         }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/cf07bccd/shell/core/src/main/java/org/apache/karaf/shell/support/completers/UriCompleter.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/support/completers/UriCompleter.java
b/shell/core/src/main/java/org/apache/karaf/shell/support/completers/UriCompleter.java
index dacba12..70f68e6 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/support/completers/UriCompleter.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/support/completers/UriCompleter.java
@@ -24,6 +24,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
 
+import org.apache.karaf.shell.api.console.Candidate;
 import org.apache.karaf.shell.api.console.CommandLine;
 import org.apache.karaf.shell.api.console.Completer;
 import org.apache.karaf.shell.api.console.Session;
@@ -32,18 +33,22 @@ public class UriCompleter implements Completer {
 
     @Override
     public int complete(Session session, CommandLine commandLine, List<String> candidates)
{
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void completeCandidates(Session session, CommandLine commandLine, List<Candidate>
candidates) {
         String arg = commandLine.getCursorArgument();
         if (arg != null) {
             if (arg.startsWith("mvn:")) {
-                return maven(session, commandLine, candidates);
+                maven(session, commandLine, candidates);
             } else if (arg.startsWith("file:")) {
-                return file(session, commandLine, candidates);
+                file(session, commandLine, candidates);
             }
         }
-        return 0;
     }
 
-    private int file(Session session, CommandLine commandLine, List<String> candidates)
{
+    private void file(Session session, CommandLine commandLine, List<Candidate> candidates)
{
         String buffer = commandLine.getCursorArgument();
         String path = buffer.substring("file:".length(), commandLine.getArgumentPosition());
 
@@ -53,7 +58,7 @@ public class UriCompleter implements Completer {
             Path dir;
             if (path.length() == 0) {
                 for (Path root : FileSystems.getDefault().getRootDirectories()) {
-                    candidates.add(root.toString());
+                    candidates.add(new Candidate(root.toString(), false));
                 }
                 dir = Paths.get(".");
             } else {
@@ -70,24 +75,18 @@ public class UriCompleter implements Completer {
                 try (DirectoryStream<Path> paths = Files.newDirectoryStream(dir, rem
+ "*")) {
                     for (Path child : paths) {
                         String name = encode(child.getFileName().toString());
-                        if (Files.isDirectory(child)) {
+                        boolean isDir = Files.isDirectory(child);
+                        if (isDir) {
                             name += "/";
                         }
-                        candidates.add(name);
+                        String dirstr = dir.endsWith(File.separator) ? dir.toString() : dir.toString()
+ File.separator;
+                        candidates.add(new Candidate("file:" + dirstr + name, !isDir));
                     }
                 }
             }
         } catch (Exception e) {
             // Ignore
         }
-
-        if (candidates.size() == 1) {
-            String cand = candidates.get(0);
-            if (!cand.endsWith("/")) {
-                candidates.set(0, cand + " ");
-            }
-        }
-        return candidates.isEmpty() ? -1 : commandLine.getBufferPosition() - rem.length();
     }
 
     private String encode(String s) {
@@ -98,7 +97,7 @@ public class UriCompleter implements Completer {
         return s.replaceAll("%20", " ");
     }
 
-    private int maven(Session session, CommandLine commandLine, List<String> candidates)
{
+    private void maven(Session session, CommandLine commandLine, List<Candidate> candidates)
{
         String repo = System.getProperty("user.home") + "/.m2/repository";
         String buffer = commandLine.getCursorArgument();
         String mvn = buffer.substring("mvn:".length(), commandLine.getArgumentPosition());
@@ -123,12 +122,13 @@ public class UriCompleter implements Completer {
                     }
                     rem = dirs[dirs.length - 1];
                 }
-                Path dir = Paths.get(repo + File.separator + known);
+                Path rep = Paths.get(repo);
+                Path dir = rep.resolve(known);
                 try (DirectoryStream<Path> paths = Files.newDirectoryStream(dir, rem
+ "*")) {
                     for (Path path : paths) {
                         if (Files.isDirectory(path)) {
                             String name = path.getFileName().toString();
-                            candidates.add(group + name);
+                            candidates.add(new Candidate("mvn:" + group + name, false));
                         }
                     }
                 }
@@ -140,7 +140,7 @@ public class UriCompleter implements Completer {
                     for (Path path : paths) {
                         if (Files.isDirectory(path)) {
                             String name = path.getFileName().toString();
-                            candidates.add(name);
+                            candidates.add(new Candidate("mvn:" + parts[0] + "/" + name,
false));
                         }
                     }
                 }
@@ -151,7 +151,7 @@ public class UriCompleter implements Completer {
                     for (Path path : paths) {
                         if (Files.isDirectory(path)) {
                             String name = path.getFileName().toString();
-                            candidates.add(name);
+                            candidates.add(new Candidate("mvn:" + parts[0] + "/" + parts[1]
+ "/" + name, true));
                         }
                     }
                 }
@@ -159,14 +159,6 @@ public class UriCompleter implements Completer {
         } catch (Exception e) {
             // Ignore
         }
-
-        if (candidates.size() == 1) {
-            String cand = candidates.get(0);
-            if (cand.split("/").length == 3) {
-                candidates.set(0, candidates.get(0) + " ");
-            }
-        }
-        return candidates.isEmpty() ? -1 : commandLine.getBufferPosition() - rem.length();
     }
 
 }


Mime
View raw message