Création d'une classe de plug-in de rendu

Un plug-in de rendu est une classe réutilisable que vous créez pour exécuter une tâche au moment du rendu. Il peut être référencé dans le contenu Web à l'aide d'une balise de plug-in. Vous pouvez par exemple concevoir un plug-in qui utilise les attributs du profil utilisateur en cours pour déterminer si le corps de la balise de plug-in est affiché ou non. Une classe de plug-in de rendu vous contraint à faire référence à un ensemble de méthodes API de contenu Web.

Création d'une classe de plug-in

  1. Créez une classe Java qui implémente l'interface com.ibm.workplace.wcm.api.plugin.rendering.RenderingPlugin ou RenderingPluginDefinition. Cette classe peut implémenter les méthodes suivantes :
  2. Implémentez render()method. Cette méthode contient le code exécuté lorsque le plug-in est démarré lors du rendu d'une présentation contenant une balise de "plug-in" qui fait référence au plug-in personnalisé. Si la valeur true est renvoyée, le balisage du corps défini dans la balise de plug-in s'affiche. Si la valeur false est renvoyée, le corps de la balise est ignoré. Si la balise de plug-in ne contient aucune balisage pour le corps, la valeur renvoyée est ignorée.
  3. Les méthodes héritées de com.ibm.portal.Localized doivent également être implémentées.
    public String getTitle(Locale displayLocale) {}
    Cette méthode renvoie le titre du plug-in de rendu qui est utilisé pour la sélection du plug-in de rendu.
    public ListModel<Locale> getLocales()
    Cette méthode renvoie une liste des environnements locaux pris en charge par ce plug-in de rendu.
    public String getDescription(Locale p_arg0)
    Cette méthode renvoie une description du plug-in de rendu.

    Consultez la documentation Javadoc pour plus d'informations. The Javadoc files for Web Content Manager are in the PortalServer_root/doc/Javadoc/spi_docs/com/ibm/workplace/wcm directory.

  4. Le plug-in de rendu peut éventuellement implémenter RenderingPluginDefinition à la place de RenderingPlugin pour définir son type et ses paramètres. Cette méthode est recommandée car elle facilite l'utilisation des plug-ins de rendu.
    Pour ce faire, appliquez les méthodes :
    • public RenderingPluginType getType().
    • public List<RenderingPluginParameter>getParameters().
    Remarque : Lorsque vous créez un plug-in de rendu personnalisé :
    • N'utilisez pas "name" comme paramètre dans le plug-in de rendu, car le nom du plug-in est stocké en tant que paramètre "name".
    • Si vous utilisez "id" comme paramètre de rendu, il ne s'affichera pas en mode de lecture.
Par exemple:
package test;

import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import com.ibm.portal.ListModel;
import com.ibm.portal.ModelException;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginDefinition;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginException;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginModel;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginParameter;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginParameterAdapter;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginParameterImpl;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginType;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginTypes;
import com.ibm.workplace.wcm.api.plugin.rendering.RenderingPluginParameter.Required;
import com.ibm.workplace.wcm.api.plugin.rendering.ValueOptionImpl;

/**
 * A simple rendering plugin to demonstrate the use of the <code>RenderingPlugin</code> API.
 */
public class SimpleRenderingPlugin implements RenderingPluginDefinition
{
   /** The 'render body' parameter */
   private static final String RENDER_BODY_PARAM = "renderbody";
   
   /**
    * A simple list model holding locales.
    */
   protected static class SimpleLocaleListModel<K> implements ListModel<Locale>
   {
      /** the list of locales of this list model */
      final List<Locale> m_localeList = new ArrayList<Locale>();

      /**
       * Constructs this simple list model holding the given locales.
       * 
       * @param p_locales
       *           the locales of this list model. May be <code>null</code>.
       */
      public SimpleLocaleListModel(final Locale[] p_locales)
      {
         if (p_locales != null)
         {
            for (int i = 0; i < p_locales.length; ++i)
            {
               m_localeList.add(p_locales[i]);
            }
         }
      }

