org.sunflow.system

## Class Plugins<T>

- java.lang.Object
- - org.sunflow.system.Plugins<T>

Type Parameters:
  `T` - Default constructible type or interface all plugins will derive from or implement

    public final class Plugins<T>
    extends java.lang.Object

This class represents a list of plugins which implement a certain interface or extend a certain class. Many plugins may be registered and created at a later time by recalling their unique name only.

### Constructor Summary

Constructors
Constructor and Description
`Plugins(java.lang.Class<T> baseClass)` Create an empty plugin list.

### Method Summary

Methods
`T` `createObject(java.lang.String name)` Create an object from the specified type name.
`java.lang.String` `generateUniqueName(java.lang.String prefix)` Generate a unique plugin type name which has not yet been registered.
`boolean` `hasType(java.lang.String name)` Check this plugin list for the presence of the specified type name
`boolean` `registerPlugin(java.lang.String name, java.lang.Class<? extends T> pluginClass)` Define a new plugin type from an existing class.
`boolean` `registerPlugin(java.lang.String name, java.lang.String sourceCode)` Define a new plugin type from java source code.

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

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

### Constructor Detail

#### Plugins

    public Plugins(java.lang.Class<T> baseClass)

Create an empty plugin list. You must specify `T.class` as an argument.

Parameters:
  `baseClass` -

### Method Detail

#### createObject

    public T createObject(java.lang.String name)

Create an object from the specified type name. If this type name is unknown or invalid, `null` is returned.

Parameters:
  `name` - plugin type name
Returns:
  an instance of the specified plugin type, or `null` if not found or invalid

#### hasType

    public boolean hasType(java.lang.String name)

Check this plugin list for the presence of the specified type name

Parameters:
  `name` - plugin type name
Returns:
  `true` if this name has been registered, `false` otherwise

#### generateUniqueName

    public java.lang.String generateUniqueName(java.lang.String prefix)

Generate a unique plugin type name which has not yet been registered. This is meant to be used when the actual type name is not crucial, but succesfully registration is.

Parameters:
  `prefix` - a prefix to be used in generating the unique name
Returns:
  a unique plugin type name not yet in use

#### registerPlugin

    public boolean registerPlugin(java.lang.String name,
                         java.lang.String sourceCode)

Define a new plugin type from java source code. The code string contains import declarations and a class body only. The implemented type is implicitly the one of the plugin list being registered against.If the plugin type name was previously associated with a different class, it will be overriden. This allows the behavior core classes to be modified at runtime.

Parameters:
  `name` - plugin type name
  `sourceCode` - Java source code definition for the plugin
Returns:
  `true` if the code compiled and registered successfully, `false` otherwise

#### registerPlugin

    public boolean registerPlugin(java.lang.String name,
                         java.lang.Class<? extends T> pluginClass)

Define a new plugin type from an existing class. This checks to make sure the provided class is default constructible (ie: has a constructor with no parameters). If the plugin type name was previously associated with a different class, it will be overriden. This allows the behavior core classes to be modified at runtime.

Parameters:
  `name` - plugin type name
  `pluginClass` - class object for the plugin class
Returns:
  `true` if the plugin registered successfully, `false` otherwise