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/08/21 10:54:21 UTC

[2/2] karaf git commit: Extract ConfigInstaller

Extract ConfigInstaller


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

Branch: refs/heads/master
Commit: b3281c12a72d11831e152e4d2981c655623353eb
Parents: 6190984
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Mon Aug 21 12:37:22 2017 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Mon Aug 21 12:37:22 2017 +0200

----------------------------------------------------------------------
 .../apache/karaf/profile/assembly/Builder.java  | 143 +-------------
 .../karaf/profile/assembly/ConfigInstaller.java | 187 +++++++++++++++++++
 2 files changed, 191 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/b3281c12/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
----------------------------------------------------------------------
diff --git a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
index 2fdd5f0..f837a18 100644
--- a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
+++ b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
@@ -48,7 +48,6 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.function.Function;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
-import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -63,9 +62,7 @@ import org.apache.karaf.features.internal.download.Downloader;
 import org.apache.karaf.features.internal.download.StreamProvider;
 import org.apache.karaf.features.internal.model.Bundle;
 import org.apache.karaf.features.internal.model.Conditional;
-import org.apache.karaf.features.internal.model.Config;
 import org.apache.karaf.features.internal.model.ConfigFile;
-import org.apache.karaf.features.internal.model.Content;
 import org.apache.karaf.features.internal.model.Dependency;
 import org.apache.karaf.features.internal.model.Feature;
 import org.apache.karaf.features.internal.model.Features;
@@ -921,36 +918,9 @@ public class Builder {
                     }
                 }
             }
