Logo

Jak na zásuvný modul do JSPWiki

Vložil Pavel Klobasa, 26. Duben 2008 - 19:22

Technologické informace jsou v naší firmě důležité, takže ani my jsme neodolali pokušení používat Wiki. Existuje množství wiki engine v různých jazycích, naše volba byla javová – zvolili jsme JSPWiki.

Chtěl bych vám ukázat, jak je snadné v JSPWiki vytvořit zásuvný modul, neboli vlastní Wiki značku. Příkladem bude modul, který umožňuje vložit do stránek soubor ve formátu SVG. Nejprve krátce o tomto formátu.

SVG

SVG vektorový grafický formát, který je možné zobrazit ve webové stránce. Pokud je mi známo, je to jediný standartizovaný vektorový formát, který je možné na webu použít. Bohužel není příliš známý ani rozšířený, ale velmi často je v prohlížeči implicitně nainstalován nebo je možné prohlížeč rozšířit zásuvným modulem od Adobe.

Definice značky

Pojďme tedy k věci – co vlastně chceme do stránek přidat. Jde o následující jednoduchý HTML kód:

<embed src="/attach/AnyPage/test.svg"
       width="75" height="35" type="image/svg+xml">

Psát HTML přímo do Wiki je proti její logice, takže zkusme si představit ve Wiki následující značku. Chceme tedy vytvořit zásuvný modul, který z této značky vytvoří výše uvedeným HTML kód – to je naše zadání pro modul.

[{svg src='test.svg' width='75' height='35'}]

Kód zásuvného modulu

package oxy.wiki;

import java.util.Map;

import com.ecyrd.jspwiki.WikiContext;
import com.ecyrd.jspwiki.WikiEngine;
import com.ecyrd.jspwiki.plugin.PluginException;
import com.ecyrd.jspwiki.plugin.WikiPlugin;
import com.ecyrd.jspwiki.attachment.Attachment;
import com.ecyrd.jspwiki.attachment.AttachmentManager;

public class svg implements WikiPlugin {
        // Tridu je nutne pojmenovat stejne jako znacku

  public String execute (WikiContext context, Map paramMap)
                throws PluginException {
    try{
      // nacteni parametru tagu
      String src = (String)paramMap.get("src"); // nazev obrazku
      String width = (String)paramMap.get("width"); // sirka obrazku
      String height = (String)paramMap.get("height"); // vyska

      if (src == null)
         throw new PluginException("svg-PlugIn: no \"src\" given");

      // nasleduji vypocet skutecneho URL obrazku
      String link = src;
      WikiEngine engine = context.getEngine();
      AttachmentManager mgr = engine.getAttachmentManager();
      Attachment att = mgr.getAttachmentInfo( context, src );
      if( att != null ){
        link = context.getURL(WikiContext.ATTACH, att.getName());
      }

      // vykresleni HTML tagu
      StringBuilder sb = new StringBuilder();
      sb.append("<embed src=\"");
      sb.append(link);
      sb.append("\"");
      if (width != null){
         sb.append(" width=\"");
         sb.append(width);
         sb.append('\"');
      }
      if (height != null){
         sb.append(" height=\"")
         sb.append(height);
         sb.append('\"');
      }
      sb.append(" type=\"image/svg+xml\">");

      // vrati vykresleny HTML tag
      return sb.toString();

    } catch (Exception e) {
      String message = "error in " +
         this.getClass().getName() + ": " + e.getMessage();
      throw new PluginException(message);
    }
  };
}

Nasazení modulu do JSPWiki

Nasazení modulu je jednoduché – stačí modul nahrát do příslušného adresáře a do souboru jspwiki.properties do property jspwiki.plugin.searchPath přidat název package našeho modulu. Pro načtení nového nastavení je potřeba JSPWiki restartovat.

Závěr

Snad vás můj článek inspiruje k používání JSPWiki a pomůže vám s vytváření modulů do ní. A pokud ne, tak alespoň článek připomenul jeden zajímavý grafický formát…

© 2005-2008 oXy Online s.r.o., všechna práva vyhrazena.