CCM NG: Entities for org.libreccm.messaging
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3396 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
6de2d5807f
commit
055e300185
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.libreccm.jpautils;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.activation.MimeType;
|
||||||
|
import javax.activation.MimeTypeParseException;
|
||||||
|
import javax.persistence.AttributeConverter;
|
||||||
|
import javax.persistence.Converter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A converter for converting properties of the type {@link MimeType} to
|
||||||
|
* {@code String}.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@Converter(autoApply = true)
|
||||||
|
public class MimeTypeConverter implements AttributeConverter<MimeType, String> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String convertToDatabaseColumn(final MimeType attribute) {
|
||||||
|
return attribute.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MimeType convertToEntityAttribute(final String dbData) {
|
||||||
|
try {
|
||||||
|
return new MimeType(dbData);
|
||||||
|
} catch (MimeTypeParseException ex) {
|
||||||
|
throw new IllegalArgumentException("Not a valid mime type", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,185 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.libreccm.messaging;
|
||||||
|
|
||||||
|
import org.libreccm.jpautils.MimeTypeConverter;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import javax.activation.MimeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Convert;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.Lob;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "attachments")
|
||||||
|
public class Attachment implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 2063934721452863106L;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "message_id")
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private long attachmentId;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "message_id")
|
||||||
|
private Message message;
|
||||||
|
|
||||||
|
@Column(name = "mime_type")
|
||||||
|
@Convert(converter = MimeTypeConverter.class)
|
||||||
|
private MimeType mimeType;
|
||||||
|
|
||||||
|
@Column(name = "title")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@Column(name = "description")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Column(name = "attachment_data")
|
||||||
|
@Lob
|
||||||
|
private byte[] data;
|
||||||
|
|
||||||
|
public long getAttachmentId() {
|
||||||
|
return attachmentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttachmentId(final long attachmentId) {
|
||||||
|
this.attachmentId = attachmentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setMessage(final Message message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MimeType getMimeType() {
|
||||||
|
return mimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMimeType(final MimeType mimeType) {
|
||||||
|
this.mimeType = mimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(final String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(final String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getData() {
|
||||||
|
return Arrays.copyOf(data, data.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(byte[] data) {
|
||||||
|
this.data = Arrays.copyOf(data, data.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = 5;
|
||||||
|
hash
|
||||||
|
= 67 * hash + (int) (attachmentId ^ (attachmentId >>> 32));
|
||||||
|
hash = 67 * hash + Objects.hashCode(message);
|
||||||
|
hash = 67 * hash + Objects.hashCode(mimeType);
|
||||||
|
hash = 67 * hash + Objects.hashCode(title);
|
||||||
|
hash = 67 * hash + Objects.hashCode(description);
|
||||||
|
hash = 67 * hash + Arrays.hashCode(data);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object obj) {
|
||||||
|
if (obj == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getClass() != obj.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final Attachment other = (Attachment) obj;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attachmentId != other.getAttachmentId()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(message, other.getMessage())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(mimeType, other.getMimeType())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(title, other.getTitle())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(description, other.getDescription())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return Arrays.equals(data, other.getData());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canEqual(final Object obj) {
|
||||||
|
return obj instanceof Attachment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s{ "
|
||||||
|
+ "attachmentId = %d, "
|
||||||
|
+ "message = %s, "
|
||||||
|
+ "mimeType = \"%s\", "
|
||||||
|
+ "title = \"%s\""
|
||||||
|
+ " }",
|
||||||
|
super.toString(),
|
||||||
|
attachmentId,
|
||||||
|
Objects.toString(message),
|
||||||
|
Objects.toString(mimeType),
|
||||||
|
title);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,232 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.libreccm.messaging;
|
||||||
|
|
||||||
|
import org.libreccm.core.CcmObject;
|
||||||
|
import org.libreccm.core.Party;
|
||||||
|
import org.libreccm.jpautils.MimeTypeConverter;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import javax.activation.MimeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Convert;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
import javax.persistence.Temporal;
|
||||||
|
import javax.persistence.TemporalType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "messages")
|
||||||
|
public class Message extends CcmObject implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -9143137794418932025L;
|
||||||
|
|
||||||
|
@OneToOne
|
||||||
|
@JoinColumn(name = "sender_id")
|
||||||
|
private Party sender;
|
||||||
|
|
||||||
|
@Column(name = "subject")
|
||||||
|
private String subject;
|
||||||
|
|
||||||
|
@Column(name = "body")
|
||||||
|
private String body;
|
||||||
|
|
||||||
|
@Column(name = "body_mime_type")
|
||||||
|
@Convert(converter = MimeTypeConverter.class)
|
||||||
|
private MimeType bodyMimeType;
|
||||||
|
|
||||||
|
@Column(name = "sent")
|
||||||
|
@Temporal(TemporalType.TIMESTAMP)
|
||||||
|
private Date sent;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "in_reply_to_id")
|
||||||
|
private Message inReplyTo;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "inReplyTo")
|
||||||
|
private List<Message> replies;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "message")
|
||||||
|
private List<Attachment> attachments;
|
||||||
|
|
||||||
|
public Party getSender() {
|
||||||
|
return sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setSender(final Party sender) {
|
||||||
|
this.sender = sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSubject() {
|
||||||
|
return subject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubject(final String subject) {
|
||||||
|
this.subject = subject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBody() {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBody(final String body) {
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MimeType getBodyMimeType() {
|
||||||
|
return bodyMimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBodyMimeType(final MimeType bodyMimeType) {
|
||||||
|
this.bodyMimeType = bodyMimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getSent() {
|
||||||
|
return new Date(sent.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSent(final Date sent) {
|
||||||
|
this.sent = new Date(sent.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message getInReplyTo() {
|
||||||
|
return inReplyTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setInReplyTo(final Message inReplyTo) {
|
||||||
|
this.inReplyTo = inReplyTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Message> getReplies() {
|
||||||
|
return Collections.unmodifiableList(replies);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setReplies(final List<Message> replies) {
|
||||||
|
this.replies = replies;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addReply(final Message reply) {
|
||||||
|
replies.add(reply);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeReply(final Message reply) {
|
||||||
|
replies.remove(reply);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Attachment> getAttachments() {
|
||||||
|
return Collections.unmodifiableList(attachments);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setAttachments(final List<Attachment> attachments) {
|
||||||
|
this.attachments = attachments;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addAttachment(final Attachment attachment) {
|
||||||
|
attachments.add(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeAttachment(final Attachment attachment) {
|
||||||
|
attachments.remove(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = super.hashCode();
|
||||||
|
hash = 89 * hash + Objects.hashCode(sender);
|
||||||
|
hash = 89 * hash + Objects.hashCode(subject);
|
||||||
|
hash = 89 * hash + Objects.hashCode(body);
|
||||||
|
hash = 89 * hash + Objects.hashCode(bodyMimeType);
|
||||||
|
hash = 89 * hash + Objects.hashCode(sent);
|
||||||
|
hash = 89 * hash + Objects.hashCode(inReplyTo);
|
||||||
|
hash = 89 * hash + Objects.hashCode(replies);
|
||||||
|
hash = 89 * hash + Objects.hashCode(attachments);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object obj) {
|
||||||
|
if (obj == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getClass() != obj.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final Message other = (Message) obj;
|
||||||
|
if (!other.canEqual(obj)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(sender, other.getSender())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(subject, other.getSubject())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(body, other.getBody())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(bodyMimeType, other.getBodyMimeType())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(sent, other.getSent())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(inReplyTo, other.getInReplyTo())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Objects.equals(replies, other.getReplies())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return Objects.equals(attachments, other.getAttachments());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canEqual(final Object obj) {
|
||||||
|
return obj instanceof Message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(final String data) {
|
||||||
|
return super.toString(String.format(", sender = %s, "
|
||||||
|
+ "subject = \"%s\", "
|
||||||
|
+ "bodyMimeType = \"%s\", "
|
||||||
|
+ "sent = %tF %<tT, "
|
||||||
|
+ "inReplyTo = %s%s",
|
||||||
|
Objects.toString(sender),
|
||||||
|
subject,
|
||||||
|
Objects.toString(bodyMimeType),
|
||||||
|
sent,
|
||||||
|
Objects.toString(inReplyTo),
|
||||||
|
data));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.libreccm.messaging;
|
||||||
|
|
||||||
|
import org.libreccm.core.CcmObject;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "threads")
|
||||||
|
public class Thread extends CcmObject implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -395123286904985770L;
|
||||||
|
|
||||||
|
@OneToOne
|
||||||
|
@JoinColumn(name = "root_id")
|
||||||
|
private Message root;
|
||||||
|
|
||||||
|
public Message getRoot() {
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setRoot(final Message root) {
|
||||||
|
this.root = root;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = super.hashCode();
|
||||||
|
hash = 31 * hash + Objects.hashCode(root);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object obj) {
|
||||||
|
if (obj == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getClass() != obj.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final Thread other = (Thread) obj;
|
||||||
|
if (!other.canEqual(this)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Objects.equals(this.root, other.getRoot());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canEqual(final Object obj) {
|
||||||
|
return obj instanceof Thread;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(final String data) {
|
||||||
|
return super.toString(String.format(", root = %s%s",
|
||||||
|
Objects.toString(root),
|
||||||
|
data));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue