理论教育 搜索与共享功能的实现及主要程序设计

搜索与共享功能的实现及主要程序设计

时间:2023-04-14 理论教育 版权反馈
【摘要】:实现结果如图4.6所示,主要程序设计如下。

搜索与共享功能的实现及主要程序设计

1. 搜索功能的实现

本书采用基于目录服务的文件共享方式,目录服务器保存它所连接的所有普通节点的IP地址和对应地址下的可共享学习资料的主题或关键词,提供目录检索服务。实现结果如图4.6所示,主要程序设计如下。

(1) MySearchListener类的作用是监听其他节点(peer)对本服务器上资源的检索,实现了接口SearchListener,实现接口下定义的方法——queryReceived()方法,当某个节点发出的检索请求到达本服务器时,会激发queryReceived(String)方法,检索到本服务器上的资源。

class MySearchListener implements SearchListener

{

public void queryReceived(String queryString)

{

System.out.println("List request with query \""+ queryString+"\" received.");

}

}

(2) 当检索结果返回时,检索结果以ContentAdvertisement[]的形式存在,我们首先将结果放到类变量results中,然后将结果显示到一个JList的Model∶ result_listModel中。

protected void updateResults(ContentAdvertisement[] results)

{

this.results = results;

result_listModel.removeAllElements(); //删除原有的结果

//插入新的结果到result_listMode中

for (int i=0; i,result_listModel.addElement(results[i].getName())

}

从检索结果中选择需要下载的资料,根据资料所对应的地址进行链接并获取资料。程序设计如下,实现结果如图4.6所示。

VisibleContentRequest文件下载类从GetContentRequest类继承并实现ActionListener_接口;

//定义成员变量

JDialog dialog;//用于显示当前下载情况

JProgressBar statusBar;//显示当前下载进度

JButton cancelButton;//用于取消当前下载

//对GetContentRequest类中下列方法重新实现

notifyDone();//下载完成时被调用

notifyFailure();//下载失败时被调用

notifyUpdate(int percentage);// 当文件中更多的部分被下载时被调用

class VisibleContentRequest extends GetContentRequest implements ActionListener

{

JDialog dialog;

JProgressBar statusBar = new JProgressBar();

JButton cancelButton = new JButton("Stop");

public VisibleContentRequest(JFrame parent, ContentAdvertisement source

File destination)

{

super(netPeerGroup, source, destination);

dialog = new JDialog(parent, "Downloading "+destination.getName());

dialog.setSize(240, 80);

dialog.setLocation(400,400);

statusBar.setStringPainted(true);

dialog.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));

dialog.getContentPane().add(statusBar);

cancelButton.addActionListener(this);

dialog.getContentPane().add(cancelButton);

dialog.setVisible(true);

}

public void actionPerformed(ActionEvent ae)

{

//单击”stop”按钮暂停进程运行

if(ae.getSource() == cancelButton)

{

cancel();

System.out.println("download of " + getFile()+ " cancelled by user.");

dialog.dispose();(www.daowen.com)

dialog = null;

}

}

//下载完成时被调用

public void notifyDone()

{

System.out.println("download of "+getFile()+" done.");

dialog.dispose();

dialog = null;

}

// 下载失败时被调用

public void notifyFailure()

{

System.out.println("download of "+getFile()+" failed.");

}

//当文件中更多的部分被下载时被调用

public void notifyUpdate(int percentage)

{

statusBar.setValue(percentage);

}

}

2. 共享功能的实现

共享资料是为协作成员间共享或推荐文档、资料、应用程序等资源提供的功能模块,协作小组中每个成员都有权利上传资料,并对其他协作成员都是可见的。上载的资料使用数据库技术记录其相对位置,然后使用ASP生成资料的链接,以供下载。主要程序设计如下,实现结果如图4.6所示。

图4.6

(1) 首先添加一个方法private void updateLocalFiles()用于将当前机器的CMS中共享的内容显示到j List2中:

private void updateLocalFiles()

{

ContentManager.getContent() //获取被当前节点共享的所有内容

Content[] content = cms.getContentManager().getContent();

//从j List2的Model中删除原有的共享内容

file_listModel.removeAllElements();

//把当前的内容添加到j List2中

for (int i=0; i<sl.length; i++)

{

file_listModel.addElement(content[i].getContentAdvertisement().getName());

}

}

(2) 取消原有共享内容,使用cms.getContentManager().getContent()当前节点共享的文件的ContentAdvertisement数组,然后使用cms.getContentManager().unshared (ContentAdvertisement content)方法将原有共享的内容去除共享。

cms.getContentManager().unshared()

{

void jButton3_actionPerformed(ActionEvent e)

{

try

{

cms.getContentManager().unshare(cms.getContentManager().getContent()[jList2.

getSelectedIndex()]);

}

catch(IOException ex)

{

System.out.println("不能移去该共享文件");

}

this.updateLocalFiles();

}

}

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