/* * Copyright (c) 2012, 2013, Werner Keil, Credit Suisse (Anatole Tresch). * * 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. See the * License for the specific language governing permissions and limitations under * the License. * * * Contributors: Anatole Tresch - initial version. */ package org.javamoney.cdi; import org.jboss.weld.environment.se.Weld; import org.jboss.weld.environment.se.WeldContainer; import javax.enterprise.inject.Instance; import javax.inject.Named; import java.lang.annotation.Annotation; import java.util.Set; /** * Small herlper class for starting CDI for testing. */ public final class SEContainer { private static boolean hookRegistered = false; private static Weld weld; private static WeldContainer weldContainer; public static <T> T getInstance(Class<T> instanceType, Annotation... qualifiers) { start(); return weldContainer.instance().select(instanceType, qualifiers).get(); } public static <T> Instance<T> getInstances(Class<T> instanceType, Annotation... qualifiers) { start(); return weldContainer.instance().select(instanceType, qualifiers); } public static Set<?> getInstances(String name) { start(); return weldContainer.getBeanManager().getBeans(name); } public static void fireEvent(Object evt, Annotation... qualifiers) { start(); weldContainer.getBeanManager().fireEvent(evt, qualifiers); } public static synchronized void start() { if (weld == null) { System.out.println("*** Starting CDIContainer ..."); weld = new Weld(); weldContainer = weld.initialize(); weldContainer.instance().select(WeldContainer.class).get(); if (!hookRegistered) { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { SEContainer.stop(); } }); hookRegistered = true; } System.out.println("*** CDIContainer started."); } } public static synchronized void stop() { if (weld != null) { System.out.println("*** Stopping CDIContainer ..."); weld.shutdown(); weld = null; System.out.println("*** CDIContainer stopped."); } } @SuppressWarnings("unchecked") public static <T> T getNamedInstance(Class<T> type, String id) { start(); Set<?> found = weldContainer.getBeanManager().getBeans(id); if (found.isEmpty()) { return null; } for (Object object : found) { if (type.isAssignableFrom(object.getClass())) { return (T) object; } } return null; } public static String getName(Object o) { if (o == null) { return "<null>"; } Named named = o.getClass().getAnnotation(Named.class); if (named != null) { return named.value(); } return o.getClass().getSimpleName(); } }