X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FDefaultScope.java;h=7cfd2cab390266ae169a13da6efcb630e970e9cd;hb=ddd261f331280640c5b53c7128230b629ebcd268;hp=5ec26223b416e842da3239add38c5fb65f803e43;hpb=fddbe9b130633c7d8925f2580afea65767d1d615;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 5ec26223..7cfd2cab 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,12 +1,12 @@ /* * Copyright 2008 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. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,98 +17,199 @@ 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; + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ public class DefaultScope implements Scope { + /** + * DOCUMENT ME! + */ + private List parents; + + /** + * DOCUMENT ME! + */ + private Map properties; + + /** + * DOCUMENT ME! + */ + private Map runtimes; + + /** + * DOCUMENT ME! + */ + private Map provided; + + /** + * DOCUMENT ME! + */ + private List externallyProvided; + +/** + * Creates a new DefaultScope object. + * + * @param aExternallyProvided DOCUMENT ME! + */ + public DefaultScope(List aExternallyProvided) { + this(aExternallyProvided.toArray(new ProvidedInterface[0])); + } + +/** + * Creates a new DefaultScope object. + * + * @param aExternallyProvided DOCUMENT ME! + */ + public DefaultScope(ProvidedInterface[] aExternallyProvided) { + this(aExternallyProvided, new ArrayList()); + } + +/** + * Creates a new DefaultScope object. + * + * @param aExternallyProvided DOCUMENT ME! + * @param aParent DOCUMENT ME! + */ + public DefaultScope(ProvidedInterface[] aExternallyProvided, Scope aParent) { + this(aExternallyProvided, Arrays.asList(new Scope[] { aParent })); + } + +/** + * Creates a new DefaultScope object. + * + * @param aExternallyProvided DOCUMENT ME! + * @param aParent DOCUMENT ME! + */ + 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)); + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + @Override + public List getProvidedInterfaces() { + return Collections.unmodifiableList(externallyProvided); + } + + /** + * DOCUMENT ME! + * + * @param aKey DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + @Override + public Object get(String aKey) { + return properties.get(aKey); + } + + /** + * DOCUMENT ME! + * + * @param aKey DOCUMENT ME! + * @param aValue DOCUMENT ME! + */ + @Override + public void put(String aKey, Object aValue) { + properties.put(aKey, aValue); + } + + /** + * DOCUMENT ME! + * + * @param aComponent DOCUMENT ME! + * @param aRuntime DOCUMENT ME! + */ + @Override + public void addRuntime(Component aComponent, Object aRuntime) { + runtimes.put(aComponent.getName(), aRuntime); + } + + /** + * DOCUMENT ME! + * + * @param aComponent DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + @Override + public Object getRuntime(Component aComponent) { + return runtimes.get(aComponent.getName()); + } + + /** + * DOCUMENT ME! + * + * @param aName DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + @Override + public Object getRuntime(String aName) { + return runtimes.get(aName); + } + + /** + * DOCUMENT ME! + * + * @param aInterface DOCUMENT ME! + * @param aImplementation DOCUMENT ME! + */ + @Override + synchronized public void publishInterface(ProvidedInterface aInterface, + Object aImplementation) { + provided.put(aInterface, + new ProvidedInterfaceImplementation(aInterface, aImplementation)); + } + + /** + * DOCUMENT ME! + * + * @param DOCUMENT ME! + * @param aInterface DOCUMENT ME! + * @param aType DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + @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.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) { - 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; + } else { + return providedIntf.getImplementation(aType); + } + } }