anchor.diff:  
   [[tutorial-create-an-input-component]]
   In this tutorial we will create a complete working input component for xref:https://hazelcast.org/[hazelcast].
  +
   This will include :
   
  -1. The component configuration and the UI layout
  -2. The partition mapper that let the input split it self to work in a distributed environment.
  -3. The source that is responsible for connecting and reading data from the data source.
  +1. The component family registration.
  +2. The component configuration and the UI layout
  +3. The partition mapper that let the input split it self to work in a distributed environment.
  +4. The source that is responsible for connecting and reading data from the data source.
  +
  +NOTE: Getter and Setter methods are omitted for simplicity in this tutorial
  +
  +== The component family registration
  +We register the component family via a the `package-info.java` file in the package of the component.
  +[source,java,indent=0,subs="verbatim,quotes,attributes"]
  +----
  +@Icon(value = Icon.IconType.CUSTOM, custom = "hazelcast") <1>
  +@Components(family = "Hazelcast", categories = "IMDG") <2>
  +package org.talend.hazelcast;
  +----
  +<1> This define the family icon.
  +<2> In this line we define the component family and the component categories.
  +Those information are used in the web and studio applications to group the components.
   
   == The component configuration
   The component configuration define the configurable part of the component in addition to the configuration type and the UI layout.
  
positive.code:     this.members = members;
  }
  ----
  
  === The PostConstruct method
  [source,java,indent=0,subs="verbatim,quotes,attributes"]
  ----
  //We will need Hazelcast instance. we add this as an attribute to the mapper.
  private transient HazelcastInstance instance;
  
  @PostConstruct
  public void init() throws IOException {
      // Here we create an instance of hazelcast according to the provided configuration
      // Here you can notice that we use the injected HazelcastService instance to perform that.
      // This service is implemented in the project. See the implementation in <1>
      instance = service.findInstance(configuration.newConfig());
  }
  ----
  <1> Here is the HazelcastService implementation.
  Every class annotated with `@Service` can be injected to the component via it's constructor.
  
  [source,java,indent=0,subs="verbatim,quotes,attributes"]
  ----
  import org.talend.sdk.component.api.service.Service;
  
negative.code:     private String hazelcastXml; <3>
  
      @Option
      private String mapName; <4>
  
      @Option
      private String executorService = "default"; <5>
  
      ClientConfig newConfig() throws IOException { <6>
          final ClientConfig newconfig = hazelcastXml == null ? new XmlClientConfigBuilder().build() :
                  new XmlClientConfigBuilder(hazelcastXml).build();
  
  