You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2017/03/22 11:13:28 UTC

karaf git commit: Extract and document FilesStream for init scripts

Repository: karaf
Updated Branches:
  refs/heads/master cba7000ab -> 4cad3de3b


Extract and document FilesStream for init scripts

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

Branch: refs/heads/master
Commit: 4cad3de3b62dc14c0183b17293dfe036a98ee2b0
Parents: cba7000
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Wed Mar 22 11:08:45 2017 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Wed Mar 22 12:13:22 2017 +0100

----------------------------------------------------------------------
 .../shell/impl/console/ConsoleSessionImpl.java  | 113 +-------------
 .../karaf/shell/impl/console/FilesStream.java   | 156 +++++++++++++++++++
 2 files changed, 157 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/4cad3de3/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
index 4a80b1e..10f8929 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
@@ -24,16 +24,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.lang.management.ManagementFactory;
-import java.nio.file.FileVisitOption;
-import java.nio.file.FileVisitResult;
-import java.nio.file.FileVisitor;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.PathMatcher;
 import java.nio.file.Paths;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -42,7 +35,6 @@ import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import java.util.stream.Stream;
 
 import org.apache.felix.gogo.jline.Shell;
 import org.apache.felix.gogo.runtime.CommandSessionImpl;
@@ -464,7 +456,7 @@ public class ConsoleSessionImpl implements Session {
     }
 
     private void executeScript(String names) {
-        generateFiles(names).forEach(this::doExecuteScript);
+        FilesStream.stream(names).forEach(this::doExecuteScript);
     }
 
     private void doExecuteScript(Path scriptFileName) {
@@ -478,110 +470,7 @@ public class ConsoleSessionImpl implements Session {
         }
     }
 
