/**
* Este arquivo é parte do Biblivre3.
*
* Biblivre3 é um software livre; você pode redistribuí-lo e/ou
* modificá-lo dentro dos termos da Licença Pública Geral GNU como
* publicada pela Fundação do Software Livre (FSF); na versão 3 da
* Licença, ou (caso queira) qualquer versão posterior.
*
* Este programa é distribuído na esperança de que possa ser útil,
* mas SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de
* MERCANTIBILIDADE OU ADEQUAÇÃO PARA UM FIM PARTICULAR. Veja a
* Licença Pública Geral GNU para maiores detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU junto
* com este programa, Se não, veja em <http://www.gnu.org/licenses/>.
*
* @author Alberto Wagner <alberto@biblivre.org.br>
* @author Danniel Willian <danniel@biblivre.org.br>
*
*/
package biblivre3.z3950;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mercury.BaseBO;
import org.jzkit.z3950.server.Z3950Listener;
import org.marc4j_2_3_1.marc.Record;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
*
* @author Danniel Nascimento (dannielwillian@biblivre.org.br)
* @since 10/02/2009
*/
public class Z3950BO extends BaseBO {
private static ApplicationContext context;
private static Z3950LocalServer server;
private Z3950DAO dao;
public Z3950BO() {
dao = new Z3950DAO();
this.getContext();
}
public final Boolean getServerStatus() {
return server != null ? server.isActive() : false;
}
public final boolean startServer() {
if (server == null) {
server = new Z3950LocalServer();
Z3950Listener listener = new Z3950Listener();
listener.setBackendBeanName("backend");
listener.setDefault("default");
listener.setPort(2200);
listener.setApplicationContext(this.getContext());
server.setListener(listener);
}
if (!server.isActive()) {
server.startServer();
}
return server.isActive();
}
public final boolean stopServer() {
if (server != null) {
server.stopServer();
server = null;
}
return false; //False here means that the server is inactive
}
public final Map<Z3950ServerDTO, List<Record>> doSearch(final List<Z3950ServerDTO> servers, final Z3950SearchDTO dto) {
Z3950Client z3950Client = (Z3950Client)getContext().getBean("z3950Client");
Map<Z3950ServerDTO, List<Record>> recordMap = new HashMap<Z3950ServerDTO, List<Record>>();
for (Z3950ServerDTO searchServer : servers) {
try {
List<Record> recordList = z3950Client.doSearch(searchServer, dto);
if (recordList != null && !recordList.isEmpty()) {
recordMap.put(searchServer, recordList);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return recordMap;
}
public final List<Z3950ServerDTO> listServers() {
return dao.listServers();
}
public final boolean insert(Z3950ServerDTO dto) {
return dao.insert(dto);
}
public final boolean update(Z3950ServerDTO dto) {
return dao.update(dto);
}
public final boolean delete(Z3950ServerDTO dto) {
return dao.delete(dto);
}
public final Z3950ServerDTO findById(Z3950ServerDTO dto) {
return dao.findById(dto);
}
public final Z3950ServerDTO findById(String id) {
Z3950ServerDTO dto = new Z3950ServerDTO();
dto.setServerId(Integer.parseInt(id));
return dao.findById(dto);
}
private ApplicationContext getContext() {
if (context == null) {
try {
context = new ClassPathXmlApplicationContext("applicationContext.xml");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
return context;
}
}