From: Adrian B. <adr...@jb...> - 2006-07-10 12:48:35
|
User: adrian Date: 06/07/10 08:18:48 Modified: src/main/org/jboss/metadata/plugins/context AbstractMetaDataContext.java Log: [JBMICROCONT-70] - Scoped metadata and basic repository Revision Changes Path 1.2 +48 -2 container/src/main/org/jboss/metadata/plugins/context/AbstractMetaDataContext.java (In the diff below, changes in quantity of whitespace are not shown.) Index: AbstractMetaDataContext.java =================================================================== RCS file: /cvsroot/jboss/container/src/main/org/jboss/metadata/plugins/context/AbstractMetaDataContext.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -b -r1.1 -r1.2 --- AbstractMetaDataContext.java 22 Jun 2006 14:57:30 -0000 1.1 +++ AbstractMetaDataContext.java 10 Jul 2006 12:18:48 -0000 1.2 @@ -23,6 +23,7 @@ import java.lang.annotation.Annotation; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -36,12 +37,14 @@ import org.jboss.metadata.spi.retrieval.ValidTime; import org.jboss.metadata.spi.retrieval.cummulative.CummulativeAnnotationsItem; import org.jboss.metadata.spi.retrieval.cummulative.CummulativeMetaDatasItem; +import org.jboss.metadata.spi.scope.Scope; +import org.jboss.metadata.spi.scope.ScopeKey; /** * AbstractMetaDataContext. * * @author <a href="ad...@jb...">Adrian Brock</a> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class AbstractMetaDataContext implements MetaDataContext { @@ -51,6 +54,9 @@ /** The parent context */ private MetaDataContext parent; + /** The scope */ + private volatile ScopeKey scopeKey; + /** * Create a new AbstractMetaDataContext. * @@ -94,6 +100,23 @@ this.retrievals = retrievals; } + public ScopeKey getScope() + { + if (scopeKey == null) + { + ScopeKey key = new ScopeKey(); + for (MetaDataRetrieval retrieval : getRetrievals()) + { + ScopeKey retrievalKey = retrieval.getScope(); + Collection<Scope> scopes = retrievalKey.getScopes(); + for (Scope scope : scopes) + key.addScope(scope); + } + scopeKey = key; + } + return scopeKey; + } + public ValidTime getValidTime() { ValidTime result = null; @@ -120,6 +143,11 @@ return result; } + public MetaDataContext getParent() + { + return parent; + } + public List<MetaDataRetrieval> getRetrievals() { if (parent == null) @@ -130,6 +158,11 @@ return result; } + public List<MetaDataRetrieval> getLocalRetrievals() + { + return retrievals; + } + public void append(MetaDataRetrieval retrieval) { if (retrieval == null) @@ -139,6 +172,7 @@ retrievals = new CopyOnWriteArrayList<MetaDataRetrieval>(retrievals); retrievals.add(retrieval); + scopeKey = null; } public void prepend(MetaDataRetrieval retrieval) @@ -150,6 +184,7 @@ retrievals = new CopyOnWriteArrayList<MetaDataRetrieval>(retrievals); retrievals.add(0, retrieval); + scopeKey = null; } public void remove(MetaDataRetrieval retrieval) @@ -161,11 +196,17 @@ throw new IllegalStateException("Must have at least one retrieval"); retrievals.remove(retrieval); + scopeKey = null; } public AnnotationsItem retrieveAnnotations() { - return new CummulativeAnnotationsItem(this); + return new CummulativeAnnotationsItem(this, true); + } + + public AnnotationsItem retrieveLocalAnnotations() + { + return new CummulativeAnnotationsItem(this, false); } public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType) @@ -186,7 +227,12 @@ public MetaDatasItem retrieveMetaData() { - return new CummulativeMetaDatasItem(this); + return new CummulativeMetaDatasItem(this, true); + } + + public MetaDatasItem retrieveLocalMetaData() + { + return new CummulativeMetaDatasItem(this, false); } public <T> MetaDataItem<T> retrieveMetaData(Class<T> type) |