为jive2.x写ImageFilter
来源:互联网 发布:php sql注入漏洞修复 编辑:程序博客网 时间:2024/05/16 11:42
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>摘要:简要介绍为jive2.x写插件的方法,并具体实现一个图像过滤器ImageFilter。jive2.x所有的filter都放在com.jivesoftware.forum.filter包下面,这一点与jive3.x不同。利用正则表达式来写这个filter非常简单。1. 继承抽象类ForumMessageFilter在jive2.x里面,要实现的所有filter都应该继承它,ForumMessageFilter实现了ForumMessage接口。因此,(1) 我们所要实现的filter应该提供getBody(),getSubject()方法,如果需要的话,还有getProperty(String)方法。(2) 注意:每个filter都应该指明自己是否是可以缓存的,这通过isCacheable()方法来实现。(3) 另外,你也许要对filter进行一些属性上的设置,也要在这里完成相应的处理。2. 继承JiveBeanInfo类建议你通过继承JiveBeanInfo类来为BeanInfo接口提供必要的信息,比如filter的名称,简短的描述,版本信息,作者等等。这样我们可以在管理台对filter的属性进行设置。比如,我们马上要写一个ImageFilter,(1) 那么我们就还需要再写一个名为ImageFilterBeanInfo辅助类。注意,这种命名模式是固定的,即“filterName+BeanInfo”。(2) 然后,我们再写一个bean_ImageFilter.properties的属性描述文件,一般要包含这些信息:# Name of the filter# Version of the filter# Description of filter# Author of filter# Properties - display name and description以上这些内容会出现在管理台,主要是对你可以进行设置的属性作简短的描述。基本上写filter就是这样了,下面附上我写的Jive2ImageFilter源代码。标签设计为:[ img ]url[ /img ](为了不被转义,多加了空格)regex的匹配格式为:/[img/]([^/[] )/[/img/],把它保存为Jive2ImageFilterRegex文件。1. Jive2ImageFilter.javapackage com.jivesoftware.forum.filter;import com.jivesoftware.forum.*;import java.util.regex.*;import java.io.*;public class Jive2ImageFilter extends ForumMessageFilter { public Jive2ImageFilter() { filteringSubject = false; filteringBody = true; imageRoot = "/";} public ForumMessageFilter clone(ForumMessage message) { Jive2ImageFilter filter = new Jive2ImageFilter();filter.filteringSubject = filteringSubject;filter.filteringBody = filteringBody;filter.message = message;filter.imageRoot = imageRoot; return filter;}public boolean isCacheable() {return true;} public boolean isFilteringSubject() { return filteringSubject; } public void setFilteringSubject(boolean filteringSubject) { this.filteringSubject = filteringSubject; } public boolean isFilteringBody() { return filteringBody; } public void setFilteringBody(boolean filteringBody) { this.filteringBody = filteringBody; }public String getSubject() {if (filteringSubject) { return showImage(message.getSubject());} return message.getSubject();} public String getBody() { if (filteringBody) { return showImage(message.getBody()); } return message.getBody(); } public String getImageRoot() { return imageRoot; } public void setImageRoot(String root) { imageRoot = (root == null) ? "/" : root.endsWith("/") ? root : root '/'; }private String showImage(String input){if (input == null || input.length() == 0) {return input;} InputStream is = this.getClass().getResourceAsStream("Jive2ImageFilterRegex"); BufferedReader br = new BufferedReader(new InputStreamReader(is)); try { REGEX = br.readLine(); } catch (IOException ioe) {}Pattern pattern = Pattern.compile(REGEX);Matcher matcher = pattern.matcher(input);StringBuffer filtered = new StringBuffer();while (matcher.find()) {if (matcher.group(1).startsWith("http://")|| matcher.group(1).startsWith("HTTP://")|| matcher.group(1).startsWith("ftp://")|| matcher.group(1).startsWith("FTP://")) {matcher.appendReplacement(filtered, "");} else { matcher.appendReplacement(filtered, "");}}matcher.appendTail(filtered);return filtered.toString();}private boolean filteringSubject;private boolean filteringBody;private String REGEX;private String imageRoot;}2. Jive2ImageFilterBeanInfo.javapackage com.jivesoftware.forum.filter;import java.beans.*;import com.jivesoftware.forum.util.JiveBeanInfo;public class Jive2ImageFilterBeanInfo extends JiveBeanInfo { public static final String [] PROPERTY_NAMES = { "filteringSubject", "filteringBody", "imageRoot", }; public Jive2ImageFilterBeanInfo() { super(); } public Class getBeanClass() { return com.jivesoftware.forum.filter.Jive2ImageFilter.class; } public String [] getPropertyNames() { return PROPERTY_NAMES; } public String getName() { return "Jive2ImageFilter"; }}3. bean_Jive2ImageFilter.properties# Jive2ImageFilter.properties # Default resource bundle for Jive2ImageFilter# Name of the filterdisplayName=Jive2 Image Filter# Version of the filterversion=1.0# Description of filtershortDescription=Convert [img]path[/img] tags into html image tags. It should comes before URL Converter filter.# Author of filterauthor=ant21# Properties - display name and descriptionfilteringSubject.displayName=Filter Message SubjectfilteringSubject.shortDescription=Toggles whether the subject will be filtered.filteringBody.displayName=Filter Message BodyfilteringBody.shortDescription=Toggles whether the body will be filtered.imageRoot.displayName=Root directory of the images to use.imageRoot.shortDescription=Images in the generated tags are loaded from this directory.需要注意的是,如果你同时使用了jive自带的URL Converter filter,那么Jive2 Image Filter一定要在URL Converter filter的前面,这样才能正确过滤,否则URL Converter filter会把[ img ]url[ /img ]中的url提前过滤掉。