package org.exoplatform.forum.service.cache.model.data;

import java.util.Date;

import org.exoplatform.forum.common.cache.model.CachedData;
import org.exoplatform.forum.service.Category;
import org.exoplatform.forum.service.Utils;

public class CategoryData implements CachedData<Category> {

  private static final long serialVersionUID = 1L;

  public final static CategoryData NULL = new CategoryData(new Category());

  private final String id;
  private final String owner;
  private final String path;
  private final long categoryOrder;
  private final Date createdDate;
  private final String modifiedBy;
  private final Date modifiedDate;
  private final String name;
  private final String description;
  private final String[] moderators;
  private final String[] userPrivate;
  private final String[] createTopicRole;
  private final String[] viewer;
  private final String[] poster;
  private final long forumCount;
  private final String[] emailNotification;

  public CategoryData(Category category) {

    this.id = category.getId();
    this.owner = category.getOwner();
    this.path = category.getPath();
    this.categoryOrder = category.getCategoryOrder();
    this.createdDate = category.getCreatedDate();
    this.modifiedBy = category.getModifiedBy();
    this.modifiedDate = category.getModifiedDate();
    this.name = category.getCategoryName();
    this.description = category.getDescription();
    this.moderators = category.getModerators();
    this.userPrivate = category.getUserPrivate();
    this.createTopicRole = category.getCreateTopicRole();
    this.viewer = category.getViewer();
    this.poster = category.getPoster();
    this.forumCount = category.getForumCount();
    this.emailNotification = category.getEmailNotification();

  }

  public Category build() {

    //
    if (this == NULL) {
      return null;
    }

    //
    Category category = new Category();
    category.setId(this.id);
    category.setOwner(this.owner);
    category.setPath(this.path);
    category.setCategoryOrder(this.categoryOrder);
    category.setCreatedDate(this.createdDate);
    category.setModifiedBy(this.modifiedBy);
    category.setModifiedDate(this.modifiedDate);
    category.setCategoryName(this.name);
    category.setDescription(this.description);
    category.setModerators(this.moderators);
    category.setCreateTopicRole(this.createTopicRole);
    category.setViewer(this.viewer);
    category.setPoster(this.poster);
    category.setForumCount(this.forumCount);
    category.setEmailNotification(this.emailNotification);
    if (Utils.isEmpty(this.userPrivate)) {
      category.setUserPrivate(new String[] {});
    } else {
      category.setUserPrivate(userPrivate);
    }
    return category;

  }
  
  public String getId() {
    return this.id;
  }
}
