content: package com.taobao.yugong.common.db.meta;
  
  import java.util.List;
  
  import org.apache.commons.lang.StringUtils;
  import org.apache.commons.lang.builder.ToStringBuilder;
  
  import com.google.common.collect.Lists;
  import com.taobao.yugong.common.utils.YuGongToStringStyle;
  
  /**
   * 代表一张数据表
   *
   * @author agapple 2013-9-3 下午2:51:56
   * @since 3.0.0
   */
  public class Table {
  
      private String           type;
      private String           schema;
      private String           name;
      private List<ColumnMeta> primaryKeys = Lists.newArrayList();
      private List<ColumnMeta> columns     = Lists.newArrayList();
      // 增量必带的扩展字段,比如DRDS模式下的拆分键
      private String           extKey;
  
      public Table(String type, String schema, String name){
          this.type = type;
          this.schema = schema;
          this.name = name;
      }
  
      public Table(String type, String schema, String name, List<ColumnMeta> primaryKeys, List<ColumnMeta> columns){
          this.type = type;
          this.schema = schema;
          this.name = name;
          this.primaryKeys = primaryKeys;
          this.columns = columns;
      }
  
      public String getType() {
          return type;
      }
  
      public void setType(String type) {
          this.type = type;
      }
  
      public String getSchema() {
          return schema;
      }
  
      public void setSchema(String schema) {
          this.schema = schema;
      }
  
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public List<ColumnMeta> getPrimaryKeys() {
          return primaryKeys;
      }
  
      public void setPrimaryKeys(List<ColumnMeta> primaryKeys) {
          this.primaryKeys = primaryKeys;
      }
  
      public void addPrimaryKey(ColumnMeta primaryKey) {
          this.primaryKeys.add(primaryKey);
      }
  
      public List<ColumnMeta> getColumns() {
          return columns;
      }
  
      public void setColumns(List<ColumnMeta> columns) {
          this.columns = columns;
      }
  
      public void addColumn(ColumnMeta column) {
          this.columns.add(column);
      }
  
      /**
       * 返回所有字段信息，包括主键
       */
      public List<ColumnMeta> getColumnsWithPrimary() {
          List<ColumnMeta> result = Lists.newArrayList(primaryKeys);
          result.addAll(columns);
          return result;
      }
  
      public boolean isPrimaryKey(String columnName) {
          for (ColumnMeta col : primaryKeys) {
              if (StringUtils.equalsIgnoreCase(col.getName(), columnName)) {
                  return true;
              }
          }
  
          return false;
      }
  
      /**
       * 返回schema.name
       */
      public String getFullName() {
          return schema + "." + name;
      }
  
      public String getExtKey() {
          return extKey;
      }
  
      public void setExtKey(String extKey) {
          this.extKey = extKey;
      }
  
      public String toString() {
          return ToStringBuilder.reflectionToString(this, YuGongToStringStyle.DEFAULT_STYLE);
      }
  
      public int hashCode() {
          final int prime = 31;
          int result = 1;
          result = prime * result + ((name == null) ? 0 : name.hashCode());
          result = prime * result + ((schema == null) ? 0 : schema.hashCode());
          result = prime * result + ((type == null) ? 0 : type.hashCode());
          return result;
      }
  
      public boolean equals(Object obj) {
          if (this == obj) return true;
          if (obj == null) return false;
          if (getClass() != obj.getClass()) return false;
          Table other = (Table) obj;
          if (name == null) {
              if (other.name != null) return false;
          } else if (!name.equals(other.name)) return false;
          if (schema == null) {
              if (other.schema != null) return false;
          } else if (!schema.equals(other.schema)) return false;
          if (type == null) {
              if (other.type != null) return false;
          } else if (!type.equals(other.type)) return false;
          return true;
      }
  
  }
  