import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import java.util.UUID;
public class DefaultScope implements Scope {
private List<Scope> _parents;
- private int _count;
private Map<String, Object> _properties;
private Map<String, Object> _runtimes;
- private Map<String, ProvidedInterfaceImplementation> _provided;
- private ProvidedInterface[] _externallyProvided;
+ private Map<ProvidedInterface, ProvidedInterfaceImplementation> _provided;
+ private List<ProvidedInterface> _externallyProvided;
+
+ public DefaultScope(List<ProvidedInterface>aExternallyProvided) {
+ this(aExternallyProvided.toArray(new ProvidedInterface[0]));
+ }
public DefaultScope(ProvidedInterface[] aExternallyProvided) {
this(aExternallyProvided, new ArrayList<Scope>());
public DefaultScope(ProvidedInterface[] aExternallyProvided,
List<Scope> aParent) {
_parents = new ArrayList<Scope>(aParent);
- _count = 0;
- _properties = new TreeMap<String, Object>();
- _runtimes = new TreeMap<String, Object>();
- _provided = new TreeMap<String, ProvidedInterfaceImplementation>();
- _externallyProvided = aExternallyProvided;
+ _properties = new HashMap<String, Object>();
+ _runtimes = new HashMap<String, Object>();
+ _provided = new HashMap<ProvidedInterface, ProvidedInterfaceImplementation>();
+ _externallyProvided = new ArrayList<ProvidedInterface>();
+ _externallyProvided.addAll(Arrays.asList(aExternallyProvided));
}
@Override
- public ProvidedInterface[] getProvidedInterfaces() {
- return _externallyProvided;
+ public List<ProvidedInterface> getProvidedInterfaces() {
+ return Collections.unmodifiableList(_externallyProvided);
}
@Override
@Override
synchronized public void publishInterface(ProvidedInterface aInterface,
Object aImplementation) {
- String id = "" + _count++;
- _provided.put(id, new ProvidedInterfaceImplementation(aInterface,
+ _provided.put(aInterface, new ProvidedInterfaceImplementation(aInterface,
aImplementation));
- aInterface.setUniqueId(id);
}
@Override
Class<T> aType) {
if ( aInterface == null ) {
return null;
- }
- String id = aInterface.getUniqueId();
- if ( id == null ) {
- // optional interface that was not published.
- return null;
- }
- ProvidedInterfaceImplementation provided = _provided.get(id);
+ }
+ ProvidedInterfaceImplementation provided = _provided.get(aInterface);
if (provided == null) {
for (Scope parent : _parents) {
T impl = parent.getInterfaceImplementation(aInterface, aType);