openfire-spark 二次开发-(三)源码系统总览-1

spark源码结构

扯皮部分
上次搭建好了源码环境,准备开工修改。因为这次的任务只是改UI,UI按照新的UI来做。下面是美工给的UI。
登陆
联系人
行了,就放这两个部分吧。首先感谢美工做的这么用心,终于搞得我有一大批活要做了。

spark的UI是使用java swing做的。说实话,我swing是今天第一次接触了。以前学java,大家伙都说swing做界面很难看,没人用,学习难度也大。什么c#分分钟甩swing10条街,当初自己做过c++的MFC程序,人家都控件拖拽,这么牛逼。可怜的swing注定让我们搬一辈子砖。就不能自己开发个像visual studio那样的开发神器吗。哎。。。
扯皮完了,该干的事情还得干。

1、结构总图

源码环境配置好以后,eclispe的项目树会是这样子的。。。
项目树
这是Package视图

可以切换到Project视图,那么是这样子的
Project
这里写图片描述

还是Package视图好看
从命名上来看。。。至少有这么一堆暂时可以忽略
插件
他们都是spark的内置插件,而我目前只用到Fastpath,所以其他的插件源码我也就不看了,连本来的都搞不懂,还看那么多干嘛。

1、Build展开

展开Build如下:
demo

点进去源码,他是介绍如何写spark插件的,

public class ExamplePlugin implements Plugin{
    //每个plugin都必须实现Plugin
    public void initialize(){
    //初始化方法
    };
    public void shutdown(){
    //关闭方法
    };
    public boolean canShutDown(){
    //插件是否是一个可以被关闭的插件
    }; 
    public void uninstall(){
    //插件卸载方法
    }   
}

以后写插件就按照这样子就对了。
还有一个插件的属性类

public class ExamplePreference implements Preference{
    //这里面都是定义插件的一些属性,实现了Preference接口。里面方法有:
    String getTitle();//相当于要显示的插件名
    Icon getIcon();//插件的图标
    String getTooltip();//插件被选中的提示
    ………………
    //不想说了,自己看英文解释就行。    
}

这就是一个插件要实现的东西
总体上,Build展开就是一个插件例子。。。没啥看头

2、src/java

展开结构如图
src/java
没完。。。还有
src/java-2
说实话,看见这个这么多。。。我就开始冒冷汗。。不过还好。看人家的代码真是享受,那么整齐的规则,那么通俗的命名方式。基本一看就知道他们是干嘛的。接下来我挨个说说我对下面所有包的理解成果。说实话,我想自己重新开发,不想在spark上动工,看spark源码为了看看人家是怎样设计的。看有啥能抄的不。

(1)、org.jivesoftware

这里写图片描述

AccountCreationWizard.java  用户创建向导
GSSAPIConfiguration.java    应用程序配置
LoginDialog.java            登陆对话框
LoginSettingDialog.java     登陆框配置
MainWindow.java             主窗口
MainWindowListener.java     主窗口事件监听器
Restarter.java              spark重启类
Spark.java                  spark主类
SparkCompatibility.java     spark兼容性类
SparkStartupListener.java   spark启动监听器
(2)、org.jivesoftware.launcher

launcher

Installer.java          install4j安装打包spark
JiveClassLoader.java    应用程序的类加载器
Startup.java            这就是spark的启动主函数,之前配置spark的run configuration的时候就是他
(3)、org.jivesoftware.resource

这是spark的资源总类,相当于资源管理器。获取相应的资源,如图片、声音、图标、配置信息等
resource

ConfigurationRes.java   配置信息的资源管理器,管理configuration.properties
Default.java            默认的配置信息资源管理器。管理default.properties
Res.java                spark_i18n的资源管理器。管理i18n资源下的spark_i18n.properties
SoundsRes.java          声音资源管理器。管理sounds.properties
SparkRes.java           spark软件的资源管理器,包括spark的各种小图标,按钮,等。管理spark.properties

configuration.properties
default.properties
sounds.properties
spark.properties        上面四个都是对应的被管理的资源。如果要修改某个icon,按钮显示文本,提示音等。都在这里修改就是
特别值得注意的是:在default.properties里面有一行配置。叫做
DEFAULT_LOOK_AND_FEEL = com.jtattoo.plaf.luna.LunaLookAndFeel
因为spark引入了substance.jar,而这个jar就是著名的主题包,里面有很多主题,很多的LookAndFeel
我们只需要修改这一行配置,spark整个画风都变了。

下面请看操作。找到引入的substance.jar,展开如图
这里写图片描述

找到org.jvnet.substance.skin。展开如图
这里写图片描述
所有的xxxLookAndFeel都是可以用的主题。现在我们把default.properties中的DEFAULT_LOOK_AND_FEEL修改一下。改变为

DEFAULT_LOOK_AND_FEEL = org.jvnet.substance.skin.SubstanceDustCoffeeLookAndFeel

然后运行spark。效果图如下
这里写图片描述

