org.projectforge.business.book.BookDO.java Source code

Java tutorial

Introduction

Here is the source code for org.projectforge.business.book.BookDO.java

Source

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition 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 General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.business.book;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;

import org.apache.commons.lang.StringUtils;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.DateBridge;
import org.hibernate.search.annotations.EncodingType;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.annotations.Resolution;
import org.hibernate.search.annotations.Store;
import org.projectforge.business.task.TaskDO;
import org.projectforge.framework.persistence.entities.DefaultBaseDO;
import org.projectforge.framework.persistence.user.entities.PFUserDO;

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 * 
 */
@Entity
@Indexed
@Table(name = "T_BOOK", uniqueConstraints = {
        @UniqueConstraint(columnNames = { "signature", "tenant_id" }) }, indexes = {
                @javax.persistence.Index(name = "idx_fk_t_book_lend_out_by", columnList = "lend_out_by"),
                @javax.persistence.Index(name = "idx_fk_t_book_task_id", columnList = "task_id"),
                @javax.persistence.Index(name = "idx_fk_t_book_tenant_id", columnList = "tenant_id"),
                @javax.persistence.Index(name = "t_book_pkey", columnList = "pk") })
public class BookDO extends DefaultBaseDO {
    // private static final Logger log = Logger.getLogger(TaskDO.class);

    private static final long serialVersionUID = 8036741307214351813L;
    @IndexedEmbedded(depth = 1, includePaths = { "title" })
    private TaskDO task;

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String title; // 255 not null

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String keywords; // 1024

    @IndexedEmbedded(depth = 1, includePaths = { "username", "firstname", "lastname" })
    private PFUserDO lendOutBy;

    @Field(index = Index.YES, analyze = Analyze.NO /* UN_TOKENIZED */)
    @DateBridge(resolution = Resolution.DAY, encoding = EncodingType.STRING)
    private Date lendOutDate;

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String lendOutComment; // 1024

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String isbn; // 255

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String signature; // 255

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String publisher; // 255

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String editor; // 255

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO, name = "year")
    private String yearOfPublishing; // 4

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String authors; // 1000

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO, name = "abstract")
    private String abstractText; // 4000

    @Field(index = Index.YES /* TOKENIZED */, store = Store.NO)
    private String comment; // 4000;

    @Field(index = Index.YES, analyze = Analyze.NO /* UN_TOKENIZED */, store = Store.NO)
    private BookStatus status;

    @Field(index = Index.YES, analyze = Analyze.NO /* UN_TOKENIZED */, store = Store.NO)
    private BookType type;

    @Column(length = 255)
    public String getPublisher() {
        return publisher;
    }

    public BookDO setPublisher(final String publisher) {
        this.publisher = publisher;
        return this;
    }

    @Column(length = 255)
    public String getEditor() {
        return editor;
    }

    public BookDO setEditor(final String editor) {
        this.editor = editor;
        return this;
    }

    @Column(length = 1000)
    public String getAuthors() {
        return authors;
    }

    public BookDO setAuthors(final String authors) {
        this.authors = authors;
        return this;
    }

    @Column(length = 1000)
    public String getComment() {
        return comment;
    }

    public BookDO setComment(final String comment) {
        this.comment = comment;
        return this;
    }

    @Column(length = 255)
    public String getIsbn() {
        return isbn;
    }

    public BookDO setIsbn(final String isbn) {
        this.isbn = isbn;
        return this;
    }

    @Column(length = 255)
    public String getSignature() {
        return signature;
    }

    public BookDO setSignature(final String signature) {
        this.signature = signature;
        return this;
    }

    /**
     * Converts numbers in signature for alphanumeric sorting in 5-digit form. For example: "WT-145a" -> "WT-00145a".
     */
    @Transient
    public String getSignature4Sort() {
        if (this.signature == null) {
            return null;
        }
        final StringBuffer buf = new StringBuffer();
        StringBuffer no = null;
        for (int i = 0; i < this.signature.length(); i++) {
            final char ch = this.signature.charAt(i);
            if (Character.isDigit(ch) == false) {
                if (no != null && no.length() > 0) {
                    buf.append(StringUtils.leftPad(no.toString(), 5, '0'));
                    no = null;
                }
                buf.append(ch);
            } else {
                if (no == null) {
                    no = new StringBuffer();
                }
                no.append(ch);
            }
        }
        if (no != null && no.length() > 0) {
            buf.append(StringUtils.leftPad(no.toString(), 5, '0'));
        }
        return buf.toString();
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @Fetch(FetchMode.SELECT)
    @JoinColumn(name = "lend_out_by")
    public PFUserDO getLendOutBy() {
        return lendOutBy;
    }

    public BookDO setLendOutBy(final PFUserDO lendOutBy) {
        this.lendOutBy = lendOutBy;
        return this;
    }

    @Transient
    public Integer getLendOutById() {
        if (this.lendOutBy == null) {
            return null;
        }
        return lendOutBy.getId();
    }

    @Column(name = "lend_out_date")
    public Date getLendOutDate() {
        return lendOutDate;
    }

    public BookDO setLendOutDate(final Date lendOutDate) {
        this.lendOutDate = lendOutDate;
        return this;
    }

    @Column(name = "lend_out_comment", length = 1024)
    public String getLendOutComment() {
        return lendOutComment;
    }

    public BookDO setLendOutComment(final String lendOutComment) {
        this.lendOutComment = lendOutComment;
        return this;
    }

    @Column(length = 1024)
    public String getKeywords() {
        return keywords;
    }

    public BookDO setKeywords(final String keywords) {
        this.keywords = keywords;
        return this;
    }

    @Column(name = "abstract_text", length = 4000)
    public String getAbstractText() {
        return abstractText;
    }

    public BookDO setAbstractText(final String abstractText) {
        this.abstractText = abstractText;
        return this;
    }

    /**
     * Not used as object due to performance reasons.
     * 
     * @return
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "task_id", nullable = false)
    public TaskDO getTask() {
        return task;
    }

    public BookDO setTask(final TaskDO task) {
        this.task = task;
        return this;
    }

    @Transient
    public Integer getTaskId() {
        if (this.task == null) {
            return null;
        }
        return task.getId();
    }

    @Column(length = 255)
    public String getTitle() {
        return title;
    }

    public BookDO setTitle(final String title) {
        this.title = title;
        return this;
    }

    @Column(name = "year_of_publishing", length = 4)
    public String getYearOfPublishing() {
        return yearOfPublishing;
    }

    public BookDO setYearOfPublishing(final String yearOfPublishing) {
        this.yearOfPublishing = yearOfPublishing;
        return this;
    }

    @Enumerated(EnumType.STRING)
    @Column(length = 20, nullable = false)
    public BookStatus getStatus() {
        return status;
    }

    public BookDO setStatus(final BookStatus status) {
        this.status = status;
        return this;
    }

    @Enumerated(EnumType.STRING)
    @Column(name = "book_type", length = 20, nullable = true)
    public BookType getType() {
        return type;
    }

    public BookDO setType(final BookType type) {
        this.type = type;
        return this;
    }
}