/***************************************************************************
 * Copyright (C) 2003-2007 eXo Platform SAS.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 *
 * This program 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.exoplatform.forum.service;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.exoplatform.services.jcr.util.IdGenerator;

public class Post {
  private String                id;

  private String                owner;

  private String                path;

  private Date                  createdDate;

  private String                modifiedBy;

  private Date                  modifiedDate;

  private String                editReason;

  private String                name;

  private String                message;

  private String                remoteAddr;

  private String                icon;

  private String                link            = "";

  private String[]              userPrivate;

  private boolean               isApproved      = true;

  private boolean               isActiveByTopic = true;

  private boolean               isHidden        = false;
  
  private boolean               isWaiting       = false;

  private boolean               isFirstPost     = false;

  private long                  numberAttach    = 0;

  private List<ForumAttachment> attachments     = null;

  private String       quotedPostId    = null;

  public Post() {
    userPrivate = new String[] { ForumNodeTypes.EXO_USER_PRI };
  }

  public String getId() {
    if (id == null) {
      try {
        id = Utils.POST + IdGenerator.generate();
      } catch (NullPointerException e) {
        id = Utils.POST + Calendar.getInstance().getTimeInMillis();
      }
    }
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  /**
   * This method should calculate the id of the topic base on the id of the post
   * @return
   */
  public String getTopicId() {
    if (path != null && path.length() > 0) {
      String[] arr = path.split("/");
      return arr[arr.length - 2];
    }
    return null;
  }

  /**
   * This method should calculate the id of the forum base on the id of the post
   * @return
   */
  public String getForumId() {
    if (path != null && path.length() > 0) {
      String[] arr = path.split("/");
      return arr[arr.length - 3];
    }
    return null;
  }

  public String getCategoryId() {
    if (path != null && path.length() > 0) {
      String[] arr = path.split("/");
      return arr[arr.length - 4];
    }
    return null;
  }

  public String getOwner() {
    return owner;
  }

  public void setOwner(String owner) {
    this.owner = owner;
  }

  public String getPath() {
    return path;
  }

  public void setPath(String path) {
    this.path = path;
  }

  public Date getCreatedDate() {
    return createdDate;
  }

  public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
  }

  public String getModifiedBy() {
    return modifiedBy;
  }

  public void setModifiedBy(String modifiedBy) {
    this.modifiedBy = modifiedBy;
  }

  public Date getModifiedDate() {
    return modifiedDate;
  }

  public void setModifiedDate(Date modifiedDate) {
    this.modifiedDate = modifiedDate;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

  public String getRemoteAddr() {
    return remoteAddr;
  }

  public void setRemoteAddr(String remoteAddr) {
    this.remoteAddr = remoteAddr;
  }

  public String getIcon() {
    return icon;
  }

  public void setIcon(String icon) {
    this.icon = icon;
  }

  public boolean getIsApproved() {
    return isApproved;
  }

  public void setIsApproved(boolean isApproved) {
    this.isApproved = isApproved;
  }

  public List<ForumAttachment> getAttachments() {
    return this.attachments;
  }

  public void setAttachments(List<ForumAttachment> attachments) {
    this.attachments = attachments;
    if (attachments != null && this.numberAttach == 0) {
      this.numberAttach = attachments.size();
    }
  }

  public boolean getIsHidden() {
    return isHidden;
  }

  public void setIsHidden(boolean isHidden) {
    this.isHidden = isHidden;
  }

  public boolean getIsWaiting() {
    return isWaiting;
  }

  public void setIsWaiting(boolean isWaiting) {
    this.isWaiting = isWaiting;
  }

  public boolean getIsFirstPost() {
    return isFirstPost;
  }

  public void setFirstPost(boolean isFirstPost) {
    this.isFirstPost = isFirstPost;
  }

  public boolean getIsActiveByTopic() {
    return isActiveByTopic;
  }

  public void setIsActiveByTopic(boolean isActiveByTopic) {
    this.isActiveByTopic = isActiveByTopic;
  }

  public String getEditReason() {
    return editReason;
  }

  public void setEditReason(String editReason) {
    this.editReason = editReason;
  }

  public long getNumberAttach() {
    return numberAttach;
  }

  public void setNumberAttach(long numberAttach) {
    this.numberAttach = numberAttach;
  }

  public String[] getUserPrivate() {
    return userPrivate;
  }

  public void setUserPrivate(String[] userPrivate) {
    this.userPrivate = userPrivate;
  }

  public String getLink() {
    return link;
  }

  public void setLink(String link) {
    this.link = link;
  }

  public String getQuotedPostId() {
    return quotedPostId;
  }

  public void setQuotedPostId(String quotedPostId) {
    this.quotedPostId = quotedPostId;
  }
}
