From 5a19f50eaf86fa33b4c18985913d73e62b66e4cb Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 18 Aug 2019 19:49:25 +0200 Subject: [PATCH] Introduce simple provisioning service. --- .../SimpleProvisioningService.java | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 org.argeo.enterprise/src/org/argeo/osgi/provisioning/SimpleProvisioningService.java 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 index 000000000..c0ec29000 --- /dev/null +++ b/org.argeo.enterprise/src/org/argeo/osgi/provisioning/SimpleProvisioningService.java @@ -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 map = Collections.synchronizedSortedMap(new TreeMap<>()); + + public SimpleProvisioningService() { + // update count + map.put(PROVISIONING_UPDATE_COUNT, 0); + } + + @Override + public Dictionary getInformation() { + return new Information(); + } + + @Override + public synchronized void setInformation(Dictionary info) { + map.clear(); + addInformation(info); + } + + @Override + public synchronized void addInformation(Dictionary info) { + Enumeration 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 { + + @Override + public int size() { + return map.size(); + } + + @Override + public boolean isEmpty() { + return map.isEmpty(); + } + + @Override + public Enumeration keys() { + Iterator it = map.keySet().iterator(); + return new Enumeration() { + + @Override + public boolean hasMoreElements() { + return it.hasNext(); + } + + @Override + public String nextElement() { + return it.next(); + } + + }; + } + + @Override + public Enumeration elements() { + Iterator it = map.values().iterator(); + return new Enumeration() { + + @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(); + } + + } +} -- 2.30.2