X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FDefaultScope.java;h=d3f62a7b88404a3ae6612422ec8b28c4d5114094;hb=dec278a67997ea8e85d10662e31548afd8890ed3;hp=b57f51f64f01a04d743f626fc6e90fd00fae4c39;hpb=7273d083a2f03cd3d2061d3c6628a46b679e718b;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/core/DefaultScope.java b/system/general/src/main/java/org/wamblee/system/core/DefaultScope.java index b57f51f6..d3f62a7b 100644 --- a/system/general/src/main/java/org/wamblee/system/core/DefaultScope.java +++ b/system/general/src/main/java/org/wamblee/system/core/DefaultScope.java @@ -1,5 +1,5 @@ /* - * Copyright 2008 the original author or authors. + * Copyright 2005-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,93 +17,122 @@ package org.wamblee.system.core; 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; +/** + * + * @author $author$ + * @version $Revision$ + */ public class DefaultScope implements Scope { + private List parents; + + private Map properties; + + private Map runtimes; + + private Map provided; + + private List externallyProvided; + + /** + * Creates a new DefaultScope object. + * + */ + public DefaultScope(List aExternallyProvided) { + this(aExternallyProvided.toArray(new ProvidedInterface[0])); + } + + /** + * Creates a new DefaultScope object. + * + */ + public DefaultScope(ProvidedInterface[] aExternallyProvided) { + this(aExternallyProvided, new ArrayList()); + } + + /** + * Creates a new DefaultScope object. + * + */ + public DefaultScope(ProvidedInterface[] aExternallyProvided, Scope aParent) { + this(aExternallyProvided, Arrays.asList(new Scope[] { aParent })); + } + + /** + * Creates a new DefaultScope object. + * + */ + public DefaultScope(ProvidedInterface[] aExternallyProvided, + List aParent) { + parents = new ArrayList(aParent); + properties = new HashMap(); + runtimes = new HashMap(); + provided = new HashMap(); + externallyProvided = new ArrayList(); + externallyProvided.addAll(Arrays.asList(aExternallyProvided)); + } + + @Override + public List getProvidedInterfaces() { + return Collections.unmodifiableList(externallyProvided); + } + + @Override + public Object get(String aKey) { + return properties.get(aKey); + } + + @Override + public void put(String aKey, Object aValue) { + properties.put(aKey, aValue); + } + + @Override + public void addRuntime(Component aComponent, Object aRuntime) { + runtimes.put(aComponent.getName(), aRuntime); + } + + @Override + public Object getRuntime(Component aComponent) { + return runtimes.get(aComponent.getName()); + } + + @Override + public Object getRuntime(String aName) { + return runtimes.get(aName); + } + + @Override + synchronized public void publishInterface(ProvidedInterface aInterface, + Object aImplementation) { + provided.put(aInterface, new ProvidedInterfaceImplementation( + aInterface, aImplementation)); + } + + @Override + public T getInterfaceImplementation(ProvidedInterface aInterface, + Class aType) { + if (aInterface == null) { + return null; + } + + ProvidedInterfaceImplementation providedIntf = provided.get(aInterface); + + if (providedIntf == null) { + for (Scope parent : parents) { + T impl = parent.getInterfaceImplementation(aInterface, aType); + + if (impl != null) { + return impl; + } + } - private List _parents; - private int _count; - private Map _properties; - private Map _runtimes; - private Map _provided; - private ProvidedInterface[] _externallyProvided; - - public DefaultScope(ProvidedInterface[] aExternallyProvided) { - this(aExternallyProvided, new ArrayList()); - } - - public DefaultScope(ProvidedInterface[] aExternallyProvided, Scope aParent) { - this(aExternallyProvided, Arrays.asList(new Scope[] { aParent })); - } - - public DefaultScope(ProvidedInterface[] aExternallyProvided, - List aParent) { - _parents = new ArrayList(aParent); - _count = 0; - _properties = new TreeMap(); - _runtimes = new TreeMap(); - _provided = new TreeMap(); - _externallyProvided = aExternallyProvided; - } - - @Override - public ProvidedInterface[] getProvidedInterfaces() { - return _externallyProvided; - } - - @Override - public Object get(String aKey) { - return _properties.get(aKey); - } - - @Override - public void put(String aKey, Object aValue) { - _properties.put(aKey, aValue); - } - - @Override - public void addRuntime(Component aComponent, Object aRuntime) { - _runtimes.put(aComponent.getQualifiedName(), aRuntime); - } - - @Override - public Object getRuntime(Component aComponent) { - return _runtimes.get(aComponent.getQualifiedName()); - } - - @Override - synchronized public void publishInterface(ProvidedInterface aInterface, - Object aImplementation) { - String id = "" + _count++; - _provided.put(id, new ProvidedInterfaceImplementation(aInterface, - aImplementation)); - aInterface.setUniqueId(id); - } - - @Override - public T getInterfaceImplementation(ProvidedInterface aInterface, - Class 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); - if (provided == null) { - for (Scope parent : _parents) { - T impl = parent.getInterfaceImplementation(aInterface, aType); - if ( impl != null ) { - return impl; - } - } - return null; - } else { - return provided.getImplementation(aType); - } - } + return null; + } + return providedIntf.getImplementation(aType); + } }