-    private Stream<Path> generateFiles(String scriptFileName) {
-        if (scriptFileName == null) {
-            return Stream.empty();
-        }
-        List<String> files = new ArrayList<>();
-        List<String> generators = new ArrayList<>();
-        StringBuilder buf = new StringBuilder(scriptFileName.length());
-        boolean hasUnescapedReserved = false;
-        boolean escaped = false;
-        for (int i = 0; i < scriptFileName.length(); i++) {
-            char c = scriptFileName.charAt(i);
-            if (escaped) {
-                buf.append(c);
-                escaped = false;
-            } else if (c == '\\') {
-                escaped = true;
-            } else if (c == ',') {
-                if (hasUnescapedReserved) {
-                    generators.add(buf.toString());
-                } else {
-                    files.add(buf.toString());
-                }
-                hasUnescapedReserved = false;
-                buf.setLength(0);
-            } else if ("*?{[".indexOf(c) >= 0) {
-                hasUnescapedReserved = true;
-                buf.append(c);
-            } else {
-                buf.append(c);
-            }
-        }
-        if (buf.length() > 0) {
-            if (hasUnescapedReserved) {
-                generators.add(buf.toString());
-            } else {
-                files.add(buf.toString());
-            }
-        }
-        Path cur = Paths.get(System.getProperty("karaf.base"));
-        return Stream.concat(
-                files.stream().map(cur::resolve),
-                generators.stream().flatMap(s -> files(cur, s)));
-    }
-
-    private Stream<Path> files(Path cur, String glob) {
-        String prefix;
-        String rem;
-        int idx = glob.lastIndexOf('/');
-        if (idx >= 0) {
-            prefix = glob.substring(0, idx + 1);
-            rem = glob.substring(idx + 1);
-        } else {
-            prefix = "";
-            rem = glob;
-        }
-        Path dir = cur.resolve(prefix);
-        final PathMatcher matcher = dir.getFileSystem().getPathMatcher("glob:" + rem);
-        Stream.Builder<Path> stream = Stream.builder();
-        try {
-            Files.walkFileTree(dir,
-                    EnumSet.of(FileVisitOption.FOLLOW_LINKS),
-                    Integer.MAX_VALUE,
-                    new FileVisitor<Path>() {
-                        @Override
-                        public FileVisitResult preVisitDirectory(Path file, BasicFileAttributes attrs) throws IOException {
-                            if (file.equals(dir)) {
-                                return FileVisitResult.CONTINUE;
-                            }
-                            if (Files.isHidden(file)) {
-                                return FileVisitResult.SKIP_SUBTREE;
-                            }
-                            Path r = dir.relativize(file);
-                            if (matcher.matches(r)) {
-                                stream.add(file);
-                            }
-                            return FileVisitResult.CONTINUE;
-                        }
-
-                        @Override
-                        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
-                            if (!Files.isHidden(file)) {
-                                Path r = dir.relativize(file);
-                                if (matcher.matches(r)) {
-                                    stream.add(file);
-                                }
-                            }
-                            return FileVisitResult.CONTINUE;
-                        }
 
-                        @Override
-                        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
-                            return FileVisitResult.CONTINUE;
-                        }
-
-                        @Override
-                        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
-                            return FileVisitResult.CONTINUE;
-                        }
-                    });
-        } catch (IOException e) {
-            LOGGER.warn("Error generating filenames", e);
-        }
-        return stream.build();
-    }
 
     protected void welcome(Properties brandingProps) {
         String welcome = brandingProps.getProperty("welcome");

http://git-wip-us.apache.org/repos/asf/karaf/blob/4cad3de3/shell/core/src/main/java/org/apache/karaf/shell/impl/console/FilesStream.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/FilesStream.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/FilesStream.java
new file mode 100644
index 0000000..496945e
--- /dev/null
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/FilesStream.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.shell.impl.console;
+
+import java.io.IOException;
+import java.nio.file.FileVisitOption;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.PathMatcher;
+import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class FilesStream {
+	private static final Logger LOGGER = LoggerFactory.getLogger(ConsoleSessionImpl.class);
+
+    private FilesStream() {
+	}
+
+    /**
+     * Returns a stream of Paths for the given fileNames.
+     * The given names can be delimited by ",". A name can also contain
+     * {@link java.nio.file.FileSystem#getPathMatcher} syntax to refer to matching files.  
+     * 
+     * @param fileNames list of names 
+     * @return Paths to the scripts 
+     */
+	static Stream<Path> stream(String fileNames) {
+        if (fileNames == null) {
+            return Stream.empty();
+        }
+        List<String> files = new ArrayList<>();
+        List<String> generators = new ArrayList<>();
+        StringBuilder buf = new StringBuilder(fileNames.length());
+        boolean hasUnescapedReserved = false;
+        boolean escaped = false;
+        for (int i = 0; i < fileNames.length(); i++) {
+            char c = fileNames.charAt(i);
+            if (escaped) {
+                buf.append(c);
+                escaped = false;
+            } else if (c == '\\') {
+                escaped = true;
+            } else if (c == ',') {
+                if (hasUnescapedReserved) {
+                    generators.add(buf.toString());
+                } else {
+                    files.add(buf.toString());
+                }
+                hasUnescapedReserved = false;
+                buf.setLength(0);
+            } else if ("*?{[".indexOf(c) >= 0) {
+                hasUnescapedReserved = true;
+                buf.append(c);
+            } else {
+                buf.append(c);
+            }
+        }
+        if (buf.length() > 0) {
+            if (hasUnescapedReserved) {
+                generators.add(buf.toString());
+            } else {
+                files.add(buf.toString());
+            }
+        }
+        Path cur = Paths.get(System.getProperty("karaf.base"));
+        return Stream.concat(
+                files.stream().map(cur::resolve),
+                generators.stream().flatMap(s -> files(cur, s)));
+    }
+
+    private static Stream<Path> files(Path cur, String glob) {
+        String prefix;
+        String rem;
+        int idx = glob.lastIndexOf('/');
+        if (idx >= 0) {
+            prefix = glob.substring(0, idx + 1);
+            rem = glob.substring(idx + 1);
+        } else {
+            prefix = "";
+            rem = glob;
+        }
+        Path dir = cur.resolve(prefix);
+        final PathMatcher matcher = dir.getFileSystem().getPathMatcher("glob:" + rem);
+        Stream.Builder<Path> stream = Stream.builder();
+        try {
+            Files.walkFileTree(dir,
+                    EnumSet.of(FileVisitOption.FOLLOW_LINKS),
+                    Integer.MAX_VALUE,
+                    new FileVisitor<Path>() {
+                        @Override
+                        public FileVisitResult preVisitDirectory(Path file, BasicFileAttributes attrs) throws IOException {
+                            if (file.equals(dir)) {
+                                return FileVisitResult.CONTINUE;
+                            }
+                            if (Files.isHidden(file)) {
+                                return FileVisitResult.SKIP_SUBTREE;
+                            }
+                            Path r = dir.relativize(file);
+                            if (matcher.matches(r)) {
+                                stream.add(file);
+                            }
+                            return FileVisitResult.CONTINUE;
+                        }
+
+                        @Override
+                        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                            if (!Files.isHidden(file)) {
+                                Path r = dir.relativize(file);
+                                if (matcher.matches(r)) {
+                                    stream.add(file);
+                                }
+                            }
+                            return FileVisitResult.CONTINUE;
+                        }
+
+                        @Override
+                        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
+                            return FileVisitResult.CONTINUE;
+                        }
+
+                        @Override
+                        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+                            return FileVisitResult.CONTINUE;
+                        }
+                    });
+        } catch (IOException e) {
+            LOGGER.warn("Error generating filenames", e);
+        }
+        return stream.build();
+    }
+}