blob: 4e14d9ad3b7bfae1feb6ee13bee65ab514c0be53 [file] [log] [blame]
package org.apache.felix.dm.lambda.impl;
import java.util.Arrays;
import java.util.Collections;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.NoSuchElementException;
import org.osgi.framework.ServiceReference;
/**
* Maps a ServiceReference to a Dictionary.
*/
public class SRefAsDictionary extends Dictionary<String, Object> {
private final ServiceReference<?> m_ref;
private volatile int m_size = -1;
public SRefAsDictionary(ServiceReference<?> ref) {
m_ref = ref;
}
@Override
public Object get(Object key) {
return m_ref.getProperty(key.toString());
}
@Override
public int size() {
return m_size != -1 ? m_size : (m_size = m_ref.getPropertyKeys().length);
}
@Override
public boolean isEmpty() {
return size() == 0;
}
@Override
public Enumeration<String> keys() {
return Collections.enumeration(Arrays.asList(m_ref.getPropertyKeys()));
}
@Override
public Enumeration<Object> elements() {
final String[] keys = m_ref.getPropertyKeys();
return new Enumeration<Object>() {
int m_index = 0;
@Override
public boolean hasMoreElements() {
return m_index < keys.length;
}
@Override
public Object nextElement() {
if (m_index >= keys.length) {
throw new NoSuchElementException();
}
return m_ref.getProperty(keys[m_index ++]);
}
};
}
@Override
public Object remove(Object key) {
throw new UnsupportedOperationException();
}
@Override
public Object put(String key, Object value) {
throw new UnsupportedOperationException();
}
public String toString() {
int max = size() - 1;
if (max == -1)
return "{}";
StringBuilder sb = new StringBuilder();
String[] keys = m_ref.getPropertyKeys();
sb.append('{');
for (int i = 0; ; i++) {
String key = keys[i];
Object value = m_ref.getProperty(key);
sb.append(key);
sb.append('=');
sb.append(value == this ? "(this Dictionary)" : value.toString());
if (i == max)
return sb.append('}').toString();
sb.append(", ");
}
}
}