Interfaces for creating new renderers, item builders and render targets.

### Create a new Item Builder

1. Create a new module and set `Preview API`, `Graph API`, `AttributesAPI` and `Lookup` as dependencies.
2. Create a new item class which implements `Item` or extends `AbstractItem`. The `AbstractItem` class is located in the `PreviewPlugin` module so add it as dependency first. An item should be very simple but has a unique identifier returned by its `getType()` method.
3. Create a new builder class that implements `ItemBuilder`
4. Implement the `getType()` method and returns the same identifier than the `Item` you created earlier.
5. Implement the `getItems()` method by retrieving objects from the given graph.
6. Add @ServiceProvider annotation to your builder, that it can be found by the system. Set `ItemBuilder` as the annotation parameter.

### Create a new Renderer

1. Create a new module and set `Preview API`, `GraphAPI`, `Processing Wrapper`, `iText Wrapper` and `Lookup` as dependencies.
2. Create a new class that implements `Renderer`.
3. Implement the renderer methods.
4. Add @ServiceProvider annotation to your builder, that it can be found by the system. Set `Renderer` as the annotation parameter.

### Add data to an existing item

To add an additional data attribute to a Node or Edge item, you need to create a new item builder for the specific type. For instance if one want to add a new attribute to nodes create a new `ItemBuilder` for the type `Item.Node`. Simply return item objects with the data you want to add. The system will automatically merge your new data to node items.

### Extend or replace an existing renderer

To extend or completely replace a default Renderer by your own implementation, create a new Renderer and set the annotation like below. In addition add Preview Plugin module as a dependency.

    @ServiceProvider(service=Renderer.class, position=XXX)
            public class MyRenderer extends NodeRenderer

Being XXX the new position of the renderer Then you can reuse parts of the base class or just override them.

Default renderers are:

- org.gephi.preview.plugin.renderers.NodeRenderer
- org.gephi.preview.plugin.renderers.EdgeRenderer
- org.gephi.preview.plugin.renderers.NodeLabelRenderer
- org.gephi.preview.plugin.renderers.EdgeLabelRenderer
- org.gephi.preview.plugin.renderers.ArrowRenderer

### Add a new PreviewUI settings panel

Plug-ins can add UI components to the Preview Settings module. Additional components are placed in new tabs and have access to the current `PreviewModel` and therefore `PreviewProperties`.

1. Create a new module and set `Preview API` and `Lookup` as dependencies.
2. Create a new class that implements `PreviewUI` and implements methods.
3. Add @ServiceProvider annotation to your builder, that it can be found by the system. Set `PreviewUI` as the 'service' annotation parameter.