/t2-ext/guiceadapter/src/main/java/org/t2framework/t2/adapter/GuiceAdapter.java
http://t-2.googlecode.com/ · Java · 193 lines · 132 code · 23 blank · 38 comment · 10 complexity · 093f1ff026d36c4853ac8c0cad581e2f MD5 · raw file
- /*
- * Copyright 2008-2010 the T2 Project ant the Others.
- *
- * 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.
- */
- package org.t2framework.t2.adapter;
-
- import java.util.Collections;
- import java.util.Iterator;
- import java.util.List;
-
- import org.t2framework.commons.bootstrap.CommonsInitializer;
- import org.t2framework.commons.exception.NoSuchComponentException;
- import org.t2framework.commons.meta.BeanDesc;
- import org.t2framework.commons.meta.BeanDescFactory;
- import org.t2framework.commons.util.Assertion;
- import org.t2framework.commons.util.CollectionsUtil;
- import org.t2framework.commons.util.Logger;
- import org.t2framework.t2.handler.ExceptionHandler;
- import org.t2framework.t2.handler.GlobalExceptionHandler;
- import org.t2framework.t2.handler.impl.GlobalExceptionHandlerImpl;
-
- import com.google.inject.Guice;
- import com.google.inject.Injector;
- import com.google.inject.Module;
-
- /**
- *
- * {@.en An adapter class for Google Guice.}
- *
- * <br />
- *
- * {@.ja Guice???????????????.{@link Module}?{@link CommonsInitializer}
- * ?????????{@link Injector}??????.
- *
- * @author shot
- * @author yone098
- * @see com.google.inject.Module
- * @see com.google.inject.Injector
- */
- public class GuiceAdapter extends AbstractContainerAdapter<Injector> {
-
- protected static Logger logger = Logger.getLogger(GuiceAdapter.class);
-
- protected static Injector injector;
-
- protected Module[] modules;
-
- @Override
- public void init() {
- List<Module> moduleList = CollectionsUtil.newArrayList();
- for (Iterator<Module> iterator = CommonsInitializer
- .iterator(CommonsInitializer.load(Module.class)); iterator
- .hasNext();) {
- moduleList.add(iterator.next());
- }
- this.modules = moduleList.toArray(new Module[0]);
- }
-
- @Override
- public void init(String configPath) {
- init();
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public <T> BeanDesc<T> getBeanDesc(Class<? super T> key) {
- Assertion.notNull(key);
- setupInjector();
- if (hasComponent(key)) {
- return (BeanDesc<T>) BeanDescFactory.getBeanDesc(key);
- } else {
- return null;
- }
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public <T> T getComponent(Class<? super T> componentClass) {
- Assertion.notNull(componentClass);
- setupInjector();
- try {
- return (T) injector.getInstance(componentClass);
- } catch (Throwable e) {
- throw new NoSuchComponentException(componentClass);
- }
- }
-
- protected void setupInjector() {
- if (injector == null) {
- injector = Guice.createInjector(modules);
- }
- }
-
- @Override
- public <T> List<T> getComponents(Class<? super T> componentClass) {
- logger
- .debug("GuiceAdapter does not support getComponents(), so just return single component.");
- setupInjector();
- if (hasComponent(componentClass)) {
- List<T> ret = CollectionsUtil.newArrayList();
- ret.add((T) getComponent(componentClass));
- return ret;
- } else {
- return Collections.emptyList();
- }
- }
-
- @Override
- public <T> boolean hasComponent(Class<T> componentClass) {
- setupInjector();
- try {
- return injector.getInstance(componentClass) != null;
- } catch (Throwable t) {
- return false;
- }
- }
-
- @Override
- public <T> T injectDependency(T t) {
- setupInjector();
- injector.injectMembers(t);
- return t;
- }
-
- @Override
- public <T> void register(Class<? extends T> key) {
- Assertion.notNull(key);
- setupInjector();
- logger.debug("GuiceAdapter can not register a component:"
- + key.getName());
- }
-
- @Override
- public <T> void register(T key) {
- Assertion.notNull(key);
- setupInjector();
- logger.debug("GuiceAdapter can not register a component:"
- + key.getClass().getName());
- }
-
- @Override
- public Injector getContainer() {
- return injector;
- }
-
- @Override
- public List<ExceptionHandler<Throwable, Exception>> createExceptionHandlers() {
- setupInjector();
- logger
- .debug("GuiceAdapter does not support createrExceptionHandlers().");
- return CollectionsUtil.emptyList();
- }
-
- @Override
- public GlobalExceptionHandler createGlobalExceptionHandler() {
- setupInjector();
- if (hasComponent(GlobalExceptionHandler.class)) {
- return injector.getInstance(GlobalExceptionHandler.class);
- } else {
- return new GlobalExceptionHandlerImpl();
- }
- }
-
- @Override
- public void destroy() {
- injector = null;
- }
-
- /**
- * {@.en {@link Injector} generated with this adaptor is returned.}
- *
- * <br />
- *
- * {@.ja ?Adapter?????.{@link Injector}??????
- *
- * @return {@link Injector}
- */
- public static Injector getSingletonGuiceInjector() {
- return injector;
- }
-
- }