这里写图片描述
咖啡色调 就这样吧—-想改了自己慢慢一个个试就行。

(4)、org.jivesoftware.spark

spark

'ChatAreaSendField.java'        聊天域定义
'ChatManager.java'          聊天管理器,创建聊天,获取聊天,创建会议室等都在这里
'ChatNotFoundException.java'    自定义异常。
'DataManager.java'      数据管理器,其实是房间信息的元数据管理器。单例的。

'NativeHandler.java '       
本地处理器,这是个接口,主要方法有处理通知消息,窗口闪现功能。窗口闪现的函数是使用jni编写的。要加载FlashWindow.dll文件,在src/plugins/flashing/build/lib下面,有个64位的和32位的。org.jivesoftware.spark.plugin.flashing.FlashWindow这个类是实现窗口闪现的类,你可以在/spark/src/plugins/flashing/src/c下找到.c和.h文件,熟悉jni的同学可以测试一下。

'NativeManager.java'        
对要闪现的窗口进行管理,让他们闪现或者停止闪现的功能

'PluginManager.java'            
插件管理器,里面有增加,加载,移除插件的方法

'PresenceManager.java'      
用户状态管理器,在线、离线、离开等等。里面的方法有根据jid获取用户是否在线、离线等。获取状态对应的图标。

'SessionManager.java'
他实现了ConnectionListener,也就是当连接状态变化时,会保存或者清空相应的信息。关闭连接后发送presence状态……

'SoundManager.java'
声音管理器,主要加载一些声音资源以及播放声音等功能。

'UserManager.java'
用户管理器。这里面功能比较多。可以获取用户昵称(是根据vcard的信息获取),获取房间里面的所有用户jid,判断用户是否房间创建者/成员/管理员,构造联系人列表,并添加事件监听(双击打开聊天,右键菜单,esc关闭聊天窗口等)

'SparkManager.java'
前面那么多的Manager都是一些使用中的功能api,从代码可以看出sparkManager是内聚了所有的Manager。
    public final class SparkManager
可以看出他是个final类,不能被继承也不会有子类,所有的成员也都是静态的,构造函数私有的,也是不允许外部创建。一个spark程序就这么一个类,总的资源管理器。final确保内部东西不会被改变。

'Workspace.java' 
这里主要是spark启动时加载所有的插件方法,还有处理数据包方法。单例模式,私有构造方法,只会创建一次。创建的时候会添加各种组件。拼装spark工作台界面。
  (5)、org.jivesoftware.spark.component

各种组件呀。
component

'AutoCompleteDocument.java'
实现自动完成功能的组件,里面有main()函数,可以直接运行测试

'BackgroundPanel.java'
背景图面板。 
final Image backgroundImage = Default.getImageIcon(Default.TOP_BOTTOM_BACKGROUND_IMAGE).getImage();
从这里可以看出加载的是default.properties里面指定的资源(img),最后找到这个资源图片,发现他在spark中应用的位置是这里

这里写图片描述
还有这里
这里写图片描述
就是面板背景。可能还有其他的地方。我换成这个咖啡主题就会很容易发现

'CheckBoxList.java'
多选按钮组的类,封装的不错。可以动态增加一个多选框,可以获取所有选择的多选框的值,返回的是一个List<String>

'CheckNode.java'    自定义的一个选择节点
'CheckRenderer.java'    树形的菜单
'CheckTree.java'        树形多选菜单
'ConfirmDialog.java'    确认对话框
'DroppableFrame.java'   拖拽层
'FileDragLabel.java'        文件拖拽层
'HTMLViewer.java'       HTML视图层
'IconTextField.java'        有图标的文本框
'ImageTitlePanel.java'  有标题的图片面板,相当于QQ聊天的点击查看图片一样吧
'InputDialog.java'      输入对话框
'JContactItemField.java'    联系人属性
'JiveSortableTable.java'    排序表格
'JiveTable.java'        表格
'JiveTreeCellRenderer.java' 树形菜单
'JiveTreeNode.java'     树节点
'JMultilineLabel.java'  多分隔线面板
'LinkLabel.java'    输入url,直接打开连接,使用系统浏览器打开的
'MessageDialog.java'    消息对话框,不是聊天的。错误弹窗,alert功能的
'PasswordDialog.java'   密码对话框
'ProgressIcon.java'     正在处理的进度图标
'RolloverButton.java'   翻转的按钮,可能是吧...
'RosterTree.java'       联系人分组列表树
'ScrollPaneWatermark.java'  水印面板吧...
'Table.java'        表格
'TimeTrackingLabel.java'        时间面板,每秒刷新的。
'TitlePanel.java'       带标题,图标,还有设置默认背景的面板
'Tree.java''TreeFolder.java'   文件夹树
'TreeItem.java'     树的每个节点
'VerticalFlowLayout'    垂直流布局
'WrappedLabel'  就是一个label

好了,先到这儿吧。。。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值