/** * 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.service; import java.io.Serializable; import java.util.UUID; import org.apache.commons.lang.StringUtils; import br.gov.camara.edemocracia.portlets.chat.model.ChatRoomUser; /** * Representa uma chave para os usuários de uma sala de bate-papo. Para usuários * espiões, guarda um {@link UUID}, para usuários não espiões, guarda um {@link Long}, * que é o id salvo no banco e corresponde a {@link ChatRoomUser#getChatUserId()} * @author p_882148 */ public final class UserActivityId implements Serializable { private static final long serialVersionUID = 1L; private final UUID spyUserId; private final Long chatUserId; public static UserActivityId forPersistentUser(long chatUserId) { return new UserActivityId(chatUserId); } public static UserActivityId forNewSpyUser() { return new UserActivityId(UUID.randomUUID()); } private UserActivityId(long chatRoomUserId) { this.chatUserId = chatRoomUserId; this.spyUserId = null; } private UserActivityId(UUID spyUserId) { if (spyUserId == null) { throw new IllegalArgumentException("spyUserId não pode ser null"); } this.spyUserId = spyUserId; this.chatUserId = null; } public String getAsString() { if(spyUserId == null) { return chatUserId.toString(); }else { return spyUserId.toString(); } } public static UserActivityId fromString(String id) { if (StringUtils.isBlank(id)) { return null; } try { Long chatUserId = Long.parseLong(id); return new UserActivityId(chatUserId); } catch (NumberFormatException e) { return new UserActivityId(UUID.fromString(id)); } } public boolean isSpyUser() { return spyUserId != null; } public boolean isPersistentUser() { return chatUserId != null; } public UUID getSpyUserId() { return spyUserId; } public Long getChatUserId() { return chatUserId; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((chatUserId == null) ? 0 : chatUserId.hashCode()); result = prime * result + ((spyUserId == null) ? 0 : spyUserId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; UserActivityId other = (UserActivityId) obj; if (chatUserId == null) { if (other.chatUserId != null) return false; } else if (!chatUserId.equals(other.chatUserId)) return false; if (spyUserId == null) { if (other.spyUserId != null) return false; } else if (!spyUserId.equals(other.spyUserId)) return false; return true; } @Override public String toString() { return getAsString(); } }