      @Override
      public Iterator<Locale> iterator() throws ModelException
      {
         return m_localeList.iterator();
      }
   }

   /** a list model that only contains the English language locale */
   private static final ListModel<Locale> ENGLISH_ONLY = new SimpleLocaleListModel<Locale>(new Locale[]{Locale.ENGLISH});

   @Override
   public String getDescription(final Locale p_locale)
   {
      return "This is a simple rendering plugin.";
   }

   @Override
   public ListModel<Locale> getLocales()
   {
      return ENGLISH_ONLY;
   }

   @Override
   public String getName()
   {
      return "SimpleRenderingPlugin";
   }

   @Override
   public String getTitle(final Locale p_locale)
   {
      return "SimpleRenderingPlugin";
   }

   @Override
   public boolean isShownInAuthoringUI()
   {
      return false;
   }

   @Override
   public boolean render(final RenderingPluginModel p_model) throws RenderingPluginException
   {
      final Map<String, List<String>> params = p_model.getPluginParameters();

      // determine whether the inner contents of the plugin should actually be rendered
      final boolean renderBody;
      final List<String> renderBodyList = params.get(RENDER_BODY_PARAM);
      if (renderBodyList != null && renderBodyList.get(0).equals("false"))
      {
         renderBody = false;
      }
      else
      {
         renderBody = true;
      }

      // render the output of the plugin to the writer provided by the RenderingPluginModel
      final Writer writer = p_model.getWriter();
      try
      {
         writer.write("<b>Simple RenderingPlugin</b>");

         final Set<String> keys = params.keySet();

         final Iterator<String> iter = keys.iterator();
         while (iter.hasNext())
         {
            String key = iter.next();
            writer.write("<br>" + key + " = " + params.get(key));
         }

         writer.write("<br><br>");
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }

      return renderBody;
   }

   @Override
   public RenderingPluginType getType()
   {
      return RenderingPluginTypes.CONTENT;
   }

   @Override
   public List<RenderingPluginParameter> getParameters()
   {
      List<RenderingPluginParameter> parameters = new ArrayList<RenderingPluginParameter>();
      RenderingPluginParameterAdapter renderBodyParam = new RenderingPluginParameterImpl(RENDER_BODY_PARAM).required(Required.NOT_REQUIRED_SHOW_BY_DEFAULT).allowedValues(new ValueOptionImpl("true"), new ValueOptionImpl("false"));
      parameters.add(renderBodyParam);
      return parameters;
   }
}

Création d'un fichier plugin.xml

Un fichier plugin.xml est requis, que le déploiement soit effectué via un fichier WAR, EAR ou JAR. Si vous effectuez le déploiement via une application dans un fichier WAR ou EAR, ajoutez le fichier plugin.xml au dossier WEB-INF de l'application. Lorsque vous utilisez un fichier JAR, vous devez inclure le fichier plugin.xml à la racine de ce fichier JAR.
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin
   id="Test"
   name="Simple Rendering Plug-in Test"
   version="1.0.0"
   provider-name="IBM">
   
   <extension
     point="com.ibm.workplace.wcm.api.RenderingPlugin"
     id="SimpleRenderingPlugin">
     <provider class="test.SimpleRenderingPlugin"/>
   </extension>                       
</plugin>
  • Chaque plug-in est représenté par une balise <extension></extension> unique.
  • La valeur de l'attribut de point doit être com.ibm.workplace.wcm.api.RenderingPlugin.
  • Entrez l'ID de votre choix.
  • Indiquez la classe de fournisseur associée à votre plug-in.
Naming conventions :
Si vous créez un plug-in associé aux mêmes nom et ID qu'un plug-in existant, le nouveau plug-in ne sera pas enregistré. Lorsque vous créez des applications de plug-in, vérifiez que les éléments suivants sont uniques sur votre système :
  • L'ID plug-in, le nom de plug-in et l'ID extension du fichier plugin.xml.
  • Le nom de classe qualifié complet et le chemin de toutes les classes dans l'application.
  • le chemin d'accès aux fichiers de l'application.