1、系统软件具体设计说明书1.引言1.1编写目标 本具体设计说明书是针对网络信息体系结构课程作业而编写。目标是对该项目进行具体设计,在概要设计基础上深入明确系统结构,具体地介绍系统各个模块,为进行后面实现和测试作准备。本具体设计说明书预期读者为本项目小组组员和对该系统感爱好,在以后想对系统进行扩展和维护人员。2. 系统结构l ui:系统界面部分,负责接收用户输入,显示系统输出,负责其它模块功效协调调用,并含有站内搜索功效,即在用户指定已打开ftp站点中搜索用户需要资源。ui部分调用common部分功效读取xml文件中保留界面元素属性信息,用户最近访问过10个ftp信息,用户选择下载ftp内容列表及
2、其它需要经过xml文件保留信息。l client:实现ftp用户端功效,ftp连接,ftp上传及下载:上传或下载用户指定资源,并返回对应信息。l search:资源实时检索部分,依据用户输入资源名称关键字,资源类型和选择检索方法检索用户需要资源,并验证资源可用性,返回可用资源及其大小,速度等相关信息。l preview:资源预览部分,显示用户选择资源部分内容,以使用户决定是否需要该资源。preview部分调用common部分读取属性文件内容亦显示预览资源内容显示格式。3模块1(ui)设计说明3.1模块描述 实现用户界面包,含有11个文件51个类,是本系统中最复杂代码。3.2功效 负责接收用户输
3、入,显示系统输出,其它模块功效协调调用,并含有站内搜索功效,即在用户指定已打开ftp站点中搜索用户需要资源。3.3交互模块 client,search,preview,common。3.4 模块设计 该模块中关键文件,文件中包含关键类及其功效和和其它包交互以下:l MainFrame.java:MainFrame是含有主函数类,也是lyra用户端开始实施类,它前后进行资源初始化,显示主界面等工作,依据屏幕大小设置界面大小,设置界面观感。l FtpFrame_AboutBox.java:显示相关窗口类,当用户点击帮助菜单中相关菜单项时会弹出相关对话框。l Tools.java:FileTools
4、是文件操作辅助类,能够实现文件递归删除等。l XMLController.java: JDOMTes是操作xml文件类,用JDOM来操作xml文件,实现功效有:(1)保留ftp服务器文件列表(站内搜索时使用),递归从ftp服务器读取列表,并存入一个xml文件中(文件命名方法是:ip+用户名.xml);以目录树形式保留。(2)依据文件名在文件中查找文件,站内搜索时使用。(3)保留ftp服务器信息:ip,端口(默认端口21不保留),用户名(默认anonymous不保留),密码,最多存10个;存在resourcesettings serversinfor.xml文件中。(4)读取已存放ftp服务器信
5、息。(5)从type.xml读取搜索类型。l Constants.java:放置系统运行时使用部分常量,initcontent()函数对全部常量进行初始化,这个函数在MainFrame中被调用一次。iconHashMap是hash表,用于存放文件系统图标。l CustomizedController.java:包含自定义控件类,java中控件可能不能满足需求,需要自己定义一些属性。这些控件会在创建界面时使用。其中含有类有:(1)CustomizedJTable 是表格类,设置表格一些属性,如字体等。(2)CustomizedTableCellRenderer是表格单元格绘制器类,关键用于显示文
6、件系统图标,和文件名。(3)LeftPanel类父类是JTabbedPane,用户显示主窗口左边面板。(4)RightPanel类父类是JPanel,用户显示右边专题部分,包含右上边搜索及服务器选项,和中间显示服务器文件TabbedPane。.(5)BottomPanel类是右下放显示下载和服务器信息JTabbedPane。(6)CustomizedJButton 是定义按钮类,更改了按钮字体,java本身默认字体不好看。(7)CustomizedTableModel是表格类,实现单元格不可编辑。(8)CustomizedTableCellRenderer_Remote类是表格绘制器,在远程文
7、件浏览器RemoteFilesPanel使用,用于显示文件名和文件图标。(9)FontTableCellRenderer类是表格单元格绘制器,关键功效是设置字体。(10)FontListCellRenderer类是下拉列表框单元格绘制器,关键用于设置字体。(11)CustomizedJLabel类是自定义标签类,重新设置了标签字体。(12)CustomizedJTextField类是自定义文本框类,关键用于设置文本框显示属性。(13)CustomizedJMenu类是自定义菜单类,重新设置了菜单字体。(14)CustomizedJMenuItem类是自定义菜单项类,重新设置了菜单字体。(15)
8、CustomizedListCellRenderer类是JComboBox即组合框单元格绘制器,用于在当地路径选择下拉列表中显示磁盘图标。l SearchResultReceiver.java, SearchResultReceiver是一个接口,关键用于返回搜索结果。搜索完成后调用接口中函数通知调用者。其中关键有两个函数:(1)OnSearchFinished(String keywords,ArrayList resultset);result是一个10维数组表result10,resulti是由类型为i资源组成数组。i:09,和类型列表框中次序一致。(2)OnSearchFinished
9、(String keywords,ArrayList resultset);不分类型,将全部资源放在一个数组表中。l FtpFrame.java:FtpFrame是程序主窗口类,类型为JFrame,是由三个分割窗口JSplitPane组成。jSplitPane_Left是左边分割窗口,水平分割条上边显示当地文件框,下边是预览框;jSplitPane_Right是右边分割窗口,水平分割条上边是服务器选项和ftp服务器文件显示窗口,下边是下载和服务器信息显示窗口;jSplitPane_Whole是整体分割窗口,垂直分割条,左边是jSplitPane_Lef,右边是jSplitPane_Right。
10、FtpFrame把LeftPanel,RightPanel,BottomPanel,PreviewWrapperPanel这几部分安装在对应分割窗格中;LeftPanel,RightPanel,BottomPanel是在CustomizedController.Java中定义,PreviewWrapperPanel是在Preview包中定义。l LeftPanelCtrl.java:LocalFilesPanel是当地文件面板,用表格来显示当地文件信息。上边是组合框,显示了磁盘分区经过这里能够改变根目录。表格中显示了文件信息,包含文件名,文件系统图标,大小,最近修改日期,属性等。选中一个文件后
11、能够实施上载和删除操作。文件夹会递归删除。GetCurrentPath()函数返回目前路径。DisplayPathFiles()函数在列表中显示指定目录下文件。l RightPanlCtrl.java:定义右上边控件。含有类有:(1)FtpServerOptionPanel类是服务器连接选项面板,包含服务器地址,端口,用户名,密码等,还包含最上端搜索选项。openRemoteFilesPanel()函数在下面TabbedPane中打开一个新服务器面板,连接服务器。(2)RemoteFilesPanel类关键功效是连接Ftp服务器并显示文件。这里会进行文件上载,下载及预览等操作。RemoteFi
12、lesPanel 内部类TransferController负责调用FtpClient类提供功效和服务器进行交互,完成用户指定文件操作。TransferController还有三个内部类:ConnThread类是负责连接服务器线程(新开一个线程,目标是避免连接时阻塞),DownloadFileThread类是下载文件线程,UploadFileThread类是上载文件线程。(3)SearchResultPanel类是显示搜索结果类,它有两个子类SearchResultPanelWithinSearchEngine类功效是在搜索引擎中搜索,SearchResultPanelWithinServer
13、类功效是站内搜索。搜索引擎搜索会调用search包中程序,搜索引擎搜索完成后search包经过OnSearchFinished()来通知SearchResultPanelWithinSearchEngine类,然后显示搜索结果。(4)RightTabbedPane是显示ftp服务器文件表格TabbedPane类。l BottomPanelCtrl.java:实现主窗口下部面板及控件,显示下载情况,服务器连接信息。包含关键类有:(1)RemoteMessPanel类是显示服务器连接信息面板。需要显示ftp服务器传回信息,并在显示前进行编码转换,还需要显示当地相关信息。(2)Downloading
14、MessPanel类是显示资源下载信息面板,显示下载资源大小,下载速度,已用时间,剩下时间等信息。3.5步骤逻辑总体步骤:上载预览FtpClient.class显示下载信息searchRightPanel.classPreviewWrapperPanelBottomPanel.classLeftPanel.classFtpFrame.classMainFrame.class3.6 简单类图4模块2(client)设计说明4.1模块描述 实现ftp用户端FtpClient,有两个文件FtpClient.java和FtpLoginException.java,前者具体实现了ftp协议,后者是为登录
15、时可能抛出异常而定义类。4.2功效 实现ftp用户端FtpClient,实现了ftp协议,用于和ftp服务器通讯和数据传输。4.3交互模块 ui 4.4 模块设计 该模块中关键文件,文件中包含关键类及其功效和和其它包交互以下:l FtpClient.java:含有类FtpClient,,该类会被ui包中界面类调用,完成ftp功效。其中要功效实现有:在结构函数中依据ip和port建立和服务器连接;登录服务器login()(用户名,密码);向服务器追加ascii文件appendAscii();向服务器追加二进制文件appendBinary();设置数据传输方法为二进制binary,ascii码sc
16、ii();改变工作目录cd(String newdirectory);返回上一级目录cdup();断开连接closeserver();删除文件 delete(文件名);删除文件夹 rmdir(文件夹名字);用ascii模式下载文件getAscii(文件名);用二进制方法下载文件getBinary(文件名);取得服务器响应字串 getResponseString();列举目前目录下文件list(),指定目录下文件list(文件名);创建文件夹mkdir(文件夹名);上载Ascii文件putAscii(文件路径),二进制putBinary()。l FtpLoginException.java:含有
17、类FtpLoginException,定义登录时可能抛出异常。5模块3(common)设计说明5.1模块描述 存放部分辅助类,系统开启时会从properties.xml读取部分配置信息。能够经过手动修改配置信息来修改系统一些显示属性如字体,字大小等。5.2功效存放部分辅助类,比如用于读取和存放系统配置属性类。用于将“属性名属性值”对存放在properties.xml文件中类。5.3交互模块 ui 5.4 模块设计 该模块中关键文件,文件中包含关键类及其功效和和其它包交互以下:l Properties.java: 含有类Properties,这是读取和存放系统配置属性类。其关键功效实现以下: 函
18、数getProperty()依据属性名取得属性值,假如属性不存在返回null;函数getProperties()依据属性名列表返回属性值列表,返回值为ArrayList,其中每一个元素是PropertyValue对象;函数setProperty()设置单个属性值;函数setProperties()设置多个属性值;函数readXMLFromFile()读取xml文件;函数buildXML()在xml文档中存入数据;l PropertyValue.java:含有类PropertyValue,在xml文件中存放“属性名属性值”对。6模块4(search)设计说明6.1模块描述 包search关键完整
19、天网和baidu两项搜索功效。它含有以下6个类:NetResource,URLParser,ConnectionTester,SearchResultRetriever,EmbeddedFileRetriever,HttpRetriever。6.2功效关键完整天网和baidu两项搜索功效。6.3交互模块 ui 6.4 模块设计 该模块中关键文件,文件中包含关键类及其功效和和其它包交互以下:l NetResource.java:含有类NetResource,NetResource是对被天网索引网络文件资源抽象,其字段有:fileURL(文件资源URL,包含协议、主机字符串、路径、文件名)、fil
20、eDate(天网将它编入索引日期)、fileSize(文件大小)、responseTime(以毫秒计算响应时间)。函数smallerThan(NetResource nr)比较本条资源响应时间是否比nr响应时间小,因为要求响应时间小NetResource排在对应时间大前面。l URLParser.java:含有类URLParser,URLParser是一个工具箱类,它提供了若干静态方法,对一个文件资源URL进行解析。其实现方法有:函数getProtocol():给定一个URL,返回其协议名称;函数getHostName():给定一个URL,返回主机字符串;函数getPath():给定一个URL
21、,返回文件在主机中存放路径;函数getFileName():给定一个URL,返回文件名;函数getSuffix():给定一个URL,返回该URL对应文件资源后缀名。l ConnectionTester.java:含有类ConnectionTester,ConnectionTester是用来对网络文件资源进行连接测试类,它实现了Runnable接口。SearchResultRetriever类将ConnectionTester类作为模板生成很多线程并发地对各文件资源进行连接并测试对应时间,以提升程序效率。每个网络文件全部是用NetResource类表示。对于ftp文件,ConnectionTes
22、ter尝试以匿名方法连接。假如连接失败则丢弃该资源URL,若连接成功则依据连接它响应时间将其插入已排序NetResource列表中。对于http文件,ConnectionTester建立一个新URLConnection,并调用connect方法尝试连接。假如连接失败则丢弃该资源URL,若连接成功则依据连接它响应时间将其插入已排序NetResource列表中。在结构ConnectionTester类对象时必需指定一个由NetResource类对象组成ArrayList,其中每个NetResource全部需要测速。该类功效关键由函数run()实现。l SearchResultRetriever.j
23、ava:含有类SearchResultRetriever,SearchResultRetriever类依据给定关键字和文件类型向天网文件搜索引擎发送请求,对各返回结果页面源文件进行分析,将全部网络文件资源URL进行分类(利用天网分类方法)并保留在10个ArrayList中。该类函数以下:函数test()判定这个下一页对应URL是否正当,该问题仅在用程序访问天网时需要考虑函数retrieve()依据输入关键字String tokens向天网发出请求,取得返回URL集合,ArrayList0保留图片imagefile;ArrayList1保留音乐soundfile;ArrayList2保留电影vi
24、deofile;ArrayList3保留压缩zipfile;ArrayList4保留文档docfile; ArrayList5保留程序programfile;ArrayList6保留源码srcfile;ArrayList7保留网页webfile;ArrayList8保留目录dirfile;ArrayList9保留其它file。对每一个ArrayList生成若干ConnectionTester线程进行响应时间测试,在这些线程返回后每一个ArrayList中网络文件资源全部已经根据响应时间递增次序排列,而无法连接文件资源URL全部已被丢弃。SearchResultRetriever类使用方法是调用
25、它函数retrieve(String tokens, int type),其中tokens为表示关键字字符串数组;type表明用户需要搜索什么类型文件。该方法将上述10个ArrayList组成一个数组并返回。l EmbeddedFileRetriever.java:含有类EmbeddedFileRetriever,EmbeddedFileRetriever类作用是提取网页汉字件链接,它实现了Runnable接口。HttpRetriever类将EmbeddedFileRetriever类作为模板生成若干线程并发地提取不一样网页内文件链接,以提升程序效率。EmbeddedFileRetriever
26、类维护了一个网页后缀名列表,因为程序只提取对应文件资源URL,我们需要分辨哪些后缀名是对应网页从而立即将它们丢弃。在结构类EmbeddedFileRetriever对象时必需指明从哪个网页URL中提取文件URL,和这些URL保留在哪个ArrayList中。函数hasFileSuffix()功效是判定一个url是否链向一个文件;函数listFiles(String URLStr)将URLStr对应页面中全部文件加到ArrayList中并返回。l HttpRetriever.java:含有类HttpRetriever,HttpRetriever类功效是依据给定关键字向baidu搜索引擎发送请求,抽
27、取前20个返回结果对应网页URL。对每一个页面生成一个EmbeddedFileRetriever对象提取其中对文件链接,并添加到一个ArrayList中。每个页面全部处理完成后返回这个ArrayList。在利用搜索文件时,应该提供尽可能多信息,如输入歌手姓名和“mp3”作为关键字。假如仅给定歌手名称则搜索效果不佳。这些功效全部是由函数retrieve()实现。6.5类图7模块5(preview)设计说明7.1模块描述 系统预览部分,实现了不一样类型资源预览,并能够依据用户选择格式显示资源内容。 7.2功效 多种类型资源预览,能够依据用户选择格式显示资源内容,并能够存放用户选择预览内容。7.3交
28、互模块 ui 7.4 模块设计 该模块中关键文件,文件中包含关键类及其功效和和其它包交互以下:l PreviewWrapperPanel.java:含有类PreviewWrapperPanel,这是系统预览部分最基础类,它派生自Jpanel类,关键由3部分组成,其中PreviewPanel负责显示预览,StatusBarPanel负责显示预览文件加载进度,ControlButtonPanel负责和预览相关控制。在显示资源预览内容前应该先判定该资源类型是否能够预览。l PreviewPanel.java:含有类PreviewPanel,这是一个抽象类,负责资源内容预览,有5个子类,这5个子类分别
29、是PicturePreviewPanel类:负责图像文件预览;PDFPreviewPanel类:负责PDF文件预览;TxtPreviewPanel类:负责文本文件预览;NoFileSelectedPreviewPanel类:负责当用户没有选项文件预览时显示提醒信息;NoPreviewPanel类:负责当用户选择文件不能预览时,显示提醒信息。PreviewPanel类实现关键功效是结构预览窗口实例,有两种结构方法:以默认大小结构或以指定大小结构。PreviewPanel类函数preview()是一个虚函数,系统能够依据不一样子类调用不一样预览函数。l PicturePreviewPanel.ja
30、va:含有类PicturePreviewPanel,它关键功效是图像文件预览,其中有4个内部类,分别是:ImagePanel类:这是显示图像JPanel,关键功效是绘图;PopupListener类:用户单击右键弹出菜单类,右键功效是设置图像显示是“适合窗口”还是“原始大小”;picPopupMenuListener类:负责对右键菜单中事件响应。PictureFromDiskLoader类:负责从磁盘上加载图像文件。l TxtPreviewPanel.java: 含有类TxtPreviewPanel,它关键功效是文本文件预览,其中有5个内部类,分别是:PopupListener类:用户单击右键
31、弹出菜单类,txtPopupMenuListener类:负责对右键菜单中事件响应;FileFromDiskLoader类:负责从磁盘加载文本文件;FontChooseDialog类:字体选择对话框;FontDialogEditorMediator类:负责对话框选择字体和预览区域显示字体之间更新。l PDFPreviewPanel.java:含有类PDFPreviewPanel,该类使用第三方软件包JPedal来实现pdf文件预览。l ControlButtonPanel.java:含有类ControlButtonPanel,该类功效是依据用户选择保留预览资源,即把预览文件存放到用户选定目录。她功效关键由两个内部类来实现,分别是:saveAction类:实现了接口ActionListener,是对预览资源保留按钮响应,实现预览资源保留功效,把预览文件存放到用户选定目录。ExampleFileFilter类:继承自类FileFilter,实现用户选择文件保留目录功效,即弹出文件选择对话框。7.5类图