/**
* 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.cataloging;
import biblivre3.cataloging.authorities.AuthoritiesBO;
import biblivre3.cataloging.bibliographic.BiblioBO;
import biblivre3.cataloging.bibliographic.FreeMarcBO;
import biblivre3.cataloging.vocabulary.VocabularyBO;
import biblivre3.enums.Database;
import biblivre3.enums.MaterialType;
import biblivre3.enums.RecordStatus;
import biblivre3.marcutils.MarcReader;
import biblivre3.utils.ApplicationConstants;
import biblivre3.utils.TextUtils;
import java.util.HashMap;
import java.util.Scanner;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import mercury.BaseHandler;
import mercury.Dialog;
import mercury.I18nUtils;
import mercury.MemoryFileDTO;
import mercury.UploadedFileBean;
import org.apache.commons.lang.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.marc4j_2_3_1.marc.Record;
public class CatalogingHandler extends BaseHandler {
@Override
public String processModule(HttpServletRequest request, HttpServletResponse response, String submitButton, HashMap<String, String> requestParametersHash) {
if (submitButton.equals("EXPORT_RECORD")) {
final String recordIds = request.getParameter("serial_list");
final BiblioBO bo = new BiblioBO();
final MemoryFileDTO export = bo.export(recordIds.split(","));
if (export != null) {
this.returnFile(export, response);
}
return "x-download";
} else if (submitButton.equals("UPLOAD_IMPORT")) {
String records = "";
int totalRecords = 0;
int validRecords = 0;
final HttpSession session = request.getSession();
final UploadedFileBean file = (UploadedFileBean) session.getAttribute("UPLOADED_FILE");
if (file != null) {
final StringBuilder builder = new StringBuilder();
final Scanner scanner = new Scanner(file.getInputStream(), "UTF-8");
while (scanner.hasNextLine()) {
String iso2709 = scanner.nextLine();
if (StringUtils.isBlank(iso2709)) {
continue;
}
String lines[] = iso2709.replace("\u001E\u001D", "\u001E\u001D\r\n").split("\r\n");
for (String line : lines) {
if (StringUtils.isNotBlank(line)) {
try {
String freemarc = MarcReader.iso2709ToMarc(line);
freemarc = TextUtils.combine(freemarc);
builder.append(freemarc);
builder.append(ApplicationConstants.FREEMARC_RECORD_SEPARATOR);
builder.append(ApplicationConstants.LINE_BREAK);
totalRecords++;
validRecords++;
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
}
records = builder.toString();
}
JSONObject json = new JSONObject();
try {
if (StringUtils.isBlank(records)) {
json.put("success", false);
json.put("message", I18nUtils.getText(session, "biblivre3", "ERROR_MARC_NOT_FILLED"));
} else {
json.put("success", true);
json.put("marc", records);
json.put("totalRecords", String.valueOf(totalRecords));
json.put("validRecords", String.valueOf(validRecords));
}
} catch (JSONException je) {
}
this.returnJson(json, response);
return "x-json";
} else if (submitButton.equals("SAVE_IMPORT")) {
final String freemarc = request.getParameter("marc");
if (StringUtils.isBlank(freemarc)) {
Dialog.showWarning(request, "ERROR_MARC_NOT_FILLED");
return "/jsp/cataloging/import.jsp";
}
final String importType = request.getParameter("import_type");
boolean success = false;
//biblio_MAIN, biblio_WORK, authorities, vocabulary
if (importType.startsWith("biblio")) {
String[] ex_auto = null;
if (request.getParameter("holding") != null) {
ex_auto = new String[6];
ex_auto[0] = request.getParameter("quant");
ex_auto[1] = request.getParameter("nvol");
ex_auto[2] = request.getParameter("nvol_obra");
ex_auto[3] = request.getParameter("biblio_dep");
ex_auto[4] = request.getParameter("aquis");
ex_auto[5] = request.getParameter("dt_tomb");
}
String base = "WORK";
if (importType.contains("MAIN")) {
base = "MAIN";
}
FreeMarcBO fbo = new FreeMarcBO();
success = fbo.importRecords(freemarc, Database.valueOf(base), null, ex_auto);
} else {
boolean authorities = importType.equals("authorities");
MaterialType mt = authorities ? MaterialType.AUTHORITIES : MaterialType.VOCABULARY;
AuthoritiesBO abo = new AuthoritiesBO();
VocabularyBO vbo = new VocabularyBO();
final String[] records = freemarc.split(ApplicationConstants.FREEMARC_RECORD_SEPARATOR);
for (final String record : records) {
if (StringUtils.isBlank(record)) {
continue;
}
Record recordObj = MarcReader.marcToRecord(record, mt, RecordStatus.NEW);
success = authorities ? abo.insert(recordObj) : vbo.insert(recordObj);
}
}
if (success) {
Dialog.showNormal(request, "SUCCESS_IMPORT_RECORD");
return "/jsp/cataloging/import.jsp";
} else {
Dialog.showError(request, "ERROR_IMPORT_RECORD");
return "/jsp/cataloging/import.jsp";
}
}
return "/jsp/cataloging/biblio.jsp";
}
}