package com.syzton.sunread.model.supplementbook;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.Type;
import org.joda.time.DateTime;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.syzton.sunread.dto.supplementbook.SupplementBookDTO;
import com.syzton.sunread.model.book.Book;
import com.syzton.sunread.model.common.AbstractEntity;
import com.syzton.sunread.util.DateSerializer;
/**
* @author Morgan-Leon
*/
@Entity
@Table(name="supplementbook")
public class SupplementBook extends AbstractEntity{
@Column(name = "description", nullable = true, length = Book.MAX_LENGTH_DESCRIPTION)
private String description;
@JsonSerialize(using = DateSerializer.class)
@Column(name = "modification_time", nullable = false)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime modificationTime;
@Column(nullable = false,length = Book.MAX_LENGTH_AUTHOR)
private String author;
@Column(name="name",nullable = false,length = Book.MAX_LENGTH_NAME)
private String name;
@Column(nullable = false,length = Book.MAX_LENGTH_PUBLISHER)
private String publisher;
@JsonSerialize(using = DateSerializer.class)
@Column(nullable = false)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime publicationDate;
private int language;
@Column(name ="isbn",unique = true,nullable = false,length = Book.MAX_LENGTH_ISBN)
private String isbn;
public SupplementBook() {
}
public static Builder getBuilder(int language ,String author,String publisher,DateTime publishDate,String isbn,String name) {
return new Builder(language,author,publisher,publishDate, isbn, name);
}
public String getDescription() {
return description;
}
public DateTime getModificationTime() {
return modificationTime;
}
public String getAuthor() {
return author;
}
public String getName() {
return name;
}
public String getPublisher() {
return publisher;
}
public DateTime getPublicationDate() {
return publicationDate;
}
public String getIsbn() {
return isbn;
}
public int getLanguage() {
return language;
}
@PrePersist
public void prePersist() {
DateTime now = DateTime.now();
creationTime = now;
modificationTime = now;
}
@PreUpdate
public void preUpdate() {
modificationTime = DateTime.now();
}
public static class Builder {
private SupplementBook built;
public Builder(int language,String author,String publisher,DateTime publishDate,String isbn,String name) {
built = new SupplementBook();
built.language = language;
built.author=author;
built.publisher = publisher;
built.publicationDate = publishDate;
built.name = name;
built.isbn = isbn;
}
public SupplementBook build() {
return built;
}
public Builder description(String description) {
built.description = description;
return this;
}
}
public SupplementBookDTO createDTO(SupplementBook model) {
SupplementBookDTO dto = new SupplementBookDTO();
dto.setId(model.getId());
dto.setName(model.getName());
dto.setIsbn(model.getIsbn());
dto.setAuthor(model.getAuthor());
dto.setPublisher(model.getPublisher());
dto.setLanguage(model.getLanguage());
dto.setDescription(model.getDescription());
dto.setPublicationDate(model.getPublicationDate().toDate());
return dto;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}