package org.apache.hadoop.hbase.client.api;
import java.util.LinkedList;
import java.util.List;
/**
* Created by wangxiaoyi on 15/6/30.
* <p/>
* Construct the schema of Table
*/
public class TableSchema {
private String name;
private static final String MESSAGE = "message";
private static final String ROW_KEY = "required binary rowkey ;";
private static final String TIME_STAMP = "required int64 timestamp ;";
private static final String CF = "cf";
private List<ColumnDescriptor> columnDescripors = null;
public TableSchema(String name){
this.name = name;
this.columnDescripors = new LinkedList<>();
}
/**
* add column descriptor
* @param columnName
* @param field_rule
* @param field_type
*/
public void addColumnDescriptor(String columnName, FIELD_RULE field_rule, FIELD_TYPE field_type){
ColumnDescriptor cd = new ColumnDescriptor(columnName, field_rule, field_type);
columnDescripors.add(cd);
}
/**
* get table schema
* @return
*/
public String getTableSchema(){
StringBuilder sb = new StringBuilder();
sb.append(MESSAGE).append(" ")
.append(name).append(" ")
.append("{").append(" ")
.append(ROW_KEY);
for(ColumnDescriptor cd : columnDescripors){
sb.append(cd.getSchemaColumnDesc());
}
sb.append(" ").append(TIME_STAMP).append(" }");
return sb.toString();
}
public String getName() {
return name;
}
public String getCF() {
return CF;
}
/**
* descriptor for a column
*/
class ColumnDescriptor{
private static final String COLUMN_FAMILY = "cf:";
private String name;
private FIELD_TYPE field_type;
private FIELD_RULE field_rule;
public ColumnDescriptor(String name, FIELD_RULE field_rule, FIELD_TYPE field_type){
this.name = name;
this.field_type = field_type;
this.field_rule = field_rule;
}
/**
* form schema column descriptor
* @return
*/
public String getSchemaColumnDesc(){
StringBuilder sb = new StringBuilder();
sb.append(" ").append(field_rule).append(" ")
.append(field_type).append(" ")
.append(COLUMN_FAMILY)
.append(name).append(" ; ");
return sb.toString();
}
}
public static void main(String []args){
TableSchema schema = new TableSchema("people");
schema.addColumnDescriptor("name", FIELD_RULE.repeated, FIELD_TYPE.binary);
schema.addColumnDescriptor("age", FIELD_RULE.repeated, FIELD_TYPE.binary);
schema.addColumnDescriptor("job", FIELD_RULE.repeated, FIELD_TYPE.binary);
//schema.addColumnDescripor("name", FIELD_RULE.repeated, FIELD_TYPE.binary);
System.out.print(schema.getTableSchema());
}
}