/** * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. */ package br.gov.camara.edemocracia.portlets.chat.portlet.beans.admin.history; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.TimeZone; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import javax.faces.context.Flash; import javax.portlet.PortletConfig; import br.gov.camara.edemocracia.portlets.chat.model.ChatRoom; import br.gov.camara.edemocracia.portlets.chat.model.ChatRoomMessage; import br.gov.camara.edemocracia.portlets.chat.model.impl.UserType; import br.gov.camara.edemocracia.portlets.chat.service.ChatRoomServiceUtil; import com.liferay.faces.portal.context.LiferayFacesContext; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; /** * Bean para escolha das mensagens que aparecerão no histórico * * @author p_7339 * */ @ManagedBean(name = "historyExport") @ViewScoped public class ChatRoomHistoryBean implements Serializable { private static final long serialVersionUID = -2396774052709497689L; private static final Log _log = LogFactoryUtil.getLog(ChatRoomHistoryBean.class); private ChatRoom room; private ChatRoomMessage[] messages; private String exportedMessages; private TimeZone tz; /** * Recupera a sala pelo parâmetro * * @throws IOException */ @PostConstruct public void init() { LiferayFacesContext facesContext = LiferayFacesContext.getInstance(); tz = facesContext.getThemeDisplay().getTimeZone(); Locale locale = facesContext.getLocale(); PortletConfig portletConfig = facesContext.getPortletConfig(); // //////////////////////////////////////////////////////////////////////////////// // Carrega a sala atual room = null; exportedMessages = ""; messages = new ChatRoomMessage[0]; String param = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"); if (param != null) { try { long roomId = Long.parseLong(param); room = ChatRoomServiceUtil.getRoom(roomId); } catch (NumberFormatException e) { // Ignore } catch (PortalException e) { // Ignore } catch (SystemException e) { throw new RuntimeException(e); } } if (room == null) { // Sala não encontrada facesContext.addGlobalErrorMessage(LanguageUtil.get(portletConfig, locale, "room-cant-find")); try { facesContext.getExternalContext().redirect("/xhtml/admin/index.xhtml"); } catch (IOException e) { } return; } if (room.isOpen()) { // Sala aberta? facesContext.addGlobalErrorMessage(LanguageUtil.get(portletConfig, locale, "room-cant-export-opened-room")); try { facesContext.getExternalContext().redirect("/xhtml/admin/index.xhtml"); } catch (IOException e) { } room = null; return; } // //////////////////////////////////////////////////////////////////////////////// // Carrega as mensagens que já foram exportadas StringBuilder sb = new StringBuilder(); try { messages = ChatRoomServiceUtil.getMessagesForExport(room.getRoomId()); } catch (PortalException e) { messages = new ChatRoomMessage[0]; } catch (SystemException e) { throw new RuntimeException(e); } for (ChatRoomMessage message : messages) { if (sb.length() != 0) sb.append(' '); if (message.isExportedRemoved()) sb.append('-'); sb.append(message.getChatMessageId()); } exportedMessages = sb.toString(); } /** * Obtém o CSS para uma mensagem * * @param message * @return */ public String getCssClassForMessage(ChatRoomMessage message) { String css = ""; if (message.getSenderType() == UserType.Moderator.getValue()) css = "cdchat_moderator"; else if (message.getSenderType() == UserType.SpecialGuest.getValue()) css = "cdchat_special_guest"; if (message.isExportedRemoved()) css += " cdchat_removed_message"; else css += " cdchat_exported_message"; return css; } /** * @return the exportedMessages */ public String getExportedMessages() { return exportedMessages; } /** * @param exportedMessages * the exportedMessages to set */ public void setExportedMessages(String exportedMessages) { this.exportedMessages = exportedMessages; } /** * Obtém o nome da sala * * @return */ public String getRoomName() { if (room == null) return ""; else return room.getRoomName(); } /** * * @param message * @return */ public String getImageStatusForMessage(ChatRoomMessage message) { String prefix = LiferayFacesContext.getInstance().getExternalContext().getRequestContextPath(); if (!message.isExportedRemoved()) { return prefix + "/html/images/reject.png"; } else { return prefix + "/html/images/approve.png"; } } /** * Grava o novo histórico * * @return */ public String save() { String[] msgsIdsString = exportedMessages.split(" "); int msgsLength = msgsIdsString.length; List<Long> msgsIds = new ArrayList<Long>(msgsLength); for (int i = 0; i < msgsLength; i++) { try { long item = Long.parseLong(msgsIdsString[i]); msgsIds.add(item); } catch (NumberFormatException nfe) { // skip } } Flash flash = LiferayFacesContext.getInstance().getExternalContext().getFlash(); flash.setKeepMessages(true); try { ChatRoomServiceUtil.saveExportedMessages(room.getRoomId(), msgsIds.toArray(new Long[msgsIds.size()])); LiferayFacesContext.getInstance().addGlobalSuccessInfoMessage(); } catch (PortalException e) { LiferayFacesContext.getInstance().addGlobalErrorMessage("Falha ao gravar histórico"); _log.error(e); } catch (SystemException e) { LiferayFacesContext.getInstance().addGlobalErrorMessage("Falha ao gravar histórico"); _log.error(e); } return "saved"; } /** * @return the messages */ public ChatRoomMessage[] getMessages() { return messages; } /** * @return the room */ public ChatRoom getRoom() { return room; } /** * @return the tz */ public TimeZone getTz() { return tz; } }