java.lang.Object
ru.vyarus.dropwizard.guice.module.installer.feature.plugin.PluginInstaller
All Implemented Interfaces:
FeatureInstaller, BindingInstaller

public class PluginInstaller extends Object implements FeatureInstaller, BindingInstaller
Shortcut for guice multibindings mechanism. Register beans annotated with Plugin annotation into set multibinding by base class defined in annotation. Registered set may be later injected in code as Set<BaseType> plugins.

To use Map<String, BaseType> create new annotation, annotated with @Plugin. Use new annotation to define plugins. It's value attribute will be used as key (this way you can use different enums for different plugin types and not need to always write plugin interface.

Since:
08.10.2014
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    bind(com.google.inject.Binder binder, Class<?> type, boolean lazy)
    Called to apply custom binding for installed feature.
    Method used by extensions help report (GuiceBundle.Builder.printExtensionsHelp()) to show what signs this exact installer recognize so user could better understand extensions support specifics.
    <T> void
    manualBinding(com.google.inject.Binder binder, Class<T> type, com.google.inject.Binding<T> binding)
    Called for extensions, resolved from guice bindings (in user modules).
    boolean
    matches(Class<?> type)
    NOTE: consider using ru.vyarus.dropwizard.guice.module.installer.util.FeatureUtils to simplify checks (for example, types most likely must be checks to be not abstract).
    void
    registerPlugin(com.google.inject.Binder binder, Class<?> type)
    Plugin registration.
    void
    Called to log registered endpoints in dropwizard log fashion.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface ru.vyarus.dropwizard.guice.module.installer.install.binding.BindingInstaller

    extensionBound
  • Constructor Details

    • PluginInstaller

      public PluginInstaller()
  • Method Details

    • matches

      public boolean matches(Class<?> type)
      Description copied from interface: FeatureInstaller
      NOTE: consider using ru.vyarus.dropwizard.guice.module.installer.util.FeatureUtils to simplify checks (for example, types most likely must be checks to be not abstract).

      When type accepted by any extension it's registered in guice module.

      Specified by:
      matches in interface FeatureInstaller
      Parameters:
      type - type to check
      Returns:
      true if extension recognized, false otherwise
    • bind

      public void bind(com.google.inject.Binder binder, Class<?> type, boolean lazy)
      Description copied from interface: BindingInstaller
      Called to apply custom binding for installed feature. By default, all found extensions are installed as binder.bind(type). This method will be called instead of default registration.

      Called only for non binding extensions (extensions that are not already bound in guice module.

      WARNING: may be called multiple times due to enabled bindings reporting! Be sure to produce correct logs.

      Specified by:
      bind in interface BindingInstaller
      Parameters:
      binder - guice binder
      type - extension class
      lazy - true if extension is annotated with LazyBinding
    • manualBinding

      public <T> void manualBinding(com.google.inject.Binder binder, Class<T> type, com.google.inject.Binding<T> binding)
      Description copied from interface: BindingInstaller
      Called for extensions, resolved from guice bindings (in user modules). May be used to validate binding or do some additional bindings with existing binding. Binding is detected primarily by main key Binding.getKey(), but linked bindings (LinkedKeyBinding) are also checked for target key (LinkedKeyBinding.getLinkedKey()).

      LazyBinding flag is not used here because guicey will automatically throw an error if existing binding is annotated as lazy binding (which don't makes any sense).

      WARNING: may be called multiple times due to enabled bindings reporting! Be sure to produce correct logs.

      Specified by:
      manualBinding in interface BindingInstaller
      Type Parameters:
      T - extension type, used to connect extension class with binding
      Parameters:
      binder - guice binder
      type - extension class
      binding - binding declaration from guice module
      See Also:
    • registerPlugin

      public void registerPlugin(com.google.inject.Binder binder, Class<?> type)
      Plugin registration.
      Parameters:
      binder - binder
      type - plugin type
    • report

      public void report()
      Description copied from interface: FeatureInstaller
      Called to log registered endpoints in dropwizard log fashion. It's important to naturally show all dynamically resolved classes to easily catch errors. Use Reporter to simplify reporting.

      Method may do nothing if reporting not required

      Specified by:
      report in interface FeatureInstaller
    • getRecognizableSigns

      public List<String> getRecognizableSigns()
      Description copied from interface: FeatureInstaller
      Method used by extensions help report (GuiceBundle.Builder.printExtensionsHelp()) to show what signs this exact installer recognize so user could better understand extensions support specifics.
      Specified by:
      getRecognizableSigns in interface FeatureInstaller
      Returns:
      list of extension signs installer recognize