/***************************************************************************
 * Copyright (C) 2003-2009 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.services.cms.taxonomy;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by The eXo Platform SARL Author : Hoang Van Hung hunghvit@gmail.com
 * Apr 3, 2009
 */
public class TaxonomyTreeData implements Comparable<TaxonomyTreeData> {

  private String             taxoTreeName;

  private String             repository;

  private String             taxoTreeWorkspace;

  private String             taxoTreePermissions;

  private String             taxoTreeHomePath;

  private String             taxoTreeActionName;

  private String             taxoTreeActionTargetPath;

  private String             taxoTreeActionTargetWorkspace;

  private String             taxoTreeActionTypeName;

  private boolean            edit               = false;

  public static final String ACTION_TAXONOMY_TREE = "exo:taxonomyAction";

  public TaxonomyTreeData() {

  }

  /**
   * @return the name of repository
   */
  public String getRepository() {
    return repository;
  }

  /**
   * Register repository to drive
   *
   * @param rp repository name
   */
  public void setRepository(String rp) {
    repository = rp;
  }

  /**
   * @return the permissions of drive
   */
  public String getPermissions() {
    return this.taxoTreePermissions;
  }

  /**
   * Check the state of permission is existing or not
   * @param allPermissions the string array permission of drive
   * @param permission permission name
   * @return the state of permission is existing or not.
   */
  public boolean hasPermission(String[] allPermissions, String permission) {
    List<String> permissionList = new ArrayList<String>();
    for (String per : allPermissions) {
      permissionList.add(per.trim());
    }
    if (permission == null)
      return false;
    if (permission.indexOf(":/") > -1) {
      String[] array = permission.split(":/");
      if (array == null || array.length < 2)
        return false;
      if (permissionList.contains("*:/" + array[1]))
        return true;
    }
    return permissionList.contains(permission);
  }

  public int compareTo(TaxonomyTreeData arg) {
    return taxoTreeName.compareToIgnoreCase(arg.getTaxoTreeName());
  }


  /**
   * Get taxonomy tree home path
   * @return taxoTreeHomePath
   */
  public String getTaxoTreeHomePath() {
    return taxoTreeHomePath;
  }

  /**
   * Register home path to taxonomy Tree
   * @param taxoTreeHomePath the home path of drive
   */
  public void setTaxoTreeHomePath(String taxoTreeHomePath) {
    this.taxoTreeHomePath = taxoTreeHomePath;
  }

  /**
   * get taxonomy tree name
   */
  public String getTaxoTreeName() {
    return taxoTreeName;
  }

  /**
   * Register taxonomy tree name
   * @param taxoTreeName the name of taxonomy tree
   */
  public void setTaxoTreeName(String taxoTreeName) {
    this.taxoTreeName = taxoTreeName;
  }

  public String getTaxoTreePermissions() {
    return taxoTreePermissions;
  }

  /**
   * Register permission to taxonomy tree
   * @param permission
   */
  public void setTaxoTreePermissions(String permission) {
    this.taxoTreePermissions = permission;
  }

  /**
   * @return the name of workspace
   */
  public String getTaxoTreeWorkspace() {
    return taxoTreeWorkspace;
  }

  /**
   * Register workspace to tree
   * @param taxoTreeWorkspace the workspace name
   */
  public void setTaxoTreeWorkspace(String taxoTreeWorkspace) {
    this.taxoTreeWorkspace = taxoTreeWorkspace;
  }

  /**
   * Get action name of Taxonomy tree
   */
  public String getTaxoTreeActionName() {
    return taxoTreeActionName;
  }

  /**
   * Set action name of Taxonomy tree
   * @param taxoTreeActionName
   */
  public void setTaxoTreeActionName(String taxoTreeActionName) {
    this.taxoTreeActionName = taxoTreeActionName;
  }

  public String getTaxoTreeActionTypeName() {
    return taxoTreeActionTypeName;
  }

  public void setTaxoTreeActionTypeName(String taxoTreeActionTypeName) {
    this.taxoTreeActionTypeName = taxoTreeActionTypeName;
  }

  /**
   * Check data in edited state or not
   */
  public boolean isEdit() {
    return edit;
  }

  /**
   * Set edit state
   * @param edit
   */
  public void setEdit(boolean edit) {
    this.edit = edit;
  }
}
