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