Jump to content
Changes to the Jaspersoft community edition download ×
  • Jaspersoft ETL Plugin: Create a Talend Plugin


    gautier

    Talend is Eclipse based and uses plugins to extend its capabilities. This means we can build a plugin to contain all of our components to make them easily installable.

    Benefits of building a plugin for Talend:

    • Keep all your components together
    • Easier to share and deliver
    • Self-contained
    • Easier to centralize common resources (jar,images,..)
    • Advanced customizations (javajet)

    Understand Plugins through Reverse Engineering

    Probably the best way to understand how plugins work in Talend’s context is to open one of the existing plugins. You can find all the plugins in the folder:

    [JETL_INSTALL_DIR]/plugins

    One good example of a plugin for providing components is org.talend.designer.esb.components.rs.consumer_5.5.1.r118616 (name may change depending on your JETLversion). This plugin contains the tRestClient component.

    If you are curious you can also have a look to this folder: org.talend.designer.components.localprovider_5.5.1.r118616. It contains all the basic components of JETL.

    Talend Designer ESB Tooling REST Service consumer plug-in

    image2015-create1.png.09962cdb7ec917f2285d902835fff089.png

     

    Browse the folder :

    You should see this structure:

    1. additional: contains javajet files
    2. components: contains the components to be added to TOS
    3. META-INF: contains the MANIFEST.MF
    4. org: is the root package of java classes used to extend Talend
    5. plugin.properties: is a property file defining vendor and plugin name
    6. plugin.xml: tells Eclipse what how to handle the plugin, what are the points of extension and which classes provide the extension

    Create a Plugin project

    As Talend doesn't expose Eclipse feature to build plugins so we’ll need to use a proper Eclipse instance to build one.

    1. Open an Eclipse instance (not JETL)

    2. Click on the menu File > New.. > Other

    3. Select Plug-in Project

      image2015-create2.png.d3eb43dea050ee4726cde91bdc0598ca.png

    4. Configure the new project name and setting

      image2015-create3.png.52dd85bf6691295285e9e5eb57886977.png

    5. Configure Advanced plugin properties

      1. Id: Make sure to use a relevant Id, this will be used to reference your plugin from component’s xml configuration (as example to import a common jar stored in the plugin)
      2. Execution Environment: This should match the design Environment, so where TOS is installed. Anyway is always best to use the minimum java version needed for your custom code to run, especially if you will share the plugin (of course you will J)
      3. Activator Class: this class is very important, so choose a meaningful package name. We’ll need to work on it later on. You can also call this “MyOwnPlugin”.
    6. Uncheck “Create a plug-in using one of the templates

    7. Click Finish

      image2015-create4.png.0e99b322736871b47664b6963fd0d6d5.png

    Import the Talend core plugin

    In order to build a talend plugin we need to define some dependencies with talend plugins in our brand new one. To do so we need to have these plugins in our Eclipse.

    1. In Eclipse select from menu File > Import…

    2. In the Import From section select Directory and browse the plugins folder of TOS

    3. Click Next

      image2015-create5.png.dcec008367d3eba6a187324ae514395e.png

    4. In the plugin selection you can use the field to filter for strings like “talend.core”

    5. Select the plugin: org.talend.core from the left area and click “Add”

    6. Click on Finish

      image2015-create6(1).png.d3caca67b56e4933e4902dcd59901051.png

    Create Java classes for Talend extension points

    Activator class

    The Activator class was automatically generated from the wizard. We just need to add another method:

    Activator.getStatus(String message, Throwable e)

    public static IStatus getStatus(String message, Throwable e)  {    String msg = e.getMessage() != null ? e.getMessage() : message != null ? message : e.getClass().getName();    return new Status(4, getDefault().getBundle().getSymbolicName(), msg, e);  }[/code]

    So at the end your class should look something like this:

    MyCustomPlugin.java

    package org.mycompany.talend.component;import org.eclipse.core.runtime.IStatus;import org.eclipse.core.runtime.Status;import org.eclipse.ui.plugin.AbstractUIPlugin;import org.osgi.framework.BundleContext;public class MyCustomPlugin extends AbstractUIPlugin {       public static MyCustomPlugin getDefault() {             return plugin;       }       // The plug-in ID       public static final String PLUGIN_ID = "MyPluginProjectId"; //$NON-NLS-1$       // The shared instance       private static MyCustomPlugin plugin;       /**        * The constructor        */       public MyCustomPlugin() {       }       /*        * (non-Javadoc)        *        * @see        * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext        * )        */       public void start(BundleContext context) throws Exception {             super.start(context);             plugin = this;       }       /*        * (non-Javadoc)        *        * @see        * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext        * )        */       public void stop(BundleContext context) throws Exception {             plugin = null;             super.stop(context);       }       public static IStatus getStatus(String message, Throwable e) {             String msg = e.getMessage() != null ? e.getMessage()                           : message != null ? message : e.getClass().getName();             return new Status(4, getDefault().getBundle().getSymbolicName(), msg, e);       }}[/code]

    Component Provider

    The main purpose of this class is to point eclipse platform to the location of our custom components within the plugin. It extends org.talend.core.model.components.AbstractComponentsProvider.

    This abstract class is part of the talend core plugin. In order to have your project build in eclipse you’ll need to add the jar [JETL_INSTALL_DIR]/plugins/org.talend.core_5.4.1.r111943.jar to the project’s BuildPath

    Below a simple implementation:

    MyCustomComponentsProvider.java

    package org.mycompany.talend.component;import java.io.File;import java.net.URL;import org.eclipse.core.runtime.FileLocator;import org.eclipse.core.runtime.Path;import org.talend.core.model.components.AbstractComponentsProvider;public class MyCustomComponentsProvider  extends AbstractComponentsProvider{  private File providedLocation = null;  protected File getExternalComponentsLocation()  {    if (this.providedLocation == null)    {      MyCustomPlugin plugin = MyCustomPlugin.getDefault();      try      {        URL url = FileLocator.find(plugin.getBundle(), new Path("components"), null);        url = FileLocator.toFileURL(url);        this.providedLocation = new File(url.getPath());      }      catch (Exception e)      {        plugin.getLog().log(MyCustomPlugin.getStatus(null, e));      }    }    return this.providedLocation;  }  public String getFamilyTranslation(String paramString)  {    return null;  }}[/code]

    Reference


    User Feedback

    Recommended Comments

    There are no comments to display.



    Guest
    This is now closed for further comments

×
×
  • Create New...