Commit 782fd5e310564b778ed457787d318fba08e491e4
1 parent
e5a94074
Exists in
master
Refatoração dos contextos customizados
Showing
12 changed files
with
193 additions
and
317 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
| @@ -59,7 +59,7 @@ import br.gov.frameworkdemoiselle.DemoiselleException; | @@ -59,7 +59,7 @@ import br.gov.frameworkdemoiselle.DemoiselleException; | ||
| 59 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; | 59 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
| 60 | import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; | 60 | import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; |
| 61 | import br.gov.frameworkdemoiselle.internal.context.Contexts; | 61 | import br.gov.frameworkdemoiselle.internal.context.Contexts; |
| 62 | -import br.gov.frameworkdemoiselle.internal.context.CustomContext; | 62 | +import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; |
| 63 | import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 63 | import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; |
| 64 | import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; | 64 | import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; |
| 65 | import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; | 65 | import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; |
| @@ -74,7 +74,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -74,7 +74,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
| 74 | private List<AnnotatedMethodProcessor> processors = Collections | 74 | private List<AnnotatedMethodProcessor> processors = Collections |
| 75 | .synchronizedList(new ArrayList<AnnotatedMethodProcessor>()); | 75 | .synchronizedList(new ArrayList<AnnotatedMethodProcessor>()); |
| 76 | 76 | ||
| 77 | - private List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | 77 | + private List<AbstractCustomContext> tempContexts = new ArrayList<AbstractCustomContext>(); |
| 78 | 78 | ||
| 79 | private AfterBeanDiscovery afterBeanDiscoveryEvent; | 79 | private AfterBeanDiscovery afterBeanDiscoveryEvent; |
| 80 | 80 | ||
| @@ -134,7 +134,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -134,7 +134,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
| 134 | Exception failure = null; | 134 | Exception failure = null; |
| 135 | 135 | ||
| 136 | if (!registered) { | 136 | if (!registered) { |
| 137 | - for (CustomContext tempContext : tempContexts) { | 137 | + for (AbstractCustomContext tempContext : tempContexts) { |
| 138 | Contexts.add(tempContext, afterBeanDiscoveryEvent); | 138 | Contexts.add(tempContext, afterBeanDiscoveryEvent); |
| 139 | } | 139 | } |
| 140 | 140 | ||
| @@ -168,7 +168,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -168,7 +168,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
| 168 | } | 168 | } |
| 169 | 169 | ||
| 170 | private void unloadTempContexts() { | 170 | private void unloadTempContexts() { |
| 171 | - for (CustomContext tempContext : tempContexts) { | 171 | + for (AbstractCustomContext tempContext : tempContexts) { |
| 172 | Contexts.remove(tempContext); | 172 | Contexts.remove(tempContext); |
| 173 | } | 173 | } |
| 174 | } | 174 | } |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java
0 → 100644
| @@ -0,0 +1,135 @@ | @@ -0,0 +1,135 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | + | ||
| 39 | +import java.lang.annotation.Annotation; | ||
| 40 | +import java.util.Collections; | ||
| 41 | +import java.util.HashMap; | ||
| 42 | +import java.util.Map; | ||
| 43 | + | ||
| 44 | +import javax.enterprise.context.ContextNotActiveException; | ||
| 45 | +import javax.enterprise.context.spi.Context; | ||
| 46 | +import javax.enterprise.context.spi.Contextual; | ||
| 47 | +import javax.enterprise.context.spi.CreationalContext; | ||
| 48 | +import javax.enterprise.inject.spi.Bean; | ||
| 49 | + | ||
| 50 | +public abstract class AbstractCustomContext implements Context { | ||
| 51 | + | ||
| 52 | + private boolean active; | ||
| 53 | + | ||
| 54 | + private final Class<? extends Annotation> scope; | ||
| 55 | + | ||
| 56 | + public AbstractCustomContext(final Class<? extends Annotation> scope, boolean active) { | ||
| 57 | + this.scope = scope; | ||
| 58 | + this.active = active; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + protected abstract Store getStore(); | ||
| 62 | + | ||
| 63 | + @Override | ||
| 64 | + public <T> T get(final Contextual<T> contextual) { | ||
| 65 | + return get(contextual, null); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @Override | ||
| 69 | + @SuppressWarnings("unchecked") | ||
| 70 | + public <T> T get(final Contextual<T> contextual, final CreationalContext<T> creationalContext) { | ||
| 71 | + T instance = null; | ||
| 72 | + | ||
| 73 | + if (!isActive()) { | ||
| 74 | + throw new ContextNotActiveException(); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + Class<?> type = getType(contextual); | ||
| 78 | + if (getStore().contains(type)) { | ||
| 79 | + instance = (T) getStore().get(type); | ||
| 80 | + | ||
| 81 | + } else if (creationalContext != null) { | ||
| 82 | + instance = contextual.create(creationalContext); | ||
| 83 | + getStore().put(type, instance); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + return instance; | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + private <T> Class<?> getType(final Contextual<T> contextual) { | ||
| 90 | + Bean<T> bean = (Bean<T>) contextual; | ||
| 91 | + return bean.getBeanClass(); | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + @Override | ||
| 95 | + public boolean isActive() { | ||
| 96 | + return this.active; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + public void setActive(final boolean active) { | ||
| 100 | + this.active = active; | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + @Override | ||
| 104 | + public Class<? extends Annotation> getScope() { | ||
| 105 | + return this.scope; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + static class Store { | ||
| 109 | + | ||
| 110 | + private Map<ClassLoader, Map<Class<?>, Object>> cache = Collections | ||
| 111 | + .synchronizedMap(new HashMap<ClassLoader, Map<Class<?>, Object>>()); | ||
| 112 | + | ||
| 113 | + public boolean contains(final Class<?> type) { | ||
| 114 | + return this.getMap().containsKey(type); | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + public Object get(final Class<?> type) { | ||
| 118 | + return this.getMap().get(type); | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + public void put(final Class<?> type, final Object instance) { | ||
| 122 | + this.getMap().put(type, instance); | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + private Map<Class<?>, Object> getMap() { | ||
| 126 | + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); | ||
| 127 | + | ||
| 128 | + if (!cache.containsKey(classLoader)) { | ||
| 129 | + cache.put(classLoader, Collections.synchronizedMap(new HashMap<Class<?>, Object>())); | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + return cache.get(classLoader); | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextStore.java
| @@ -1,57 +0,0 @@ | @@ -1,57 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | - | ||
| 39 | -import java.util.Map; | ||
| 40 | -import java.util.TreeMap; | ||
| 41 | - | ||
| 42 | -public class ContextStore { | ||
| 43 | - | ||
| 44 | - private Map<String, Object> map = new TreeMap<String, Object>(); | ||
| 45 | - | ||
| 46 | - public boolean contains(final String name) { | ||
| 47 | - return this.map.containsKey(name); | ||
| 48 | - } | ||
| 49 | - | ||
| 50 | - public Object get(final String name) { | ||
| 51 | - return this.map.get(name); | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - public void put(final String name, final Object instance) { | ||
| 55 | - this.map.put(name, instance); | ||
| 56 | - } | ||
| 57 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java
| @@ -52,9 +52,9 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle; | @@ -52,9 +52,9 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle; | ||
| 52 | 52 | ||
| 53 | public final class Contexts { | 53 | public final class Contexts { |
| 54 | 54 | ||
| 55 | - private static List<CustomContext> activeContexts = Collections.synchronizedList(new ArrayList<CustomContext>()); | 55 | + private static List<AbstractCustomContext> activeContexts = Collections.synchronizedList(new ArrayList<AbstractCustomContext>()); |
| 56 | 56 | ||
| 57 | - private static List<CustomContext> inactiveContexts = Collections.synchronizedList(new ArrayList<CustomContext>()); | 57 | + private static List<AbstractCustomContext> inactiveContexts = Collections.synchronizedList(new ArrayList<AbstractCustomContext>()); |
| 58 | 58 | ||
| 59 | private static Logger logger; | 59 | private static Logger logger; |
| 60 | 60 | ||
| @@ -79,7 +79,7 @@ public final class Contexts { | @@ -79,7 +79,7 @@ public final class Contexts { | ||
| 79 | return bundle; | 79 | return bundle; |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | - public static synchronized void add(CustomContext context, AfterBeanDiscovery event) { | 82 | + public static synchronized void add(AbstractCustomContext context, AfterBeanDiscovery event) { |
| 83 | Class<? extends Annotation> scope = context.getScope(); | 83 | Class<? extends Annotation> scope = context.getScope(); |
| 84 | 84 | ||
| 85 | getLogger() | 85 | getLogger() |
| @@ -99,10 +99,10 @@ public final class Contexts { | @@ -99,10 +99,10 @@ public final class Contexts { | ||
| 99 | } | 99 | } |
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | - private static CustomContext get(Class<? extends Annotation> scope, List<CustomContext> contexts) { | ||
| 103 | - CustomContext result = null; | 102 | + private static AbstractCustomContext get(Class<? extends Annotation> scope, List<AbstractCustomContext> contexts) { |
| 103 | + AbstractCustomContext result = null; | ||
| 104 | 104 | ||
| 105 | - for (CustomContext context : contexts) { | 105 | + for (AbstractCustomContext context : contexts) { |
| 106 | if (scope.equals(context.getScope())) { | 106 | if (scope.equals(context.getScope())) { |
| 107 | result = context; | 107 | result = context; |
| 108 | break; | 108 | break; |
| @@ -112,7 +112,7 @@ public final class Contexts { | @@ -112,7 +112,7 @@ public final class Contexts { | ||
| 112 | return result; | 112 | return result; |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | - public static synchronized void remove(CustomContext context) { | 115 | + public static synchronized void remove(AbstractCustomContext context) { |
| 116 | getLogger().trace( | 116 | getLogger().trace( |
| 117 | getBundle().getString("custom-context-was-unregistered", context.getScope().getCanonicalName())); | 117 | getBundle().getString("custom-context-was-unregistered", context.getScope().getCanonicalName())); |
| 118 | 118 | ||
| @@ -120,7 +120,7 @@ public final class Contexts { | @@ -120,7 +120,7 @@ public final class Contexts { | ||
| 120 | activeContexts.remove(context); | 120 | activeContexts.remove(context); |
| 121 | context.setActive(false); | 121 | context.setActive(false); |
| 122 | 122 | ||
| 123 | - CustomContext inactive = get(context.getScope(), inactiveContexts); | 123 | + AbstractCustomContext inactive = get(context.getScope(), inactiveContexts); |
| 124 | if (inactive != null) { | 124 | if (inactive != null) { |
| 125 | activeContexts.add(inactive); | 125 | activeContexts.add(inactive); |
| 126 | inactive.setActive(true); | 126 | inactive.setActive(true); |
| @@ -133,8 +133,8 @@ public final class Contexts { | @@ -133,8 +133,8 @@ public final class Contexts { | ||
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | public static synchronized void clear() { | 135 | public static synchronized void clear() { |
| 136 | - CustomContext context; | ||
| 137 | - for (Iterator<CustomContext> iter = activeContexts.iterator(); iter.hasNext();) { | 136 | + AbstractCustomContext context; |
| 137 | + for (Iterator<AbstractCustomContext> iter = activeContexts.iterator(); iter.hasNext();) { | ||
| 138 | context = iter.next(); | 138 | context = iter.next(); |
| 139 | context.setActive(false); | 139 | context.setActive(false); |
| 140 | iter.remove(); | 140 | iter.remove(); |
| @@ -144,11 +144,11 @@ public final class Contexts { | @@ -144,11 +144,11 @@ public final class Contexts { | ||
| 144 | inactiveContexts.clear(); | 144 | inactiveContexts.clear(); |
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | - public static synchronized List<CustomContext> getActiveContexts() { | 147 | + public static synchronized List<AbstractCustomContext> getActiveContexts() { |
| 148 | return activeContexts; | 148 | return activeContexts; |
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | - public static synchronized List<CustomContext> getInactiveContexts() { | 151 | + public static synchronized List<AbstractCustomContext> getInactiveContexts() { |
| 152 | return inactiveContexts; | 152 | return inactiveContexts; |
| 153 | } | 153 | } |
| 154 | } | 154 | } |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java
| @@ -1,45 +0,0 @@ | @@ -1,45 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | - | ||
| 39 | -import javax.enterprise.context.spi.Context; | ||
| 40 | - | ||
| 41 | -public interface CustomContext extends Context { | ||
| 42 | - | ||
| 43 | - void setActive(boolean b); | ||
| 44 | - | ||
| 45 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java
| @@ -48,84 +48,18 @@ | @@ -48,84 +48,18 @@ | ||
| 48 | */ | 48 | */ |
| 49 | package br.gov.frameworkdemoiselle.internal.context; | 49 | package br.gov.frameworkdemoiselle.internal.context; |
| 50 | 50 | ||
| 51 | -import java.lang.annotation.Annotation; | ||
| 52 | - | ||
| 53 | -import javax.enterprise.context.ContextNotActiveException; | ||
| 54 | -import javax.enterprise.context.spi.Contextual; | ||
| 55 | -import javax.enterprise.context.spi.CreationalContext; | ||
| 56 | -import javax.enterprise.inject.spi.Bean; | ||
| 57 | - | ||
| 58 | import br.gov.frameworkdemoiselle.annotation.StaticScoped; | 51 | import br.gov.frameworkdemoiselle.annotation.StaticScoped; |
| 59 | 52 | ||
| 60 | -public class StaticContext implements CustomContext { | ||
| 61 | - | ||
| 62 | - private final static ContextStore store = new ContextStore(); | ||
| 63 | - | ||
| 64 | - // private final Map<Class<?>, Object> cache = Collections.synchronizedMap(new HashMap<Class<?>, Object>()); | 53 | +public class StaticContext extends AbstractCustomContext { |
| 65 | 54 | ||
| 66 | - private boolean active; | ||
| 67 | - | ||
| 68 | - private final Class<? extends Annotation> scope; | ||
| 69 | - | ||
| 70 | - public StaticContext(final Class<? extends Annotation> scope) { | ||
| 71 | - this(scope, true); | ||
| 72 | - } | 55 | + private final static Store store = new Store(); |
| 73 | 56 | ||
| 74 | public StaticContext() { | 57 | public StaticContext() { |
| 75 | - this(StaticScoped.class, true); | ||
| 76 | - } | ||
| 77 | - | ||
| 78 | - public StaticContext(final Class<? extends Annotation> scope, boolean active) { | ||
| 79 | - this.scope = scope; | ||
| 80 | - this.active = active; | ||
| 81 | - } | ||
| 82 | - | ||
| 83 | - @Override | ||
| 84 | - public <T> T get(final Contextual<T> contextual) { | ||
| 85 | - return get(contextual, null); | ||
| 86 | - } | ||
| 87 | - | ||
| 88 | - @Override | ||
| 89 | - @SuppressWarnings("unchecked") | ||
| 90 | - public <T> T get(final Contextual<T> contextual, final CreationalContext<T> creationalContext) { | ||
| 91 | - T instance = null; | ||
| 92 | - | ||
| 93 | - if (!isActive()) { | ||
| 94 | - throw new ContextNotActiveException(); | ||
| 95 | - } | ||
| 96 | - | ||
| 97 | - String id = getId(contextual); | ||
| 98 | - if (getStore().contains(id)) { | ||
| 99 | - instance = (T) getStore().get(id); | ||
| 100 | - | ||
| 101 | - } else if (creationalContext != null) { | ||
| 102 | - instance = contextual.create(creationalContext); | ||
| 103 | - getStore().put(id, instance); | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - return instance; | ||
| 107 | - } | ||
| 108 | - | ||
| 109 | - private <T> String getId(final Contextual<T> contextual) { | ||
| 110 | - Bean<T> bean = (Bean<T>) contextual; | ||
| 111 | - return bean.getBeanClass().getCanonicalName(); | 58 | + super(StaticScoped.class, true); |
| 112 | } | 59 | } |
| 113 | 60 | ||
| 114 | @Override | 61 | @Override |
| 115 | - public Class<? extends Annotation> getScope() { | ||
| 116 | - return this.scope; | ||
| 117 | - } | ||
| 118 | - | ||
| 119 | - private ContextStore getStore() { | 62 | + protected Store getStore() { |
| 120 | return store; | 63 | return store; |
| 121 | } | 64 | } |
| 122 | - | ||
| 123 | - @Override | ||
| 124 | - public boolean isActive() { | ||
| 125 | - return this.active; | ||
| 126 | - } | ||
| 127 | - | ||
| 128 | - public void setActive(final boolean active) { | ||
| 129 | - this.active = active; | ||
| 130 | - } | ||
| 131 | } | 65 | } |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java
| @@ -50,81 +50,24 @@ package br.gov.frameworkdemoiselle.internal.context; | @@ -50,81 +50,24 @@ package br.gov.frameworkdemoiselle.internal.context; | ||
| 50 | 50 | ||
| 51 | import java.lang.annotation.Annotation; | 51 | import java.lang.annotation.Annotation; |
| 52 | 52 | ||
| 53 | -import javax.enterprise.context.ContextNotActiveException; | ||
| 54 | -import javax.enterprise.context.spi.Contextual; | ||
| 55 | -import javax.enterprise.context.spi.CreationalContext; | ||
| 56 | -import javax.enterprise.inject.spi.Bean; | 53 | +public class ThreadLocalContext extends AbstractCustomContext { |
| 57 | 54 | ||
| 58 | -public class ThreadLocalContext implements CustomContext { | ||
| 59 | - | ||
| 60 | - private final ThreadLocal<ContextStore> threadLocal = new ThreadLocal<ContextStore>(); | ||
| 61 | - | ||
| 62 | - private boolean active; | ||
| 63 | - | ||
| 64 | - private final Class<? extends Annotation> scope; | 55 | + private final ThreadLocal<Store> threadLocal = new ThreadLocal<Store>(); |
| 65 | 56 | ||
| 66 | public ThreadLocalContext(final Class<? extends Annotation> scope) { | 57 | public ThreadLocalContext(final Class<? extends Annotation> scope) { |
| 67 | - this(scope, true); | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - public ThreadLocalContext(final Class<? extends Annotation> scope, | ||
| 71 | - boolean active) { | ||
| 72 | - this.scope = scope; | ||
| 73 | - this.active = active; | ||
| 74 | - } | ||
| 75 | - | ||
| 76 | - @Override | ||
| 77 | - public <T> T get(final Contextual<T> contextual) { | ||
| 78 | - return get(contextual, null); | ||
| 79 | - } | ||
| 80 | - | ||
| 81 | - @Override | ||
| 82 | - @SuppressWarnings("unchecked") | ||
| 83 | - public <T> T get(final Contextual<T> contextual, | ||
| 84 | - final CreationalContext<T> creationalContext) { | ||
| 85 | - T instance = null; | ||
| 86 | - | ||
| 87 | - if (!isActive()) { | ||
| 88 | - throw new ContextNotActiveException(); | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | - String id = getId(contextual); | ||
| 92 | - if (getStore().contains(id)) { | ||
| 93 | - instance = (T) getStore().get(id); | ||
| 94 | - | ||
| 95 | - } else if (creationalContext != null) { | ||
| 96 | - instance = contextual.create(creationalContext); | ||
| 97 | - getStore().put(id, instance); | ||
| 98 | - } | ||
| 99 | - | ||
| 100 | - return instance; | 58 | + super(scope, true); |
| 101 | } | 59 | } |
| 102 | 60 | ||
| 103 | - private <T> String getId(final Contextual<T> contextual) { | ||
| 104 | - Bean<T> bean = (Bean<T>) contextual; | ||
| 105 | - return bean.getBeanClass().getCanonicalName(); | ||
| 106 | - } | 61 | +// public ThreadLocalContext(final Class<? extends Annotation> scope, boolean active) { |
| 62 | +// super(scope, active); | ||
| 63 | +// } | ||
| 107 | 64 | ||
| 108 | @Override | 65 | @Override |
| 109 | - public Class<? extends Annotation> getScope() { | ||
| 110 | - return this.scope; | ||
| 111 | - } | ||
| 112 | - | ||
| 113 | - private ContextStore getStore() { | 66 | + protected Store getStore() { |
| 114 | if (this.threadLocal.get() == null) { | 67 | if (this.threadLocal.get() == null) { |
| 115 | - this.threadLocal.set(new ContextStore()); | 68 | + this.threadLocal.set(new Store()); |
| 116 | } | 69 | } |
| 117 | 70 | ||
| 118 | return this.threadLocal.get(); | 71 | return this.threadLocal.get(); |
| 119 | } | 72 | } |
| 120 | - | ||
| 121 | - @Override | ||
| 122 | - public boolean isActive() { | ||
| 123 | - return this.active; | ||
| 124 | - } | ||
| 125 | - | ||
| 126 | - public void setActive(final boolean active) { | ||
| 127 | - this.active = active; | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | } | 73 | } |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java
| @@ -44,14 +44,14 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery; | @@ -44,14 +44,14 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 44 | import javax.enterprise.inject.spi.AfterDeploymentValidation; | 44 | import javax.enterprise.inject.spi.AfterDeploymentValidation; |
| 45 | import javax.enterprise.inject.spi.Extension; | 45 | import javax.enterprise.inject.spi.Extension; |
| 46 | 46 | ||
| 47 | +import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; | ||
| 47 | import br.gov.frameworkdemoiselle.internal.context.Contexts; | 48 | import br.gov.frameworkdemoiselle.internal.context.Contexts; |
| 48 | -import br.gov.frameworkdemoiselle.internal.context.CustomContext; | ||
| 49 | import br.gov.frameworkdemoiselle.internal.context.ViewContext; | 49 | import br.gov.frameworkdemoiselle.internal.context.ViewContext; |
| 50 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | 50 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 51 | 51 | ||
| 52 | public class JsfBootstrap implements Extension { | 52 | public class JsfBootstrap implements Extension { |
| 53 | 53 | ||
| 54 | - private List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | 54 | + private List<AbstractCustomContext> tempContexts = new ArrayList<AbstractCustomContext>(); |
| 55 | 55 | ||
| 56 | private AfterBeanDiscovery afterBeanDiscoveryEvent; | 56 | private AfterBeanDiscovery afterBeanDiscoveryEvent; |
| 57 | 57 | ||
| @@ -61,13 +61,13 @@ public class JsfBootstrap implements Extension { | @@ -61,13 +61,13 @@ public class JsfBootstrap implements Extension { | ||
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | public void addContexts(@Observes final AfterDeploymentValidation event) { | 63 | public void addContexts(@Observes final AfterDeploymentValidation event) { |
| 64 | - for (CustomContext tempContext : this.tempContexts) { | 64 | + for (AbstractCustomContext tempContext : this.tempContexts) { |
| 65 | Contexts.add(tempContext, this.afterBeanDiscoveryEvent); | 65 | Contexts.add(tempContext, this.afterBeanDiscoveryEvent); |
| 66 | } | 66 | } |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | public void removeContexts(@Observes AfterShutdownProccess event) { | 69 | public void removeContexts(@Observes AfterShutdownProccess event) { |
| 70 | - for (CustomContext tempContext : this.tempContexts) { | 70 | + for (AbstractCustomContext tempContext : this.tempContexts) { |
| 71 | Contexts.remove(tempContext); | 71 | Contexts.remove(tempContext); |
| 72 | } | 72 | } |
| 73 | } | 73 | } |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java
| @@ -36,60 +36,26 @@ | @@ -36,60 +36,26 @@ | ||
| 36 | */ | 36 | */ |
| 37 | package br.gov.frameworkdemoiselle.internal.context; | 37 | package br.gov.frameworkdemoiselle.internal.context; |
| 38 | 38 | ||
| 39 | -import java.lang.annotation.Annotation; | ||
| 40 | import java.util.Map; | 39 | import java.util.Map; |
| 41 | 40 | ||
| 42 | -import javax.enterprise.context.spi.Contextual; | ||
| 43 | -import javax.enterprise.context.spi.CreationalContext; | ||
| 44 | -import javax.enterprise.inject.spi.Bean; | ||
| 45 | - | ||
| 46 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; | 41 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
| 47 | import br.gov.frameworkdemoiselle.util.Faces; | 42 | import br.gov.frameworkdemoiselle.util.Faces; |
| 48 | 43 | ||
| 49 | -public class ViewContext implements CustomContext { | ||
| 50 | - | ||
| 51 | - private boolean active; | 44 | +public class ViewContext extends AbstractCustomContext { |
| 52 | 45 | ||
| 53 | public ViewContext() { | 46 | public ViewContext() { |
| 54 | - this.active = true; | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | - @Override | ||
| 58 | - public <T> T get(final Contextual<T> contextual) { | ||
| 59 | - return get(contextual, null); | 47 | + super(ViewScoped.class, true); |
| 60 | } | 48 | } |
| 61 | 49 | ||
| 62 | @Override | 50 | @Override |
| 63 | - @SuppressWarnings("unchecked") | ||
| 64 | - public <T> T get(final Contextual<T> contextual, final CreationalContext<T> creationalContext) { | ||
| 65 | - T instance = null; | ||
| 66 | - | ||
| 67 | - Bean<T> bean = (Bean<T>) contextual; | 51 | + protected Store getStore() { |
| 68 | Map<String, Object> viewMap = Faces.getViewMap(); | 52 | Map<String, Object> viewMap = Faces.getViewMap(); |
| 53 | + String key = Store.class.getName(); | ||
| 69 | 54 | ||
| 70 | - if (viewMap.containsKey(bean.getName())) { | ||
| 71 | - instance = (T) viewMap.get(bean.getName()); | ||
| 72 | - | ||
| 73 | - } else if (creationalContext != null) { | ||
| 74 | - instance = bean.create(creationalContext); | ||
| 75 | - viewMap.put(bean.getName(), instance); | 55 | + if (!viewMap.containsKey(key)) { |
| 56 | + viewMap.put(key, new Store()); | ||
| 76 | } | 57 | } |
| 77 | 58 | ||
| 78 | - return instance; | ||
| 79 | - } | ||
| 80 | - | ||
| 81 | - @Override | ||
| 82 | - public Class<? extends Annotation> getScope() { | ||
| 83 | - return ViewScoped.class; | ||
| 84 | - } | ||
| 85 | - | ||
| 86 | - @Override | ||
| 87 | - public boolean isActive() { | ||
| 88 | - return this.active; | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | - @Override | ||
| 92 | - public void setActive(boolean active) { | ||
| 93 | - this.active = active; | 59 | + return (Store) viewMap.get(key); |
| 94 | } | 60 | } |
| 95 | } | 61 | } |
impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrapTest.java
| @@ -58,8 +58,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; | @@ -58,8 +58,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; | ||
| 58 | import org.powermock.modules.junit4.PowerMockRunner; | 58 | import org.powermock.modules.junit4.PowerMockRunner; |
| 59 | import org.powermock.reflect.Whitebox; | 59 | import org.powermock.reflect.Whitebox; |
| 60 | 60 | ||
| 61 | +import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; | ||
| 61 | import br.gov.frameworkdemoiselle.internal.context.Contexts; | 62 | import br.gov.frameworkdemoiselle.internal.context.Contexts; |
| 62 | -import br.gov.frameworkdemoiselle.internal.context.CustomContext; | ||
| 63 | import br.gov.frameworkdemoiselle.internal.context.ViewContext; | 63 | import br.gov.frameworkdemoiselle.internal.context.ViewContext; |
| 64 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | 64 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 65 | import br.gov.frameworkdemoiselle.util.Beans; | 65 | import br.gov.frameworkdemoiselle.util.Beans; |
| @@ -85,17 +85,17 @@ public class JsfBootstrapTest { | @@ -85,17 +85,17 @@ public class JsfBootstrapTest { | ||
| 85 | public void testStoreContexts() { | 85 | public void testStoreContexts() { |
| 86 | bootstrap.storeContexts(event); | 86 | bootstrap.storeContexts(event); |
| 87 | replay(event); | 87 | replay(event); |
| 88 | - | 88 | + |
| 89 | Assert.assertEquals(event, Whitebox.getInternalState(bootstrap, "afterBeanDiscoveryEvent")); | 89 | Assert.assertEquals(event, Whitebox.getInternalState(bootstrap, "afterBeanDiscoveryEvent")); |
| 90 | - List<CustomContext> context = Whitebox.getInternalState(bootstrap, "tempContexts"); | 90 | + List<AbstractCustomContext> context = Whitebox.getInternalState(bootstrap, "tempContexts"); |
| 91 | Assert.assertEquals(1, context.size()); | 91 | Assert.assertEquals(1, context.size()); |
| 92 | verifyAll(); | 92 | verifyAll(); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | @Test | 95 | @Test |
| 96 | public void testAddContexts() { | 96 | public void testAddContexts() { |
| 97 | - List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | ||
| 98 | - CustomContext tempContext = new ViewContext(); | 97 | + List<AbstractCustomContext> tempContexts = new ArrayList<AbstractCustomContext>(); |
| 98 | + AbstractCustomContext tempContext = new ViewContext(); | ||
| 99 | tempContexts.add(tempContext); | 99 | tempContexts.add(tempContext); |
| 100 | Whitebox.setInternalState(bootstrap, "tempContexts", tempContexts); | 100 | Whitebox.setInternalState(bootstrap, "tempContexts", tempContexts); |
| 101 | Whitebox.setInternalState(bootstrap, "afterBeanDiscoveryEvent", event); | 101 | Whitebox.setInternalState(bootstrap, "afterBeanDiscoveryEvent", event); |
| @@ -113,7 +113,7 @@ public class JsfBootstrapTest { | @@ -113,7 +113,7 @@ public class JsfBootstrapTest { | ||
| 113 | @Test | 113 | @Test |
| 114 | public void testRemoveContexts() { | 114 | public void testRemoveContexts() { |
| 115 | bootstrap.storeContexts(event); | 115 | bootstrap.storeContexts(event); |
| 116 | - | 116 | + |
| 117 | AfterShutdownProccess afterShutdownProccess = createMock(AfterShutdownProccess.class); | 117 | AfterShutdownProccess afterShutdownProccess = createMock(AfterShutdownProccess.class); |
| 118 | replay(event, afterShutdownProccess); | 118 | replay(event, afterShutdownProccess); |
| 119 | bootstrap.removeContexts(afterShutdownProccess); | 119 | bootstrap.removeContexts(afterShutdownProccess); |
impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java
| @@ -49,13 +49,13 @@ import javax.enterprise.inject.spi.Extension; | @@ -49,13 +49,13 @@ import javax.enterprise.inject.spi.Extension; | ||
| 49 | 49 | ||
| 50 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; | 50 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
| 51 | import br.gov.frameworkdemoiselle.internal.context.Contexts; | 51 | import br.gov.frameworkdemoiselle.internal.context.Contexts; |
| 52 | -import br.gov.frameworkdemoiselle.internal.context.CustomContext; | 52 | +import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; |
| 53 | import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 53 | import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; |
| 54 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | 54 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 55 | 55 | ||
| 56 | public class SeBootstrap implements Extension { | 56 | public class SeBootstrap implements Extension { |
| 57 | 57 | ||
| 58 | - private List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | 58 | + private List<AbstractCustomContext> tempContexts = new ArrayList<AbstractCustomContext>(); |
| 59 | 59 | ||
| 60 | private AfterBeanDiscovery afterBeanDiscoveryEvent; | 60 | private AfterBeanDiscovery afterBeanDiscoveryEvent; |
| 61 | 61 | ||
| @@ -69,13 +69,13 @@ public class SeBootstrap implements Extension { | @@ -69,13 +69,13 @@ public class SeBootstrap implements Extension { | ||
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | public void addContexts(@Observes final AfterDeploymentValidation event) { | 71 | public void addContexts(@Observes final AfterDeploymentValidation event) { |
| 72 | - for (CustomContext tempContext : this.tempContexts) { | 72 | + for (AbstractCustomContext tempContext : this.tempContexts) { |
| 73 | Contexts.add(tempContext, this.afterBeanDiscoveryEvent); | 73 | Contexts.add(tempContext, this.afterBeanDiscoveryEvent); |
| 74 | } | 74 | } |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | public void removeContexts(@Observes AfterShutdownProccess event) { | 77 | public void removeContexts(@Observes AfterShutdownProccess event) { |
| 78 | - for (CustomContext tempContext : this.tempContexts) { | 78 | + for (AbstractCustomContext tempContext : this.tempContexts) { |
| 79 | Contexts.remove(tempContext); | 79 | Contexts.remove(tempContext); |
| 80 | } | 80 | } |
| 81 | } | 81 | } |
impl/extension/se/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrapTest.java
| @@ -56,19 +56,19 @@ import org.powermock.core.classloader.annotations.PrepareForTest; | @@ -56,19 +56,19 @@ import org.powermock.core.classloader.annotations.PrepareForTest; | ||
| 56 | import org.powermock.modules.junit4.PowerMockRunner; | 56 | import org.powermock.modules.junit4.PowerMockRunner; |
| 57 | import org.powermock.reflect.Whitebox; | 57 | import org.powermock.reflect.Whitebox; |
| 58 | 58 | ||
| 59 | +import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; | ||
| 59 | import br.gov.frameworkdemoiselle.internal.context.Contexts; | 60 | import br.gov.frameworkdemoiselle.internal.context.Contexts; |
| 60 | -import br.gov.frameworkdemoiselle.internal.context.CustomContext; | ||
| 61 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | 61 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 62 | import br.gov.frameworkdemoiselle.util.Beans; | 62 | import br.gov.frameworkdemoiselle.util.Beans; |
| 63 | 63 | ||
| 64 | @RunWith(PowerMockRunner.class) | 64 | @RunWith(PowerMockRunner.class) |
| 65 | @PrepareForTest({ Beans.class, Contexts.class }) | 65 | @PrepareForTest({ Beans.class, Contexts.class }) |
| 66 | public class SeBootstrapTest { | 66 | public class SeBootstrapTest { |
| 67 | - | 67 | + |
| 68 | private SeBootstrap seBootstrap; | 68 | private SeBootstrap seBootstrap; |
| 69 | - | 69 | + |
| 70 | private AfterBeanDiscovery event; | 70 | private AfterBeanDiscovery event; |
| 71 | - | 71 | + |
| 72 | @Before | 72 | @Before |
| 73 | public void before() { | 73 | public void before() { |
| 74 | event = createMock(AfterBeanDiscovery.class); | 74 | event = createMock(AfterBeanDiscovery.class); |
| @@ -77,22 +77,22 @@ public class SeBootstrapTest { | @@ -77,22 +77,22 @@ public class SeBootstrapTest { | ||
| 77 | replay(Beans.class); | 77 | replay(Beans.class); |
| 78 | seBootstrap = new SeBootstrap(); | 78 | seBootstrap = new SeBootstrap(); |
| 79 | } | 79 | } |
| 80 | - | 80 | + |
| 81 | @Test | 81 | @Test |
| 82 | public void testStoreContext() { | 82 | public void testStoreContext() { |
| 83 | seBootstrap.storeContexts(event); | 83 | seBootstrap.storeContexts(event); |
| 84 | replay(event); | 84 | replay(event); |
| 85 | - | 85 | + |
| 86 | Assert.assertEquals(event, Whitebox.getInternalState(seBootstrap, "afterBeanDiscoveryEvent")); | 86 | Assert.assertEquals(event, Whitebox.getInternalState(seBootstrap, "afterBeanDiscoveryEvent")); |
| 87 | - List<CustomContext> context = Whitebox.getInternalState(seBootstrap, "tempContexts"); | 87 | + List<AbstractCustomContext> context = Whitebox.getInternalState(seBootstrap, "tempContexts"); |
| 88 | Assert.assertEquals(4, context.size()); | 88 | Assert.assertEquals(4, context.size()); |
| 89 | verifyAll(); | 89 | verifyAll(); |
| 90 | } | 90 | } |
| 91 | - | 91 | + |
| 92 | @Test | 92 | @Test |
| 93 | public void testRemoveContexts() { | 93 | public void testRemoveContexts() { |
| 94 | seBootstrap.storeContexts(event); | 94 | seBootstrap.storeContexts(event); |
| 95 | - | 95 | + |
| 96 | AfterShutdownProccess afterShutdownProccess = createMock(AfterShutdownProccess.class); | 96 | AfterShutdownProccess afterShutdownProccess = createMock(AfterShutdownProccess.class); |
| 97 | replay(event, afterShutdownProccess); | 97 | replay(event, afterShutdownProccess); |
| 98 | seBootstrap.removeContexts(afterShutdownProccess); | 98 | seBootstrap.removeContexts(afterShutdownProccess); |