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(); + } +}