最近在研究openfire和spark,但是发现关于spark的插件开发的例子很少,而且做的也不是很简单。所以自己就小试牛刀,为大家做一个简单的入门级的spark插件开发实例。
首先,看我建立的目录结构:
com.jivesoftware.spark.bidlink.plugin下面包含两个文件,BidlinkPlugin.java是官方规定建立的插件类,而BidlinkPluginUtil.java是我自己写的方法实现类,本实例所实现的所有功能都将在此类中实现。
我在plugins目录下建立了自己的文件夹,bidlink目录下包含bin,build,lib目录以及plugin.xml文件。bin目录是存放ant之后.class文件的存放目录(其中包含了包结构),build目录只存放build.xml文件,此文件为ant所需文件,lib目录是存放生成后的jar包所用,其可以为空,plugin.xml文件是一些关于插件的描述和BidlinkPlugin.java的路径指向。好了目录结构已经介绍好了,下面来分别介绍各个文件的内容吧。
BinlinkPlugin.java
(这个类很简单,我什么都没做,只需要在 initialize()方法中引用下BidlinkPluginUtil.java中的addWorkspacePane()方法即可)
import org.jivesoftware.spark.plugin.Plugin;
public class BidlinkPlugin implements Plugin {
@Override
public boolean canShutDown() {
// TODO Auto-generated method stub
return false;
}
@Override
public void initialize() {
BidlinkPluginUtil.addWorkspacePane();
}
@Override
public void shutdown() {
// TODO Auto-generated method stub
}
@Override
public void uninstall() {
// TODO Auto-generated method stub
}
}
BidlinkPluginUtil.java
(这个类里面是功能方法的具体实现,具体效果不再介绍,一会有图片相送)
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import javax.swing.Icon;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;
import javax.swing.plaf.FontUIResource;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import org.jivesoftware.MainWindow;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.Workspace;
import org.jivesoftware.spark.component.tabbedPane.SparkTab;
import org.jivesoftware.spark.component.tabbedPane.SparkTabbedPane;
public class BidlinkPluginUtil {
/**
* 添加WorkspacePane
*/
public static void addWorkspacePane() {
Workspace workspace = SparkManager.getWorkspace();
SparkTabbedPane tabbedPane = workspace.getWorkspacePane();
JTextPane textPane = new JTextPane();
Document doc = textPane.getDocument();
SimpleAttributeSet attrSet = new SimpleAttributeSet();
// 颜色
StyleConstants.setForeground(attrSet, Color.RED);
// 加粗
StyleConstants.setBold(attrSet, true);
// 字体大小
StyleConstants.setFontSize(attrSet, 25);
StyleConstants.setBackground(attrSet, Color.YELLOW);
String content = "必联采购网——互联网第一个采购管理平台,"
+ "由中国政府商务部、财政部授权的唯一招投标采购在线业务平台," + "成立于2001年3月。坐落于北京中关村软件园区,"
+ "是一家拥有自主软件版权的大型企业";
try {
doc.insertString(doc.getLength(), content, attrSet);
} catch (BadLocationException e) {
e.printStackTrace();
}
// Add own Tab.
tabbedPane.addTab("必联介绍", new Icon() {
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
// TODO Auto-generated method stub
}
@Override
public int getIconWidth() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getIconHeight() {
// TODO Auto-generated method stub
return 0;
}
}, textPane);
}
}
build.xml
(这个是最重要的,它将完成编译,发布jar包的任务。红色标出的部分是比较重要的,因为BidlinkPlugin.java在编译的时候要引用其他类,所以必须指定引用jar包。spark.home 目录下有一个spark.jar,这个是spark最重要的资源包,pugin文件将会引用它,如果spark.home没有spark.jar文件,大家可以从安装版的spark的相应目录下拷贝到这个目录下,记住,要对应版本哦,这个实例是2.5.8的)
<?xml version="1.0" encoding="UTF-8"?>
<project name="bidlink" default="release" basedir="..">
<property name="src.dir" value="src" />
<property name="dest.dir" value="bin" />
<property name="lib.dir" value="lib" />
<property name="im.path" value="../../../target/build/plugins" />
<property name="spark.home" value="../../../target/build/lib" />
<path id="lib.classpath">
<fileset dir="${spark.home}" includes="**/*.jar, **/*.zip" />
</path>
<target name="clean">
<delete dir="${dest.dir}" />
<delete dir="${lib.dir}" />
<delete dir="${im.path}" />
</target>
<target name="init" depends="clean">
<mkdir dir="${dest.dir}" />
<mkdir dir="${lib.dir}" />
<mkdir dir="${im.path}" />
</target>
<target name="build" depends="init">
<javac srcdir="${src.dir}" destdir="${dest.dir}" classpathref="lib.classpath" target="1.6" />
</target>
<!-- 最重要的是这里,打两次包 -->
<target name="jar" depends="build">
<jar jarfile="${lib.dir}/bidlink.jar" basedir="${dest.dir}" />
<jar jarfile="${im.path}/bidlink.jar">
<fileset dir=".">
<include name="lib/*.jar" />
</fileset>
<fileset dir=".">
<include name="plugin.xml" />
</fileset>
</jar>
</target>
<target name="release" depends="jar">
</target>
</project>
plugin.xml
(这个文件里,最重要的内容我已经标出来了,其他的内容随便写,写错了也没啥大事)
<plugin>
<name>bidlink Plugin</name>
<version>1.0</version>
<author>linyu</author>
<homePage>http://www.bidlink.com</homePage>
<email>linyu19872008@gmail.com</email>
<description>Adds bidlink Desktop Search to Spark.</description>
<class>com.jivesoftware.spark.bidlink.plugin.BidlinkPlugin</class>
<minSparkVersion>2.5.8</minSparkVersion>
</plugin>
这样写插件,ant 然后eclipse下spark运行,如果插件加载那就再好不过了。如果不加载。你要进行下如下配置
-Dplugin="F:/ystworkspace/yishuitong/src/plugins/bidlink/plugin.xml" 这句话的作用大体是 运行spark的时候要加载这个插件。