org.jtalks.jcommune.plugin.api.web.dto.PostDto.java Source code

Java tutorial

Introduction

Here is the source code for org.jtalks.jcommune.plugin.api.web.dto.PostDto.java

Source

/**
 * Copyright (C) 2011  JTalks.org Team
 * 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.jtalks.jcommune.plugin.api.web.dto;

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.jtalks.jcommune.model.entity.Post;
import org.jtalks.jcommune.model.entity.PostDraft;
import org.jtalks.jcommune.plugin.api.web.validation.annotations.BbCodeAwareSize;
import org.jtalks.jcommune.plugin.api.web.validation.annotations.BbCodeNesting;

/**
 * DTO for {@link Post} objects. Used for validation and binding to form.
 */
public class PostDto {

    @BbCodeAwareSize(min = Post.MIN_LENGTH, max = Post.MAX_LENGTH)
    @BbCodeNesting
    private String bodyText;
    private long id;
    private long topicId;
    private TopicDto topicDto;
    private DateTime creationDate;
    private DateTime modificationDate;

    /**
     * Get topic id.
     *
     * @return topic id
     */
    public long getTopicId() {
        return topicId;
    }

    /**
     * Set topic id.
     *
     * @param topicId topic id
     */
    public void setTopicId(long topicId) {
        this.topicId = topicId;
    }

    /**
     * Get post id.
     *
     * @return post id
     */
    public long getId() {
        return id;
    }

    /**
     * Set post id.
     *
     * @param id id
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * Get post content.
     *
     * @return post content
     */
    public String getBodyText() {
        return bodyText;
    }

    /**
     * Set post content.
     *
     * @param bodyText content of post in topic
     */
    public void setBodyText(String bodyText) {
        this.bodyText = bodyText;
    }

    /**
     * Gets topic dto of the post
     *
     * @return topic dto
     */
    public TopicDto getTopicDto() {
        return topicDto;
    }

    /**
     * Sets specified topic dto to the post
     *
     * @param topicDto topic dto to set
     */
    public void setTopicDto(TopicDto topicDto) {
        this.topicDto = topicDto;
    }

    /**
     * Gets time of post creation represented by this dto
     *
     * @return time of post creation
     */
    public DateTime getCreationDate() {
        return creationDate;
    }

    /**
     * Sets specified time of post  creation
     *
     * @param creationDate time of post  creation
     */
    public void setCreationDate(DateTime creationDate) {
        this.creationDate = creationDate;
    }

    /**
     * Gets time of post modificatiom represented by this dto
     *
     * @return
     */
    public DateTime getModificationDate() {
        return modificationDate;
    }

    /**
     * Sets specified time of post modification
     *
     * @param modificationDate time of post modification
     */
    public void setModificationDate(DateTime modificationDate) {
        this.modificationDate = modificationDate;
    }

    /**
     * Gets millisecond representation of post creation date in UTC timezone
     *
     * We store dates in database in timezone of server. And to display correct time of creation draft
     * we convert UTC representation ot user's timezone in javascript
     *
     * @return millisecond representation of post creation date in UTC timezone
     */
    public long getUtcCreationTime() {
        DateTimeZone zone = creationDate.getZone();
        return zone.convertLocalToUTC(creationDate.getMillis(), false);
    }

    /**
     * Create dto
     *
     * @param post post for conversion
     * @return dto for post
     */
    public static PostDto getDtoFor(Post post) {
        PostDto dto = new PostDto();
        dto.setBodyText(post.getPostContent());
        dto.setId(post.getId());
        dto.setTopicId(post.getTopic().getId());
        dto.setCreationDate(post.getCreationDate());
        dto.setModificationDate(post.getModificationDate());
        return dto;
    }

    /**
     * Creates dto from draft
     *
     * @param postdraft draft to create dto
     *
     * @return dto for draft
     */
    public static PostDto getDtoFor(PostDraft postdraft) {
        PostDto dto = new PostDto();
        dto.setBodyText(postdraft.getContent());
        dto.setId(postdraft.getId());
        dto.setTopicId(postdraft.getTopic().getId());
        dto.setCreationDate(postdraft.getLastSaved());
        return dto;
    }

    public long getDifferenceMillis() {
        DateTime currentDate = new DateTime();
        long differenceTime = currentDate.getMillis() - creationDate.getMillis();
        return differenceTime > 0 ? differenceTime : creationDate.getMillis();
    }

    /**
     * Fills this dto from draft
     *
     * @param draft draft to fill dto
     */
    public void fillFrom(PostDraft draft) {
        this.setBodyText(draft.getContent());
        this.setId(draft.getId());
        this.setTopicId(draft.getTopic().getId());
        this.setCreationDate(draft.getLastSaved());
    }
}