-            List<Content> contents = new ArrayList<>();
-            contents.add(feature);
-            contents.addAll(feature.getConditional());
-            for (Content content : contents) {
-                // Install config files
-                for (Config config : content.getConfig()) {
-                    if (config.isExternal()) {
-                        installer.installArtifact(config.getValue().trim());
-                    }
-                }
-                for (ConfigFile configFile : content.getConfigfile()) {
-                    installer.installArtifact(configFile.getLocation().trim());
-                }
-                // Extract configs
-                for (Config config : content.getConfig()) {
-                    if (pidMatching(config.getName())) {
-                        Path configFile = etcDirectory.resolve(config.getName() + ".cfg");
-                        LOGGER.info("      adding config file: {}", homeDirectory.relativize(configFile));
-                        if (config.isExternal()) {
-                            downloader.download(config.getValue().trim(), provider -> {
-                                synchronized (provider) {
-                                    Files.copy(provider.getFile().toPath(), configFile, StandardCopyOption.REPLACE_EXISTING);
-                                }
-                            });
-                        } else {
-                            Files.write(configFile, config.getValue().getBytes());
-                        }
-                    }
-                }
-            }
+
+            new ConfigInstaller(etcDirectory, pidsToExtract)
+                .installConfigs(feature, downloader, installer);
             // Install libraries
             List<String> libraries = new ArrayList<>();
             for (Library library : feature.getLibraries()) {
@@ -1019,112 +989,7 @@ public class Builder {
         return allBootFeatures;
     }
 
-    private boolean pidMatching(String name) {
-        if (pidsToExtract == null) {
-            return true;
-        }
-        for (String p : pidsToExtract) {
-            boolean negated = false;
-            if (p.startsWith("!")) {
-                negated = true;
-                p = p.substring(1);
-            }
-            String r = globToRegex(p);
-            if (Pattern.matches(r, name)) {
-                return !negated;
-            }
-        }
-        return false;
-    }
-
-    private String globToRegex(String pattern) {
-        StringBuilder sb = new StringBuilder(pattern.length());
-        int inGroup = 0;
-        int inClass = 0;
-        int firstIndexInClass = -1;
-        char[] arr = pattern.toCharArray();
-        for (int i = 0; i < arr.length; i++) {
-            char ch = arr[i];
-            switch (ch) {
-                case '\\':
-                    if (++i >= arr.length) {
-                        sb.append('\\');
-                    } else {
-                        char next = arr[i];
-                        switch (next) {
-                            case ',':
-                                // escape not needed
-                                break;
-                            case 'Q':
-                            case 'E':
-                                // extra escape needed
-                                sb.append('\\');
-                            default:
-                                sb.append('\\');
-                        }
-                        sb.append(next);
-                    }
-                    break;
-                case '*':
-                    if (inClass == 0)
-                        sb.append(".*");
-                    else
-                        sb.append('*');
-                    break;
-                case '?':
-                    if (inClass == 0)
-                        sb.append('.');
-                    else
-                        sb.append('?');
-                    break;
-                case '[':
-                    inClass++;
-                    firstIndexInClass = i + 1;
-                    sb.append('[');
-                    break;
-                case ']':
-                    inClass--;
-                    sb.append(']');
-                    break;
-                case '.':
-                case '(':
-                case ')':
-                case '+':
-                case '|':
-                case '^':
-                case '$':
-                case '@':
-                case '%':
-                    if (inClass == 0 || (firstIndexInClass == i && ch == '^'))
-                        sb.append('\\');
-                    sb.append(ch);
-                    break;
-                case '!':
-                    if (firstIndexInClass == i)
-                        sb.append('^');
-                    else
-                        sb.append('!');
-                    break;
-                case '{':
-                    inGroup++;
-                    sb.append('(');
-                    break;
-                case '}':
-                    inGroup--;
-                    sb.append(')');
-                    break;
-                case ',':
-                    if (inGroup > 0)
-                        sb.append('|');
-                    else
-                        sb.append(',');
-                    break;
-                default:
-                    sb.append(ch);
-            }
-        }
-        return sb.toString();
-    }
+
 
     private String getRepos(Features rep) {
         StringBuilder repos = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/karaf/blob/b3281c12/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java
----------------------------------------------------------------------
diff --git a/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java b/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java
new file mode 100644
index 0000000..13943a2
--- /dev/null
+++ b/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java
@@ -0,0 +1,187 @@
+/*
+ * 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.profile.assembly;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.apache.karaf.features.internal.download.Downloader;
+import org.apache.karaf.features.internal.model.Config;
+import org.apache.karaf.features.internal.model.ConfigFile;
+import org.apache.karaf.features.internal.model.Content;
+import org.apache.karaf.features.internal.model.Feature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ConfigInstaller {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigInstaller.class);
+    private Path etcDirectory;
+    private List<String> pidsToExtract;
+    
+    public ConfigInstaller(Path etcDirectory, List<String> pidsToExtract) {
+        this.etcDirectory = etcDirectory;
+        this.pidsToExtract = pidsToExtract;
+        // TODO Auto-generated constructor stub
+    }
+
+    public void installConfigs(Feature feature, Downloader downloader, ArtifactInstaller installer)
+        throws Exception, MalformedURLException, IOException {
+        List<Content> contents = new ArrayList<>();
+        contents.add(feature);
+        contents.addAll(feature.getConditional());
+        for (Content content : contents) {
+            // Install config files
+            for (Config config : content.getConfig()) {
+                if (config.isExternal()) {
+                    installer.installArtifact(config.getValue().trim());
+                }
+            }
+            for (ConfigFile configFile : content.getConfigfile()) {
+                installer.installArtifact(configFile.getLocation().trim());
+            }
+            // Extract configs
+            for (Config config : content.getConfig()) {
+                if (pidMatching(config.getName())) {
+                    Path configFile = etcDirectory.resolve(config.getName() + ".cfg");
+                    LOGGER.info("      adding config file: {}", configFile);
+                    if (config.isExternal()) {
+                        downloader.download(config.getValue().trim(), provider -> {
+                            synchronized (provider) {
+                                Files.copy(provider.getFile().toPath(), configFile, StandardCopyOption.REPLACE_EXISTING);
+                            }
+                        });
+                    } else {
+                        Files.write(configFile, config.getValue().getBytes());
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean pidMatching(String name) {
+        if (pidsToExtract == null) {
+            return true;
+        }
+        for (String p : pidsToExtract) {
+            boolean negated = false;
+            if (p.startsWith("!")) {
+                negated = true;
+                p = p.substring(1);
+            }
+            String r = globToRegex(p);
+            if (Pattern.matches(r, name)) {
+                return !negated;
+            }
+        }
+        return false;
+    }
+
+    private String globToRegex(String pattern) {
+        StringBuilder sb = new StringBuilder(pattern.length());
+        int inGroup = 0;
+        int inClass = 0;
+        int firstIndexInClass = -1;
+        char[] arr = pattern.toCharArray();
+        for (int i = 0; i < arr.length; i++) {
+            char ch = arr[i];
+            switch (ch) {
+                case '\\':
+                    if (++i >= arr.length) {
+                        sb.append('\\');
+                    } else {
+                        char next = arr[i];
+                        switch (next) {
+                            case ',':
+                                // escape not needed
+                                break;
+                            case 'Q':
+                            case 'E':
+                                // extra escape needed
+                                sb.append('\\');
+                            default:
+                                sb.append('\\');
+                        }
+                        sb.append(next);
+                    }
+                    break;
+                case '*':
+                    if (inClass == 0)
+                        sb.append(".*");
+                    else
+                        sb.append('*');
+                    break;
+                case '?':
+                    if (inClass == 0)
+                        sb.append('.');
+                    else
+                        sb.append('?');
+                    break;
+                case '[':
+                    inClass++;
+                    firstIndexInClass = i + 1;
+                    sb.append('[');
+                    break;
+                case ']':
+                    inClass--;
+                    sb.append(']');
+                    break;
+                case '.':
+                case '(':
+                case ')':
+                case '+':
+                case '|':
+                case '^':
+                case '$':
+                case '@':
+                case '%':
+                    if (inClass == 0 || (firstIndexInClass == i && ch == '^'))
+                        sb.append('\\');
+                    sb.append(ch);
+                    break;
+                case '!':
+                    if (firstIndexInClass == i)
+                        sb.append('^');
+                    else
+                        sb.append('!');
+                    break;
+                case '{':
+                    inGroup++;
+                    sb.append('(');
+                    break;
+                case '}':
+                    inGroup--;
+                    sb.append(')');
+                    break;
+                case ',':
+                    if (inGroup > 0)
+                        sb.append('|');
+                    else
+                        sb.append(',');
+                    break;
+                default:
+                    sb.append(ch);
+            }
+        }
+        return sb.toString();
+    }
+}