tigase.component

## Class AbstractComponent<CTX extends Context>

- java.lang.Object
- - tigase.server.BasicComponent
  - - tigase.server.AbstractMessageReceiver
    - - tigase.component.AbstractComponent<CTX>

- Type Parameters:
    `CTX` - `Context` of component Should be extended.
  All Implemented Interfaces:
    Configurable, XMPPService, DisableDisco, MessageReceiver, ServerComponent, StatisticsContainer, VHostListener
  Direct Known Subclasses:
    EventBusComponent, MonitorComponent

      public abstract class AbstractComponent<CTX extends Context>
      extends AbstractMessageReceiver
      implements XMPPService, DisableDisco

  Base class for implement XMPP Component.
  Author:
    bmalkow

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static String` | `COMPONENT`
    `protected CTX` | `context` Context of component.
    `protected AdHocCommandModule.ScriptCommandProcessor` | `defaultScriptCommandProcessor`
    `protected Logger` | `log` Logger
    `protected ModulesManager` | `modulesManager` Modules manager
    `protected PacketWriter` | `writer`

    - ### Fields inherited from class tigase.server.AbstractMessageReceiver

      `HOUR, INCOMING_FILTERS_PROP_KEY, INCOMING_FILTERS_PROP_VAL, MAX_QUEUE_SIZE_PROP_KEY, MAX_QUEUE_SIZE_PROP_VAL, maxInQueueSize, maxOutQueueSize, maxQueueSize, MINUTE, OUTGOING_FILTERS_PROP_KEY, OUTGOING_FILTERS_PROP_VAL, SCHEDULER_THREADS_PROP_KEY, SECOND`

    - ### Fields inherited from class tigase.server.BasicComponent

      `admins, ALL_PROP_KEY, COMMAND_PROP_NODE, scriptCommands, SCRIPTS_DIR_PROP_DEF, SCRIPTS_DIR_PROP_KEY, vHostManager`

    - ### Fields inherited from interface tigase.disco.XMPPService

      `CMD_FEATURES, DEF_FEATURES, INFO_XMLNS, ITEMS_XMLNS`

    - ### Fields inherited from interface tigase.conf.Configurable

      `ADMINS_PROP_KEY, AMP_CLASS_NAME, AMP_CLUST_CLASS_NAME, AUTH_DOMAIN_POOL_CLASS, AUTH_REPO_DOMAINS_PROP_KEY, AUTH_REPO_PARAMS_NODE, AUTH_REPO_POOL_CLASS, AUTH_REPO_URL_PROP_KEY, BOSH_CLUST_COMP_CLASS_NAME, BOSH_COMP_CLASS_NAME, C2S_CLUST_COMP_CLASS_NAME, C2S_COMP_CLASS_NAME, CL_COMP_CLASS_NAME, CLUSTER_CONECT, CLUSTER_CONTR_CLASS_NAME, CLUSTER_LISTEN, CLUSTER_MODE, CLUSTER_NODES, CLUSTER_NODES_PROP_KEY, COMP_PROT_CLASS_NAME, COMPONENT_ID_PROP_KEY, DEF_AMP_NAME, DEF_BOSH_NAME, DEF_C2S_NAME, DEF_CL_COMP_NAME, DEF_CLUST_CONTR_NAME, DEF_COMP_PROT_NAME, DEF_EXT_COMP_NAME, DEF_HOSTNAME_PROP_KEY, DEF_MONITOR_NAME, DEF_S2S_NAME, DEF_SM_NAME, DEF_SRECV_NAME, DEF_SSEND_NAME, DEF_STATS_NAME, DEF_VHOST_MAN_NAME, DEF_WS2S_NAME, DERBY_REPO_CLASS_PROP_VAL, DERBY_REPO_URL_PROP_VAL, DRUPAL_REPO_URL_PROP_VAL, DRUPALWP_REPO_CLASS_PROP_VAL, DUMMY_REPO_CLASS_PROP_VAL, EXT_COMP_CLASS_NAME, GEN_ADMINS, GEN_AUTH_DB, GEN_AUTH_DB_URI, GEN_COMP_CLASS, GEN_COMP_NAME, GEN_CONF, GEN_CONFIG, GEN_CONFIG_ALL, GEN_CONFIG_COMP, GEN_CONFIG_CS, GEN_CONFIG_DEF, GEN_CONFIG_SM, GEN_DEBUG, GEN_DEBUG_PACKAGES, GEN_EXT_COMP, GEN_MAX_QUEUE_SIZE, GEN_SCRIPT_DIR, GEN_SM_PLUGINS, GEN_SREC_ADMINS, GEN_SREC_DB, GEN_SREC_DB_URI, GEN_TEST, GEN_TRUSTED, GEN_USER_DB, GEN_USER_DB_URI, GEN_USER_DB_URI_PROP_KEY, GEN_VIRT_HOSTS, HOSTNAMES_PROP_KEY, LIBRESOURCE_REPO_CLASS_PROP_VAL, LIBRESOURCE_REPO_URL_PROP_VAL, MONITOR_CLASS_NAME, MONITOR_CLUST_CLASS_NAME, MONITORING, MYSQL_REPO_CLASS_PROP_VAL, MYSQL_REPO_URL_PROP_VAL, PGSQL_REPO_CLASS_PROP_VAL, PGSQL_REPO_URL_PROP_VAL, ROUTER_COMP_CLASS_NAME, S2S_CLUST_COMP_CLASS_NAME, S2S_COMP_CLASS_NAME, SHARED_AUTH_REPO_PARAMS_PROP_KEY, SHARED_AUTH_REPO_PROP_KEY, SHARED_USER_REPO_PARAMS_PROP_KEY, SHARED_USER_REPO_PROP_KEY, SM_CLUST_COMP_CLASS_NAME, SM_COMP_CLASS_NAME, SRECV_COMP_CLASS_NAME, SSEND_COMP_CLASS_NAME, STANZA_WHITE_CHAR_ACK, STANZA_XMPP_ACK, STATS_CLASS_NAME, STRINGPREP_PROCESSOR, TIGASE_AUTH_REPO_CLASS_PROP_VAL, TIGASE_AUTH_REPO_URL_PROP_VAL, TIGASE_CUSTOM_AUTH_REPO_CLASS_PROP_VAL, TRUSTED_PROP_KEY, USER_DOMAIN_POOL_CLASS, USER_REPO_DOMAINS_PROP_KEY, USER_REPO_PARAMS_NODE, USER_REPO_POOL_CLASS, USER_REPO_POOL_SIZE, USER_REPO_POOL_SIZE_PROP_KEY, USER_REPO_URL_PROP_KEY, VHOST_MAN_CLASS_NAME, VHOST_MAN_CLUST_CLASS_NAME, WS2S_CLASS_NAME, WS2S_CLUST_CLASS_NAME, XML_REPO_CLASS_PROP_VAL, XML_REPO_URL_PROP_VAL, XMPP_STANZA_ACK`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractComponent()` Constructs ...
    `AbstractComponent(Context context)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `addOutPacket(Packet packet, AsyncCallback asyncCallback)`
    `protected abstract CTX` | `createContext()` Creates `Context` particular for component implementation.
    `protected Module` | `createModuleInstance(Class<Module> moduleClass)` Creates instance of module.
    `void` | `everyMinute()` Utility method executed precisely every minute.
    `abstract String` | `getComponentVersion()` Returns version of component.
    `protected CTX` | `getContext()` Returns `Context` of component.
    `protected abstract Map<String,Class<? extends Module>>` | `getDefaultModulesList()` Returns default map of components.
    `Map<String,Object>` | `getDefaults(Map<String,Object> params)` Returns default configuration settings for the component as a `Map` with keys as configuration property IDs and values as the configuration property values.
    `ModuleProvider` | `getModuleProvider()` Returns `ModuleProvider`.
    `PacketWriter` | `getWriter()` Returns `PacketWriter`.
    `void` | `initBindings(Bindings binds)` Initialize a mapping of key/value pairs which can be used in scripts loaded by the server
    `protected void` | `initModules(Map<String,Object> props)` Initialising component modules.
    `abstract boolean` | `isDiscoNonAdmin()` Is this component discoverable by disco#items for domain by non admin users.
    `boolean` | `isRegistered(String id)` Checks if module with given identifier is registered already.
    `void` | `processPacket(Packet packet)` This is the main `Packet` processing method.
    `<M extends Module> M` | `registerModule(String id, M module)` Registers module.
    `protected void` | `sendException(Packet packet, ComponentException e)` Converts `ComponentException` to XMPP error stanza and sends it to sender of packet.
    `void` | `setProperties(Map<String,Object> props)` Sets all configuration properties for the object.
    `void` | `updateServiceEntity()` Method description

    - ### Methods inherited from class tigase.server.AbstractMessageReceiver

      `addOutPacket, addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, addTimerTask, addTimerTask, addTimerTask, clearRegexRoutings, everyHour, everySecond, getMaxQueueSize, getRegexRoutings, getStatistics, hashCodeForPacket, isInRegexRoutings, newPacketId, processingInThreads, processingOutThreads, processingThreads, processOutPacket, processPacket, release, removeRegexRouting, schedulerThreads, setMaxQueueSize, setName, setParent, start, stop`

    - ### Methods inherited from class tigase.server.BasicComponent

      `addComponentDomain, canCallCommand, checkCommandAcl, getComponentId, getComponentInfo, getDefHostName, getDefVHostItem, getDiscoCategory, getDiscoCategoryType, getDiscoDescription, getDiscoFeatures, getDiscoFeatures, getDiscoInfo, getDiscoInfo, getDiscoItems, getDiscoItems, getName, getScriptCommands, getScriptItems, getServiceEntity, getVHostItem, handlesLocalDomains, handlesNameSubdomains, handlesNonLocalDomains, initializationCompleted, isAdmin, isInitializationComplete, isLocalDomain, isLocalDomainOrComponent, isNonAdminCommands, isSubdomain, processScriptCommand, removeComponentDomain, removeServiceDiscoveryItem, setVHostManager, updateServiceDiscoveryItem, updateServiceDiscoveryItem, updateServiceDiscoveryItem`

    - ### Methods inherited from class java.lang.Object

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

    - ### Methods inherited from interface tigase.disco.XMPPService

      `getDiscoFeatures, getDiscoInfo, getDiscoItems`

    - ### Methods inherited from interface tigase.server.ServerComponent

      `getComponentId, getComponentInfo, getName, initializationCompleted, isInitializationComplete, processPacket, release, setName`

    - ### Methods inherited from interface tigase.server.MessageReceiver

      `getDefHostName`

- - ### Field Detail

    - #### COMPONENT

          protected static final String COMPONENT

      See Also:
        Constant Field Values

    - #### context

          protected final CTX extends Context context

      Context of component.

    - #### defaultScriptCommandProcessor

          protected final AdHocCommandModule.ScriptCommandProcessor defaultScriptCommandProcessor

    - #### log

          protected final Logger log

      Logger

    - #### modulesManager

          protected final ModulesManager modulesManager

      Modules manager

    - #### writer

          protected PacketWriter writer

  - ### Constructor Detail

    - #### AbstractComponent

          public AbstractComponent()

      Constructs ...

    - #### AbstractComponent

          public AbstractComponent(Context context)

  - ### Method Detail

    - #### addOutPacket

          protected void addOutPacket(Packet packet,
                                      AsyncCallback asyncCallback)

    - #### createContext

          protected abstract CTX createContext()

      Creates `Context` particular for component implementation. Called once.
      Returns:
        context instance.

    - #### createModuleInstance

          protected Module createModuleInstance(Class<Module> moduleClass)
                                         throws InstantiationException,
                                                IllegalAccessException,
                                                IllegalArgumentException,
                                                InvocationTargetException

      Creates instance of module.
      Parameters:
        `moduleClass` - class of module
      Returns:
        instance of module.
      Throws:
        `InstantiationException`
        `IllegalAccessException`
        `IllegalArgumentException`
        `InvocationTargetException`

    - #### everyMinute

          public void everyMinute()

      Description copied from class: `AbstractMessageReceiver`
      Utility method executed precisely every minute. A component can overwrite the method to put own code to be executed at the regular intervals of time.
      Note, no extensive calculations should happen in this method nor long lasting operations. It is essential that the method processing does not exceed 1 minute. The overriding method must call the the super method first and only then run own code.
      Overrides:
        `everyMinute` in class `AbstractMessageReceiver`

    - #### getComponentVersion

          public abstract String getComponentVersion()

      Returns version of component. Used for Service Discovery purposes.
      Returns:
        version of component.

    - #### getContext

          protected CTX getContext()

      Returns `Context` of component.
      Returns:

    - #### getDefaultModulesList

          protected abstract Map<String,Class<? extends Module>> getDefaultModulesList()

      Returns default map of components. Keys in map are used as component identifiers.
      This map may be modified by `init.properties`:
      `<component_name>/modules/<module_name>[S]=<module_class>`
      Returns:
        map of default modules.

    - #### getDefaults

          public Map<String,Object> getDefaults(Map<String,Object> params)

      Description copied from class: `AbstractMessageReceiver`
      Returns default configuration settings for the component as a `Map` with keys as configuration property IDs and values as the configuration property values. All the default parameters returned from this method are later passed to the `setProperties(...)` method. Some of them may have changed value if they have been overwritten in the server configuration. The configuration property value can be of any of the basic types: `int`, `long`, `boolean`, `String`.
      Specified by:
        `getDefaults` in interface `Configurable`
      Overrides:
        `getDefaults` in class `AbstractMessageReceiver`
      Parameters:
        `params` - is a `Map` with some initial properties set for the starting up server. These parameters can be used as a hints to generate component's default configuration.
      Returns:
        a `Map` with the component default configuration.

    - #### getModuleProvider

          public ModuleProvider getModuleProvider()

      Returns `ModuleProvider`. It allows to retrieve instance of module by given ID.
      Returns:
        `ModuleProvider`.

    - #### getWriter

          public PacketWriter getWriter()

      Returns `PacketWriter`.
      Returns:
        `PacketWriter`.

    - #### initBindings

          public void initBindings(Bindings binds)

      Description copied from class: `BasicComponent`
      Initialize a mapping of key/value pairs which can be used in scripts loaded by the server
      Overrides:
        `initBindings` in class `BasicComponent`
      Parameters:
        `binds` - A mapping of key/value pairs, all of whose keys are Strings.

    - #### initModules

          protected void initModules(Map<String,Object> props)
                              throws InstantiationException,
                                     IllegalAccessException,
                                     IllegalArgumentException,
                                     InvocationTargetException

      Initialising component modules.
      Parameters:
        `props` - component properties.
      Throws:
        `InstantiationException`
        `IllegalAccessException`
        `IllegalArgumentException`
        `InvocationTargetException`

    - #### isDiscoNonAdmin

          public abstract boolean isDiscoNonAdmin()

      Is this component discoverable by disco#items for domain by non admin users.
      Returns:
        `true` - if yes

    - #### isRegistered

          public boolean isRegistered(String id)

      Checks if module with given identifier is registered already.
      Parameters:
        `id` - module identifier.
      Returns:
        `true` if module is registered. Otherwise `false`.

    - #### processPacket

          public void processPacket(Packet packet)

      Description copied from class: `AbstractMessageReceiver`
      This is the main `Packet` processing method. It is called concurrently from many threads so implementing it in thread save manner is essential. The method is called for each packet addressed to the component.
      Please note, the `Packet` instance may be processed by different parts of the server, different components or plugins at the same time. Therefore this is very important to tread the `Packet` instance as unmodifiable object.
      Processing in this method is asynchronous, therefore there is no result value. If there are some 'result' packets generated during processing, they should be passed back using `addOutPacket(Packet)` method.
      Specified by:
        `processPacket` in class `AbstractMessageReceiver`
      Parameters:
        `packet` - is an instance of the `Packet` class passed for processing.

    - #### registerModule

          public <M extends Module> M registerModule(String id,
                                                     M module)

      Registers module. If there is module registered with given ID, it will be unregistered.
      Parameters:
        `id` - identifier of module.
        `module` - module instance.
      Returns:
        currently registered module instance.

    - #### sendException

          protected void sendException(Packet packet,
                                       ComponentException e)

      Converts `ComponentException` to XMPP error stanza and sends it to sender of packet.
      Parameters:
        `packet` - packet what caused exception.
        `e` - exception.

    - #### setProperties

          public void setProperties(Map<String,Object> props)
                             throws ConfigurationException

      Description copied from interface: `Configurable`
      Sets all configuration properties for the object.
      Specified by:
        `setProperties` in interface `Configurable`
      Overrides:
        `setProperties` in class `AbstractMessageReceiver`
      Parameters:
        `props` - `Map` with the configuration
      Throws:
        `ConfigurationException` - - if setting configuration will fail which will make it unable to work

    - #### updateServiceEntity

          public void updateServiceEntity()

      Description copied from class: `BasicComponent`
      Method description
      Overrides:
        `updateServiceEntity` in class `BasicComponent`

Copyright © 2016 "Tigase, Inc.". All rights reserved.