/**
* 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.exporter;
import static org.apache.commons.lang.StringEscapeUtils.escapeXml;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
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.RoomOpenPolicy;
import br.gov.camara.edemocracia.portlets.chat.service.ChatRoomService;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
class XMLChatRoomExporter implements ChatRoomExporter {
private ChatRoomService service;
public XMLChatRoomExporter(ChatRoomService service) {
this.service = service;
}
@Override
public String exportChatRoom(long chatRoomId, TimeZone tz) throws PortalException, SystemException {
StringBuilder sb = new StringBuilder();
ChatRoom chatRoom = service.getRoom(chatRoomId);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
df.setTimeZone(tz);
int alwaysOpenPolicy = RoomOpenPolicy.Always.getValue();
ChatRoomMessage[] msgs = service.getMessagesForExport(chatRoomId);
sb.append("<chat>\n");
sb.append("<title>");
sb.append(escapeXml(chatRoom.getRoomName()));
sb.append("</title>\n");
sb.append("<description>");
sb.append(escapeXml(chatRoom.getDescription()));
sb.append("</description>\n");
sb.append("<totalusers>");
sb.append(chatRoom.getMaxSimultaneousUsers());
sb.append("</totalusers>\n");
sb.append("<totalusersspying>");
sb.append(chatRoom.getMaxSimultaneousUsersSpying());
sb.append("</totalusersspying>\n");
sb.append("<capacity>");
sb.append(chatRoom.getCapacity());
sb.append("</capacity>\n");
if (chatRoom.getOpenPolicy() != alwaysOpenPolicy) {
// Adicionado para tratar casos de inconsistências de um bug já resolvido
if (chatRoom.getOpenFrom() != null) {
sb.append("<dateopen>");
sb.append(df.format(chatRoom.getOpenFrom()));
sb.append("</dateopen>\n");
}
sb.append("<dateuntil>");
sb.append(df.format(chatRoom.getOpenUntil()));
sb.append("</dateuntil>\n");
}
sb.append("<messages>\n");
for (ChatRoomMessage msg : msgs) {
if (!msg.getExportedRemoved()) {
sb.append(msg.getMessageXMLForExport(tz) + "\n");
}
}
sb.append("</messages>\n");
sb.append("</chat>");
return sb.toString();
}
@Override
public String getFilename(long chatRoomId) throws PortalException, SystemException {
ChatRoom room = service.getRoom(chatRoomId);
return "export-" + room.getNameAsFilename() + ".xml";
}
}