Introduce simple provisioning service.
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 18 Aug 2019 17:49:25 +0000 (19:49 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 18 Aug 2019 17:49:25 +0000 (19:49 +0200)
org.argeo.enterprise/src/org/argeo/osgi/provisioning/SimpleProvisioningService.java [new file with mode: 0644]

diff --git a/org.argeo.enterprise/src/org/argeo/osgi/provisioning/SimpleProvisioningService.java b/org.argeo.enterprise/src/org/argeo/osgi/provisioning/SimpleProvisioningService.java
new file mode 100644 (file)
index 0000000..c0ec290
--- /dev/null
@@ -0,0 +1,118 @@
+package org.argeo.osgi.provisioning;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.zip.ZipInputStream;
+
+import org.osgi.service.provisioning.ProvisioningService;
+
+public class SimpleProvisioningService implements ProvisioningService {
+       private Map<String, Object> map = Collections.synchronizedSortedMap(new TreeMap<>());
+
+       public SimpleProvisioningService() {
+               // update count
+               map.put(PROVISIONING_UPDATE_COUNT, 0);
+       }
+
+       @Override
+       public Dictionary<String, Object> getInformation() {
+               return new Information();
+       }
+
+       @Override
+       public synchronized void setInformation(Dictionary<String, ?> info) {
+               map.clear();
+               addInformation(info);
+       }
+
+       @Override
+       public synchronized void addInformation(Dictionary<String, ?> info) {
+               Enumeration<String> e = info.keys();
+               while (e.hasMoreElements()) {
+                       String key = e.nextElement();
+                       map.put(key, info.get(key));
+               }
+               incrementProvisioningUpdateCount();
+       }
+
+       protected synchronized void incrementProvisioningUpdateCount() {
+               Integer current = (Integer) map.get(PROVISIONING_UPDATE_COUNT);
+               Integer newValue = current + 1;
+               map.put(PROVISIONING_UPDATE_COUNT, newValue);
+       }
+
+       @Override
+       public synchronized void addInformation(ZipInputStream zis) throws IOException {
+               throw new UnsupportedOperationException();
+       }
+
+       class Information extends Dictionary<String, Object> {
+
+               @Override
+               public int size() {
+                       return map.size();
+               }
+
+               @Override
+               public boolean isEmpty() {
+                       return map.isEmpty();
+               }
+
+               @Override
+               public Enumeration<String> keys() {
+                       Iterator<String> it = map.keySet().iterator();
+                       return new Enumeration<String>() {
+
+                               @Override
+                               public boolean hasMoreElements() {
+                                       return it.hasNext();
+                               }
+
+                               @Override
+                               public String nextElement() {
+                                       return it.next();
+                               }
+
+                       };
+               }
+
+               @Override
+               public Enumeration<Object> elements() {
+                       Iterator<Object> it = map.values().iterator();
+                       return new Enumeration<Object>() {
+
+                               @Override
+                               public boolean hasMoreElements() {
+                                       return it.hasNext();
+                               }
+
+                               @Override
+                               public Object nextElement() {
+                                       return it.next();
+                               }
+
+                       };
+               }
+
+               @Override
+               public Object get(Object key) {
+                       return map.get(key);
+               }
+
+               @Override
+               public Object put(String key, Object value) {
+                       throw new UnsupportedOperationException();
+               }
+
+               @Override
+               public Object remove(Object key) {
+                       throw new UnsupportedOperationException();
+               }
+
+       }
+}