You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2021/05/07 15:56:42 UTC
[karaf] branch main updated: [KARAF-7098] Add R7 configuration
style support
This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/karaf.git
The following commit(s) were added to refs/heads/main by this push:
new b21c1ea [KARAF-7098] Add R7 configuration style support
new 58c7234 Merge pull request #1369 from jbonofre/KARAF-7098
b21c1ea is described below
commit b21c1eaedabcda71ab41b9eb924fd4afc6896023
Author: jbonofre <jb...@apache.org>
AuthorDate: Fri May 7 15:17:45 2021 +0200
[KARAF-7098] Add R7 configuration style support
Credit To: Oliver Lietz <ap...@oliverlietz.de>
---
config/pom.xml | 1 +
.../config/core/impl/JsonConfigInstaller.java | 60 ++++++++++------------
2 files changed, 29 insertions(+), 32 deletions(-)
diff --git a/config/pom.xml b/config/pom.xml
index d909e30..19124e6 100644
--- a/config/pom.xml
+++ b/config/pom.xml
@@ -142,6 +142,7 @@
org.apache.karaf.config.core.impl,
org.apache.karaf.config.core.impl.osgi,
org.apache.karaf.util,
+ org.apache.karaf.util.config,
org.apache.felix.utils.collections
</Private-Package>
</instructions>
diff --git a/config/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java b/config/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java
index 0466142..1d7560d 100644
--- a/config/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java
+++ b/config/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java
@@ -20,6 +20,7 @@ import org.apache.felix.cm.json.Configurations;
import org.apache.felix.fileinstall.ArtifactInstaller;
import org.apache.felix.fileinstall.internal.DirectoryWatcher;
import org.apache.felix.utils.collections.DictionaryAsMap;
+import org.apache.karaf.util.config.ConfigurationPID;
import org.osgi.framework.Constants;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
@@ -37,12 +38,13 @@ import java.net.URISyntaxException;
import java.net.URL;
import java.util.Dictionary;
import java.util.Hashtable;
+import java.util.Objects;
public class JsonConfigInstaller implements ArtifactInstaller, ConfigurationListener {
private final static Logger LOGGER = LoggerFactory.getLogger(JsonConfigInstaller.class);
- private ConfigurationAdmin configurationAdmin;
+ private final ConfigurationAdmin configurationAdmin;
public JsonConfigInstaller(ConfigurationAdmin configurationAdmin) {
this.configurationAdmin = configurationAdmin;
@@ -69,9 +71,9 @@ public class JsonConfigInstaller implements ArtifactInstaller, ConfigurationList
}
private void setConfig(File artifact) throws Exception {
- String name = artifact.getName();
- String pid[] = parsePid(name);
- Configuration configuration = getConfiguration(toConfigKey(artifact), pid[0], pid[1]);
+ final String filename = artifact.getName();
+ final ConfigurationPID configurationPID = ConfigurationPID.parseFilename(filename);
+ Configuration configuration = getConfiguration(toConfigKey(artifact), configurationPID);
Dictionary<String, Object> props = configuration.getProperties();
Hashtable<String, Object> old = props != null ? new Hashtable<>(new DictionaryAsMap<>(props)) : null;
Hashtable<String, Object> properties = Configurations.buildReader().build(new FileReader(artifact)).readConfiguration();
@@ -84,20 +86,22 @@ public class JsonConfigInstaller implements ArtifactInstaller, ConfigurationList
if (old == null || !old.equals(properties)) {
properties.put(DirectoryWatcher.FILENAME, toConfigKey(artifact));
if (old == null) {
- LOGGER.info("Creating configuration from " + pid[0] + (pid[1] == null ? "" : "-" + pid[1]) + ".json");
+ LOGGER.info("Creating configuration from {}", artifact.getName());
} else {
- LOGGER.info("Updating configuration from " + pid[0] + (pid[1] == null ? "" : "-" + pid[1]) + ".json");
+ LOGGER.info("Updating configuration from {}", artifact.getName());
}
configuration.update(properties);
}
}
- boolean deleteConfig(File f) throws Exception {
- String pid[] = parsePid(f.getName());
- LOGGER.info("Deleting configuration from " + pid[0] + (pid[1] == null ? "" : "-" + pid[1]) + ".json");
- Configuration config = getConfiguration(toConfigKey(f), pid[0], pid[1]);
- config.delete();
- return true;
+ void deleteConfig(File artifact) throws Exception {
+ Configuration config = findExistingConfiguration(toConfigKey(artifact));
+ if (Objects.nonNull(config)) {
+ config.delete();
+ LOGGER.info("Configuration for {} found and deleted", artifact.getName());
+ } else {
+ LOGGER.info("Configuration for {} not found, unable to delete", artifact.getName());
+ }
}
@Override
@@ -140,41 +144,33 @@ public class JsonConfigInstaller implements ArtifactInstaller, ConfigurationList
return null;
}
- String[] parsePid(String path) {
- String pid = path.substring(0, path.lastIndexOf('.'));
- int n = pid.indexOf('-');
- if (n > 0) {
- String factoryPid = pid.substring(n + 1);
- pid = pid.substring(0, n);
- return new String[]{pid, factoryPid};
- } else {
- return new String[]{pid, null};
- }
- }
-
String toConfigKey(File f) {
return f.getAbsoluteFile().toURI().toString();
}
- Configuration getConfiguration(String fileName, String pid, String factoryPid) throws Exception {
- Configuration oldConfiguration = findExistingConfiguration(fileName);
+ Configuration getConfiguration(String configKey, ConfigurationPID configurationPID) throws Exception {
+ Configuration oldConfiguration = findExistingConfiguration(configKey);
Configuration cachedConfiguration = oldConfiguration != null ?
configurationAdmin.getConfiguration(oldConfiguration.getPid(), null) : null;
if (cachedConfiguration != null) {
return cachedConfiguration;
} else {
- Configuration newConfiguration;
- if (factoryPid != null) {
- newConfiguration = configurationAdmin.createFactoryConfiguration(pid, "?");
+ final Configuration newConfiguration;
+ if (configurationPID.isFactory()) {
+ if (configurationPID.isR7()) {
+ newConfiguration = configurationAdmin.getFactoryConfiguration(configurationPID.getFactoryPid(), configurationPID.getName(), "?");
+ } else {
+ newConfiguration = configurationAdmin.createFactoryConfiguration(configurationPID.getFactoryPid(), "?");
+ }
} else {
- newConfiguration = configurationAdmin.getConfiguration(pid, "?");
+ newConfiguration = configurationAdmin.getConfiguration(configurationPID.getPid(), "?");
}
return newConfiguration;
}
}
- Configuration findExistingConfiguration(String fileName) throws Exception {
- String filter = "(" + DirectoryWatcher.FILENAME + "=" + escapeFilterValue(fileName) + ")";
+ Configuration findExistingConfiguration(String configKey) throws Exception {
+ String filter = "(" + DirectoryWatcher.FILENAME + "=" + escapeFilterValue(configKey) + ")";
Configuration[] configurations = configurationAdmin.listConfigurations(filter);
if (configurations != null && configurations.length > 0) {
return configurations[0];