diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/BeanStore.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/BeanStore.java new file mode 100644 index 0000000..a7e96b0 --- /dev/null +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/BeanStore.java @@ -0,0 +1,47 @@ +package br.gov.frameworkdemoiselle.internal.context; + +import java.io.Serializable; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import javax.enterprise.context.spi.CreationalContext; + +public class BeanStore implements Iterable,Serializable { + + private static final long serialVersionUID = 1L; + + private Map instanceCache = Collections.synchronizedMap( new HashMap() ); + private Map> creationalCache = Collections.synchronizedMap( new HashMap>() );; + + public void put(String id, T instance,CreationalContext creationalContext){ + if (!instanceCache.containsKey(id)){ + instanceCache.put(id, instance); + creationalCache.put(id, creationalContext); + } + } + + public T getInstance(String id){ + return instanceCache.get(id); + } + + public CreationalContext getCreationalContext(String id){ + return creationalCache.get(id); + } + + public void clear(){ + instanceCache.clear(); + creationalCache.clear(); + } + + public boolean contains(String id){ + return instanceCache.containsKey(id); + } + + @Override + public Iterator iterator() { + return instanceCache.keySet().iterator(); + } + +} diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextualStore.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextualStore.java new file mode 100644 index 0000000..fe6d9dd --- /dev/null +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextualStore.java @@ -0,0 +1,52 @@ +package br.gov.frameworkdemoiselle.internal.context; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.enterprise.context.spi.Contextual; +import javax.enterprise.inject.spi.PassivationCapable; + + +public class ContextualStore implements Serializable { + + private static final long serialVersionUID = 1L; + + private static final String PREFIX = ContextualStore.class.getCanonicalName() + "#"; + + private AtomicInteger idGenerator = new AtomicInteger(); + + private HashMap> idToContextual = new HashMap>(); + + private HashMap, String> contextualToId = new HashMap, String>(); + + public String tryRegisterAndGetId(Contextual contextual){ + String returnedId; + + if (contextualToId.containsKey(contextual)){ + returnedId = contextualToId.get(contextual); + } + else if (contextual instanceof PassivationCapable){ + returnedId = ((PassivationCapable)contextual).getId(); + idToContextual.put(returnedId, contextual); + contextualToId.put(contextual, returnedId); + } + else{ + returnedId = PREFIX + idGenerator.addAndGet(1); + idToContextual.put(returnedId, contextual); + contextualToId.put(contextual, returnedId); + } + + return returnedId; + } + + public Contextual getContextual(String id){ + return idToContextual.get(id); + } + + public void clear(){ + idToContextual.clear(); + contextualToId.clear(); + } + +} -- libgit2 0.21.2