package entities; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @NamedQueries({ @NamedQuery( name = LogEntry.ALL_LOG_ENTRIES, query = "SELECT e FROM LogEntry e ORDER BY e.date DESC" ), @NamedQuery( name = LogEntry.FIND_BY_USER, query = "SELECT l FROM LogEntry l WHERE LOWER(l.nickname) LIKE LOWER(?1) ORDER BY l.date DESC" ), @NamedQuery( name = LogEntry.FIND_BY_CHANNEL, query = "SELECT l FROM LogEntry l WHERE LOWER(l.channel) = LOWER(?1) ORDER BY l.date DESC" ), @NamedQuery( name = LogEntry.USER_SEEN, query = "SELECT l FROM LogEntry l WHERE " + "LOWER(l.nickname) = LOWER(?1) AND " + "l.type = 0 " + "ORDER BY l.date DESC" ) }) public class LogEntry { public final static int MESSAGE_LEN = 512; public final static int TYPE_MESSAGE = 0; public final static int TYPE_JOIN = 1; public final static int TYPE_PART = 2; public final static int TYPE_QUIT = 4; public final static int TYPE_NICKCHANGE = 8; public final static int TYPE_UNKNOWN = 16; public final static String ALL_LOG_ENTRIES = "ALL_LOG_ENTRIES"; //$NON-NLS-1$ public final static String FIND_BY_USER = "FIND_BY_USER"; //$NON-NLS-1$ public final static String FIND_BY_CHANNEL = "FIND_BY_CHANNEL"; //$NON-NLS-1$ public final static String USER_SEEN = "USER_SEEN"; //$NON-NLS-1$ public static LogEntry forMessage(String nickname, String message, String channel, Date date) { return new LogEntry(nickname, message, channel, date, TYPE_MESSAGE); } public static LogEntry forJoin(String nickname, String message, String channel, Date date) { return new LogEntry(nickname, message, channel, date, TYPE_JOIN); } public static LogEntry forPart(String nickname, String message, String channel, Date date) { return new LogEntry(nickname, message, channel, date, TYPE_PART); } public static LogEntry forQuit(String nickname, String message, String channel, Date date) { return new LogEntry(nickname, message, channel, date, TYPE_QUIT); } public static LogEntry forNickChange(String nickname, String message, String channel, Date date) { return new LogEntry(nickname, message, channel, date, TYPE_NICKCHANGE); } public static LogEntry forUnknown(String nickname) { return new LogEntry(nickname, "", "", null, TYPE_UNKNOWN); //$NON-NLS-1$//$NON-NLS-2$ } @Id@GeneratedValue(strategy = GenerationType.TABLE) private int id; private String nickname; private String message; @Column(columnDefinition = "VARCHAR(" + MESSAGE_LEN + ")") private String channel; @Temporal(TemporalType.TIMESTAMP) private Date date; private int type; public LogEntry() {} public LogEntry(LogEntry other) { this(other.nickname, other.message, other.channel, other.date, other.type); } private LogEntry(String nickname, String message, String channel, Date date, int type) { super(); this.nickname = nickname; this.message = message; this.channel = channel; this.date = date; this.type = type; } public int getId() { return id; } public String getNickname() { return nickname; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getChannel() { return channel; } public Date getDate() { return date; } public int getType() { return type; } @Override public String toString() { return "[LogEntry: " + this.message + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } }