package net.northking.cctp.maven.analyse.entity;

/**
 * 数据库表字段对象
 *
 * @author 谢秀松
 * @since 1.0
 */
public final class ColumnRef
{
  /**
   * 数据库表名
   */
  private String tableName;

  /**
   * 字段名
   */
  private String name;

  /**
   * 类型
   */
  private int type;

  /**
   * 类型名称
   */
  private String typeName;

  /**
   * 长度
   */
  private int size;

  /**
   * 精度
   */
  private int digits;

  /**
   * 可否为空
   */
  private boolean nullAble;

  /**
   * 默认值
   */
  private String defaultValue;

  /**
   * 注释
   */
  private String comment;

  /**
   * 是否主键字段
   */
  private boolean primaryKey;

  /**
   * 默认构造函数
   */
  public ColumnRef()
  {
  }

  /**
   * 全属性构造函数
   *
   * @param name         字段名称
   * @param type         字段类型
   * @param typeName     字段类型名称
   * @param size         长度
   * @param digits       精度
   * @param nullAble     可否为空
   * @param comment      注释
   * @param defaultValue 默认值
   */
  public ColumnRef(final String name, final int type, final String typeName, final int size,
                   final int digits, final int nullAble, final String comment, final String defaultValue)
  {
    this.name = name;
    this.type = type;
    this.typeName = typeName;
    this.size = size;
    this.digits = digits;
    this.setNullAble(nullAble);
    this.comment = comment;
    this.defaultValue = defaultValue;
  }

  /**
   * 获取字段名称
   *
   * @return 字段名称
   */
  public String getName()
  {
    return name;
  }

  /**
   * 设置字段名称
   *
   * @param name 字段名称
   */
  public void setName(final String name)
  {
    this.name = name;
  }

  /**
   * 获取字段类型
   *
   * @return 字段类型
   */
  public int getType()
  {
    return type;
  }

  /**
   * 设置字段类型
   *
   * @param type 字段类型
   */
  public void setType(final int type)
  {
    this.type = type;
  }

  /**
   * 获取类型名称
   *
   * @return 类型名称
   */
  public String getTypeName()
  {
    return typeName;
  }

  /**
   * 设置类型名称
   *
   * @param typeName 类型名称
   */
  public void setTypeName(final String typeName)
  {
    this.typeName = typeName;
  }

  /**
   * 获取长度
   *
   * @return 长度
   */
  public int getSize()
  {
    return size;
  }

  /**
   * 设置长度
   *
   * @param size 长度
   */
  public void setSize(final int size)
  {
    this.size = size;
  }

  /**
   * 获取精度
   *
   * @return 精度
   */
  public int getDigits()
  {
    return digits;
  }

  /**
   * 设置精度
   *
   * @param digits 精度
   */
  public void setDigits(final int digits)
  {
    this.digits = digits;
  }

  /**
   * 获取 nullAble
   *
   * @return the value of nullAble
   */
  public boolean isNullAble()
  {
    return nullAble;
  }

  /**
   * 设置 nullAble
   *
   * @param nullAble nullAble
   */
  public void setNullAble(final int nullAble)
  {
    if (nullAble == 1)
    {
      this.nullAble = true;
    } else
    {
      this.nullAble = false;
    }

  }

  /**
   * 获取 tableName
   *
   * @return the value of tableName
   */
  public String getTableName()
  {
    return tableName;
  }

  /**
   * 设置 tableName
   *
   * @param tableName tableName
   */
  public void setTableName(final String tableName)
  {
    this.tableName = tableName;
  }

  /**
   * 设置 nullAble
   *
   * @param nullAble nullAble
   */
  public void setNullAble(final boolean nullAble)
  {
    this.nullAble = nullAble;
  }

  /**
   * 获取 defaultValue
   *
   * @return the value of defaultValue
   */
  public String getDefaultValue()
  {
    return defaultValue;
  }

  /**
   * 设置 defaultValue
   *
   * @param defaultValue defaultValue
   */
  public void setDefaultValue(final String defaultValue)
  {
    this.defaultValue = defaultValue;
  }

  /**
   * 获取 comment
   *
   * @return the value of comment
   */
  public String getComment()
  {
    return comment;
  }

  /**
   * 设置 comment
   *
   * @param comment comment
   */
  public void setComment(final String comment)
  {
    this.comment = comment;
  }

  /**
   * 是否  primaryKey
   *
   * @return the value of primaryKey
   */
  public boolean isPrimaryKey()
  {
    return primaryKey;
  }

  /**
   * 设置 primaryKey
   *
   * @param primaryKey primaryKey
   */
  public void setPrimaryKey(final boolean primaryKey)
  {
    this.primaryKey = primaryKey;
  }

  /**
   * 描述信息
   *
   * @return 描述信息
   */
  public String toString()
  {
    return tableName + "." + name + "=>" + comment + ", " + typeName + "(" + size + "," + digits + ") defaultValue:" + defaultValue;
  }

  // =======================================
  /**
   * 关联的JAVA属性
   */
  private AttributesRef attributesRef;

  /**
   * 获取 关联的JAVA属性
   *
   * @return 关联的JAVA属性
   */
  public AttributesRef getAttributesRef()
  {
    return attributesRef;
  }

  /**
   * 设置 关联的JAVA属性
   *
   * @param attributesRef 关联的JAVA属性
   */
  public void setAttributesRef(final AttributesRef attributesRef)
  {
    this.attributesRef = attributesRef;
  }
}
