upgrading OSGi version
diff --git a/pom.xml b/pom.xml
index da88e77..5684dd6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,7 +38,7 @@
<properties>
<junit.version>5.3.1</junit.version>
- <osgi.version>6.0.0</osgi.version>
+ <osgi.version>7.0.0</osgi.version>
<slf4j.version>1.7.25</slf4j.version>
<xbean.version>4.11</xbean.version>
@@ -55,7 +55,6 @@
<module>winegrower-cepages</module>
<module>winegrower-examples</module>
<module>winegrower-documentation</module>
- <!-- <module>winegrower-testing</module> -->
</modules>
<dependencies>
@@ -75,7 +74,12 @@
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>osgi.core</artifactId>
+ <version>${osgi.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.cmpn</artifactId>
<version>${osgi.version}</version>
</dependency>
<dependency>
diff --git a/winegrower-core/pom.xml b/winegrower-core/pom.xml
index 05d0383..bb6fc1a 100644
--- a/winegrower-core/pom.xml
+++ b/winegrower-core/pom.xml
@@ -40,12 +40,11 @@
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>osgi.core</artifactId>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>osgi.cmpn</artifactId>
- <version>${osgi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java b/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java
index 7352a7b..d661e62 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java
@@ -13,6 +13,7 @@
*/
package org.apache.winegrower.service;
+import static java.util.Arrays.asList;
import static java.util.Collections.list;
import static java.util.Optional.ofNullable;
import static java.util.function.Function.identity;
@@ -28,10 +29,12 @@
import java.util.Date;
import java.util.Dictionary;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
+import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.winegrower.lang.Substitutor;
@@ -67,18 +70,28 @@
}
@Override
+ public Configuration getFactoryConfiguration(final String factoryPid, final String name, final String location) {
+ return getOrCreate(factoryPid, null, location, name);
+ }
+
+ @Override
+ public Configuration getFactoryConfiguration(final String factoryPid, final String name) {
+ return getOrCreate(factoryPid, null, null, name);
+ }
+
+ @Override
public Configuration createFactoryConfiguration(final String pid) {
return createFactoryConfiguration(pid, null);
}
@Override
public Configuration createFactoryConfiguration(final String pid, final String location) {
- return getOrCreate(pid, null, location);
+ return getOrCreate(pid, null, location, null);
}
@Override
public Configuration getConfiguration(final String pid, final String location) {
- return getOrCreate(null, pid, location);
+ return getOrCreate(null, pid, location, null);
}
@Override
@@ -97,14 +110,15 @@
}
}
- private Configuration getOrCreate(final String factoryPid, final String pid, final String location) {
+ private Configuration getOrCreate(final String factoryPid, final String pid, final String location,
+ final String name) {
final Key key = new Key(factoryPid, pid);
final Configuration existing = configurations.get(key);
if (existing != null) {
return existing;
}
final DefaultConfiguration created = new DefaultConfiguration(providedConfiguration,
- key.factoryPid, key.pid, location);
+ key.factoryPid, key.pid, location, name);
configurations.putIfAbsent(key, created);
onUpdate(created.factoryPid, created.pid); // after the put to ensure listConfiguration in a listener works
return created;
@@ -130,18 +144,23 @@
private final Map<String, String> configRegistry;
+ private final String name;
+
private String location;
private final Hashtable<String, Object> properties;
private final AtomicLong changeCount = new AtomicLong();
+ private final Set<ConfigurationAttribute> attributes = new HashSet<>();
+
private DefaultConfiguration(final Map<String, String> configRegistry, final String factoryPid, final String pid,
- final String location) {
+ final String location, final String name) {
this.configRegistry = configRegistry;
this.factoryPid = factoryPid;
this.pid = pid;
this.location = location;
+ this.name = name;
this.properties = new Hashtable<>();
this.defaultExternalConfigLocation = new File(
// support a cascade of known "homes"
@@ -188,6 +207,7 @@
// ensure the factoryPid/pid is there if exists
ofNullable(pid).ifPresent(v -> properties.putIfAbsent("service.pid", v));
ofNullable(factoryPid).ifPresent(v -> properties.putIfAbsent("service.factoryPid", v));
+ ofNullable(name).ifPresent(v -> properties.putIfAbsent("name", v));
}
@Override
@@ -201,6 +221,11 @@
}
@Override
+ public Dictionary<String, Object> getProcessedProperties(final ServiceReference<?> reference) {
+ return reference.getProperties();
+ }
+
+ @Override
public void update(final Dictionary<String, ?> properties) {
this.properties.clear();
loadConfig(pid);
@@ -234,6 +259,16 @@
}
@Override
+ public boolean updateIfDifferent(final Dictionary<String, ?> properties) {
+ if (properties == null || list(properties.keys()).stream()
+ .anyMatch(it -> !properties.get(it).equals(this.properties.get(it)))) {
+ update(properties);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
public void setBundleLocation(final String location) {
this.location = location;
}
@@ -248,6 +283,21 @@
return changeCount.get();
}
+ @Override
+ public void addAttributes(final ConfigurationAttribute... attrs) {
+ ofNullable(attrs).ifPresent(values -> attributes.addAll(asList(attrs)));
+ }
+
+ @Override
+ public Set<ConfigurationAttribute> getAttributes() {
+ return attributes;
+ }
+
+ @Override
+ public void removeAttributes(ConfigurationAttribute... attrs) throws IOException {
+ ofNullable(attrs).ifPresent(values -> attributes.removeAll(asList(attrs)));
+ }
+
private Map<String, String> converter(final Dictionary<String, ?> properties) {
return list(properties.keys()).stream().collect(toMap(identity(), it -> properties.get(it).toString()));
}
@@ -297,5 +347,10 @@
public int hashCode() {
return hash;
}
+
+ @Override
+ public String toString() {
+ return "Key{factoryPid='" + factoryPid + "', pid='" + pid + "'}";
+ }
}
}
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java b/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java
index 21e5953..4184e1d 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java
@@ -22,14 +22,14 @@
import org.osgi.framework.ServiceReference;
public class ServiceReferenceImpl<T> implements ServiceReference<T> {
- private final Dictionary<String, ?> properties;
+ private final Dictionary<String, Object> properties;
private final Bundle bundle;
private final Bundle[] usingBundles = new Bundle[0];
private final Object reference;
private final boolean usesFactory;
private ServiceRegistrationImpl registration;
- ServiceReferenceImpl(final Dictionary<String, ?> properties, final Bundle bundle, final Object reference) {
+ ServiceReferenceImpl(final Dictionary<String, Object> properties, final Bundle bundle, final Object reference) {
this.properties = properties;
this.bundle = bundle;
this.usesFactory = ServiceFactory.class.isInstance(reference);
@@ -88,6 +88,11 @@
return System.identityHashCode(this.reference) - System.identityHashCode(reference);
}
+ @Override
+ public Dictionary<String, Object> getProperties() {
+ return properties;
+ }
+
public boolean unget() {
if (usesFactory) {
throw new UnsupportedOperationException();
diff --git a/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java b/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java
index 86862b9..4751fc5 100644
--- a/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java
+++ b/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java
@@ -85,13 +85,13 @@
@Test
@WithRipener
void ensureFrameworkBundle(@Service final Ripener ripener) {
- assertEquals(2, ripener.getRegistry().getBundles().size());
+ assertEquals(3, ripener.getRegistry().getBundles().size());
}
@Test
@WithRipener(includeResources = @Entry(path = "org.apache.winegrower.test.simpleactivator"))
void simpleActivator(@Service final Ripener ripener) {
- assertEquals(3, ripener.getRegistry().getBundles().size());
+ assertEquals(4, ripener.getRegistry().getBundles().size());
final BundleActivatorHandler activatorHandler = ripener.getRegistry().getBundles().values().stream()
.filter(it -> it.getActivator() != null)
diff --git a/winegrower-examples/bundle/pom.xml b/winegrower-examples/bundle/pom.xml
index 2a2de3e..22ca6f0 100644
--- a/winegrower-examples/bundle/pom.xml
+++ b/winegrower-examples/bundle/pom.xml
@@ -40,7 +40,7 @@
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>osgi.core</artifactId>
</dependency>
<!-- test -->
diff --git a/winegrower-examples/config/pom.xml b/winegrower-examples/config/pom.xml
index 5781dfd..41e3909 100644
--- a/winegrower-examples/config/pom.xml
+++ b/winegrower-examples/config/pom.xml
@@ -41,12 +41,11 @@
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>osgi.core</artifactId>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>osgi.cmpn</artifactId>
- <version>6.0.0</version>
</dependency>
<!-- test -->
diff --git a/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/BuildTest.java b/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/BuildTest.java
index 47e1f21..99402b6 100644
--- a/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/BuildTest.java
+++ b/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/BuildTest.java
@@ -62,7 +62,7 @@
assertEquals(11, entries.size());
assertTrue(entries.contains("test-art-winegrower-distribution/bin/winegrower.sh"));
assertTrue(entries.contains("test-art-winegrower-distribution/bin/setenv.sh"));
- assertTrue(entries.contains("test-art-winegrower-distribution/lib/org.osgi.core-6.0.0.jar"));
+ assertTrue(entries.contains("test-art-winegrower-distribution/lib/osgi.core-7.0.0.jar"));
assertTrue(entries.contains("test-art-winegrower-distribution/lib/junit-jupiter-api-5.3.1.jar"));
}
}
diff --git a/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/FatJarTest.java b/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/FatJarTest.java
index b41c05b..f31cb88 100644
--- a/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/FatJarTest.java
+++ b/winegrower-extension/winegrower-build/winegrower-build-common/src/test/java/org/apache/winegrower/extension/build/common/FatJarTest.java
@@ -49,7 +49,7 @@
try (final JarFile files = new JarFile(output)) {
entries = list(files.entries()).stream().map(JarEntry::getName).collect(toList());
}
- assertTrue(entries.size() > 500); // 503 when writing this test
+ assertTrue(entries.size() > 450); // 481 when writing this test
// ensure junit and osgi-core are here by testing a few known classes
assertTrue(entries.contains("org/junit/jupiter/api/AfterAll.class"));
assertTrue(entries.contains("org/osgi/framework/FrameworkUtil.class"));