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