Package com.googlecode.gwt.test.gin

Source Code of com.googlecode.gwt.test.gin.Injectors$Gin1Module

package com.googlecode.gwt.test.gin;

import com.google.gwt.i18n.client.Messages;
import com.google.gwt.inject.client.AbstractGinModule;
import com.google.gwt.inject.client.AsyncProvider;
import com.google.gwt.inject.client.GinModules;
import com.google.gwt.inject.client.Ginjector;
import com.google.gwt.inject.client.assistedinject.GinFactoryModuleBuilder;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.assistedinject.Assisted;

public class Injectors {

   public static interface AssistedInjectFactory {

      ClassWithAssistedInjection newClassWithAssistedInjection(String assitedString);

   }

   public static class ClassWithAssistedInjection {

      final String assistedString;

      @Inject
      Virtual virtual;

      @Inject
      public ClassWithAssistedInjection(@Assisted
      String assistedString) {
         this.assistedString = assistedString;
      }
   }

   public static class ClassWithAsyncProvider {

      private final AsyncProvider<Impl2> provider;

      @Inject
      public ClassWithAsyncProvider(AsyncProvider<Impl2> provider) {
         this.provider = provider;
      }

      public void onSuccess(AsyncCallback<Impl2> callback) {
         provider.get(callback);
      }

   }

   @GinModules({Gin1Module.class})
   public interface Gin1Injector extends Ginjector {
      Virtual virtual();
   }

   // This module will only contain a single binding
   public static final class Gin1Module extends AbstractGinModule {
      @Override
      protected void configure() {
         bind(Virtual.class).to(Impl.class).in(Singleton.class);
      }
   }

   @GinModules({Gin2Module.class})
   public interface Gin2Injector extends Ginjector {
      SomeServiceAsync service();

      Virtual virtual();

      VirtualMore virtualMore();
   }

   public static final class Gin2Module extends AbstractGinModule {
      @Override
      protected void configure() {
         bind(Virtual.class).to(Impl2.class);
         bind(VirtualMore.class).to(ImplMore.class);
      }
   }

   @GinModules({Gin3Module.class})
   public interface Gin3Injector extends Ginjector {
      ImplMore implMore();
   }

   public static final class Gin3Module extends AbstractGinModule {
      @Override
      protected void configure() {
         bind(Virtual.class).to(Impl2.class);
      }
   }

   @GinModules(Gin4Module.class)
   public interface Gin4Injector extends Ginjector {
      Virtual virtual();
   }

   public static class Gin4Module extends AbstractGinModule {
      @Override
      protected void configure() {
         bind(Virtual.class).to(ImplementationWithProviders.class);
         bind(VirtualMore.class).to(ImplMore.class);
      }
   }

   @GinModules(Gin5Module.class)
   public interface Gin5Injector extends Ginjector {
      Impl singletonImpl();

      Virtual singletonVirtual();

   }

   public static class Gin5Module extends AbstractGinModule {

      @Override
      protected void configure() {
         bind(Impl.class).in(Singleton.class);

         bind(Virtual.class).to(Impl.class);
      }

   }

   @GinModules(Gin6Module.class)
   public interface Gin6Injector extends Ginjector {
      Virtual singletonImpl();

      Impl3 wrapper();

   }

   public static class Gin6Module extends AbstractGinModule {

      @Override
      protected void configure() {
         bind(Virtual.class).to(Impl.class).in(Singleton.class);

      }

      @Provides
      Impl3 provideImpl3(Virtual toWrap) {
         return new Impl3(toWrap);
      }

   }

   @GinModules(Gin7Module.class)
   public interface Gin7Injector extends Ginjector {
      Impl2 eagerSingleton();
   }

   public static class Gin7Module extends AbstractGinModule {

      @Override
      protected void configure() {
         bind(Impl2.class).asEagerSingleton();
      }
   }

   @GinModules({Gin8Module.class})
   public interface Gin8Injector extends Ginjector {
      ClassWithAsyncProvider classWithAsyncProvider();
   }

   // This module will only contain a single binding
   public static final class Gin8Module extends AbstractGinModule {
      @Override
      protected void configure() {
         bind(VirtualMore.class).to(ImplMore.class);
         bind(Virtual.class).to(Impl.class);
      }
   }

   @GinModules({Gin9Module.class})
   public interface Gin9Injector extends Ginjector {
      AssistedInjectFactory assistedInjectFactory();
   }

   public static class Gin9Module extends AbstractGinModule {

      @Override
      protected void configure() {
         bind(Virtual.class).to(Impl2.class);
         install(new GinFactoryModuleBuilder().build(AssistedInjectFactory.class));
      }

   }

   public static class Impl implements Virtual {
   }

   public static class Impl2 implements Virtual {
      TestMessages messages;

      @Inject
      public Impl2(TestMessages messages) {
         this.messages = messages;
      }
   }

   public static class Impl3 implements Virtual {

      protected final Virtual wrapped;

      public Impl3(Virtual impl) {
         this.wrapped = impl;
      }
   }

   public static class ImplementationWithProviders implements Virtual {

      Provider<VirtualMore> provider;

      @Inject
      public ImplementationWithProviders(Provider<VirtualMore> provider) {
         this.provider = provider;
      }
   }

   public static class ImplMore implements VirtualMore {
      Virtual core;

      @Inject
      public ImplMore(Virtual core) {
         super();
         this.core = core;
      }

   }

   // These bindings test the ability of Ginjector GwtCreateHandler
   // to fallback to GWT.create for unbound ones (like RemoteService,
   // Constants, Messages, etc).
   @RemoteServiceRelativePath("service")
   public interface Service extends RemoteService {
      String name();
   }

   public interface ServiceAsync {
      void name(AsyncCallback<String> callback);
   }

   public static class ServiceImpl implements Service {

      public String name() {
         return "Service Implementation";
      }

   }

   @RemoteServiceRelativePath("someService")
   public interface SomeService extends RemoteService {
   }

   public interface SomeServiceAsync {
   }

   public static class SomeServiceImpl implements SomeService {

   }

   public interface TestMessages extends Messages {
      @DefaultMessage("this is junit")
      String myName();
   }

   // Simple bindings
   public interface Virtual {
   }

   public interface VirtualMore {
   }

}
TOP

Related Classes of com.googlecode.gwt.test.gin.Injectors$Gin1Module

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.