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