package org.infosec.ismp.applet.discover.service;
import java.util.ArrayList;
import java.util.List;
import org.infosec.ismp.applet.comm.util.HttpInvokerProxyFactoryBeanUtil;
import org.infosec.ismp.applet.comm.util.ServerConfig;
import org.infosec.ismp.applet.discover.listener.SearchListener;
import org.infosec.ismp.applet.discover.thread.ICMPSearchThread;
import org.infosec.ismp.manager.rmi.tm.discover.model.Node;
import org.infosec.ismp.manager.rmi.tm.discover.model.appletForm.ICMPAppletForm;
import org.infosec.ismp.manager.rmi.tm.discover.service.applet.ICMPSearchService;
/**
* ICMP搜索方法类service类
* @author Wu Guojie
* @date 2009-6-11
* @version 1.0
*/
public class ICMPSearchAppletService {
/**
* 搜索线程
*/
private static ICMPSearchThread icmpSearchThread = null;
/**
* 搜索方法service
*/
private static ICMPSearchAppletService service = null;
/**
* 构造器
*/
private ICMPSearchAppletService(){}
/**
* 实例化搜索方法service
* @return 搜索方法service
*/
public static ICMPSearchAppletService getInstance(){
if(service==null){
service = new ICMPSearchAppletService();
}
return service;
}
/**
* 创建icmpSearchService
*/
ICMPSearchService icmpSearchService = getICMPSearchService();
/**
* 远程获取icmpSearchService
* @return ICMPSearchService实例
*/
public ICMPSearchService getICMPSearchService(){
try{
ICMPSearchService service = (ICMPSearchService)HttpInvokerProxyFactoryBeanUtil
.getService(ServerConfig.getServerPath()+"/remoting/icmpSearchServiceRemoting", ICMPSearchService.class);
return service;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 搜索
* @param icmpAppletForm
* icmpAppletForm
* @return 搜索结果list
*/
public List<Node> doSearch(ICMPAppletForm icmpAppletForm, SearchListener listener) {
icmpSearchThread = new ICMPSearchThread(icmpAppletForm, listener);
icmpSearchThread.start();
/**
* 结果list
*/
List<Node> list = new ArrayList<Node>();
list = icmpSearchThread.getList();
// listener.onSearchFinished();
return list;
}
/**
* 停止搜索
*/
public void stopSearch(boolean silent){
icmpSearchThread.stopped(silent);
}
/**
* 保存节点
*/
public void addNodeList(List<Node> list){
icmpSearchThread.addNodeList(list);
}
/**
* 是否有人正在执行搜索功能
* @return 是/否
*/
public boolean isSearching(){
boolean isSearching = false;
try{
if(icmpSearchService!=null){
try{
isSearching = icmpSearchService.isSearching();
}catch(Exception e1){
throw new Exception("远程服务icmpSearchService不可用!");
}
}else{
throw new Exception("未能获取远程服务icmpSearchService!");
}
}catch(Exception e){
e.printStackTrace();
}
return isSearching;
}
/**
* 是否有人正在执行搜索功能
* @param listener
* 监听器
* @return 是/否
*/
public boolean isSearching(SearchListener listener){
boolean isSearching = false;
try{
if(icmpSearchService!=null){
try{
isSearching = icmpSearchService.isSearching();
}catch(Exception e1){
listener.remoteServiceExecuteError("远程服务没响应,请稍候再试!");
throw new Exception("远程服务icmpSearchService.isSearching不可用!");
}
}else{
listener.remoteServiceNotResponse("远程服务没响应,请稍候再试!");
throw new Exception("未能获取远程服务icmpSearchService!");
}
}catch(Exception e){
e.printStackTrace();
}
return isSearching;
}
/**
* 方法说明:获取所有已经向Manager注册的AgentBO列表(邓东和数据库的交际)
* @return
*/
// public List<AgentBO> getAllRegisteredAgentBO(){
// List<AgentBO> list = new ArrayList<AgentBO>();
// try{
// list = icmpSearchService.getAllRegisteredAgentBO();
// }catch(Exception e){
// e.printStackTrace();
// }
// return list;
// }
}