/** * 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.administration.cards; import biblivre3.circulation.access.AccessBO; import biblivre3.enums.CardStatus; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import mercury.ErrorDTO; import mercury.IFJson; import mercury.LoginDTO; import mercury.BaseHandler; import mercury.RootJsonHandler; import mercury.SuccessDTO; import org.apache.commons.lang.StringUtils; import org.json.JSONObject; public class JsonCardHandler extends RootJsonHandler { private CardBO bo; @Override public JSONObject process(HttpServletRequest request, HttpServletResponse response) { bo = new CardBO(); String submitButton = request.getParameter("submitButton"); Properties properties = BaseHandler.getI18nProperties(request, "biblivre3"); IFJson dto = null; if (submitButton == null || submitButton.isEmpty()) { } else if (submitButton.equals("add_card")) { dto = addCard(request); } else if (submitButton.equals("add_card_list")) { dto = addCardList(request); } else if (submitButton.equals("delete_card")) { dto = delete(request); } else if (submitButton.equals("search_cards")) { dto = search(request); } else if (submitButton.equals("block_card")) { dto = changeCardStatus(request, true); } else if (submitButton.equals("unblock_card")) { dto = changeCardStatus(request, false); } return dto.toJSONObject(properties); } private IFJson search(HttpServletRequest request) { String searchTerms = request.getParameter("SEARCH_TERM"); boolean listAll = StringUtils.isBlank(searchTerms); int offset; try { offset = Integer.parseInt(request.getParameter("offset")); } catch (Exception e) { offset = 0; } CardSearchResultsDTO dto; if (listAll) { dto = bo.list(offset); } else { dto = bo.searchCards(searchTerms, offset); } if (dto != null && dto.al != null) { return dto; } else { return new ErrorDTO("MESSAGE_FOUND_NONE", "warning"); } } private IFJson addCard(HttpServletRequest request) { String newCard = request.getParameter("newCard"); if (StringUtils.isBlank(newCard)) { return new ErrorDTO("MESSAGE_EMPTY_CARD_NUMBER", "warning"); } CardDTO cardDTO = this.createCard(request, newCard); CardDTO existingCard = bo.getCardByNumber(newCard); if (existingCard != null) { return new ErrorDTO("MESSAGE_CARD_ALREADY_EXISTS", "warning"); } if (bo.addCard(cardDTO)) { return new SuccessDTO("SUCCESS_CREATE_RECORD"); } else { return new ErrorDTO("ERROR_CREATE_RECORD", "warning"); } } private IFJson addCardList(HttpServletRequest request) { String prefix = request.getParameter("prefix"); String suffix = request.getParameter("suffix"); String startString = request.getParameter("start"); String endString = request.getParameter("end"); int start = 0; int end = 0; try { start = Integer.parseInt(startString); end = Integer.parseInt(endString); } catch (Exception e) { return new ErrorDTO("MESSAGE_ERROR_CARD_START_END_NUMBERS", "warning"); } List<String> cardNumbers = new ArrayList<String>(); int prefixPadding = startString.length(); for (int i = start; i <= end; i++) { String number = String.valueOf(i); while (number.length() < prefixPadding) { number = "0" + number; } cardNumbers.add(prefix + number + suffix); } for (String number : cardNumbers) { CardDTO existingCard = bo.getCardByNumber(number); if (existingCard != null) { return new ErrorDTO("MESSAGE_ERROR_CARD_CARD_EXISTS", "warning"); } } Date today = new Date(); List<CardDTO> cardList = new ArrayList<CardDTO>(); for (String number : cardNumbers) { CardDTO dto = this.createCard(request, number); dto.setDateTime(today); cardList.add(dto); } if (bo.addSequenceCard(cardList)) { return new SuccessDTO("SUCCESS_CREATE_RECORD"); } else { return new ErrorDTO("ERROR_CREATE_RECORD", "warning"); } } private IFJson delete(HttpServletRequest request) { String param = request.getParameter("card_id"); if (StringUtils.isBlank(param)) { return new ErrorDTO("MESSAGE_ERROR_CARD_SELECT_CARD", "warning"); } Integer id = Integer.valueOf(param); if (new AccessBO().getByCardId(id) != null) { return new ErrorDTO("MESSAGE_CARD_ALREADY_LENT", "warning"); } if (bo.removeCard(id)) { return new SuccessDTO("SUCCESS_REMOVE_RECORD"); } else { return new ErrorDTO("ERROR_REMOVE_RECORD", "warning"); } } private IFJson changeCardStatus(HttpServletRequest request, boolean block) { String param = request.getParameter("card_id"); CardStatus newStatus = block ? CardStatus.BLOCKED : CardStatus.AVAILABLE; Integer id = Integer.valueOf(param); if (bo.updateCardStatus(newStatus, id)) { return new SuccessDTO("SUCCESS_UPDATE_RECORD"); } else { return new ErrorDTO("ERROR_UPDATE_RECORD", "warning"); } } private final CardDTO createCard(HttpServletRequest request, String cardNumber) { CardDTO cardDTO = new CardDTO(); cardDTO.setCardNumber(cardNumber); cardDTO.setStatus(CardStatus.AVAILABLE); cardDTO.setDateTime(new Date()); LoginDTO user = (LoginDTO) request.getSession().getAttribute("LOGGED_USER"); cardDTO.setUserid(user.getLoginId()); return cardDTO; } }