// Path: uncode-dal/src/main/java/cn/uncode/dal/utils/ColumnWrapperUtils.java
// public class ColumnWrapperUtils {
// 
//     private static final String KEY_WORDS = "index,key,value,table,option,fields,version,user,name,status,desc,group,signal,";
// 
//     public static String wrap(String column) {
//         if (KEY_WORDS.indexOf(column) != -1) {
//             return "`" + column + "`";
//         } else {
//             return column;
//         }
//     }
// 
// }


import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import cn.uncode.dal.utils.ColumnWrapperUtils;
package cn.uncode.dal.descriptor;



/**
 * 表内容
 * @author ywj
 *
 */
public class Content implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -4742799207318016984L;

	/**
     * 所有字段-字符串
     */
    private String columns;
    
    
    private String database;
    
    /**
     * 表名
     */
    private String tableName;
    
    /**
     * 字段列表
     */
    private Map<String, Column> fields;
    
    /**
     * 索索列表
     */
    private Map<String, List<String>> indexs;
    
    /**
     * 索索字段-名称对应
     */
    private Map<String, String> indexFields;
    
    /**
     * 主键
     */
    private PrimaryKey primaryKey;
    
    /**
     * 版本字段
     */
    private Column versionField;
    
    public Content(){
    	super();
        fields = new HashMap<String, Column>();
        indexs = new HashMap<String, List<String>>();
        indexFields = new HashMap<String, String>();
        primaryKey = new PrimaryKey();
    }
    
    /**
     * 处理后的表字段 {@code String} 格式的字符串
     * <ul>
     * <li>对字段时行排序处理，sql也会进行排序；</li>
     * <li>最高级别隐藏不需要显示的字段；</li>
     * <li>生成主键相关信息；</li>
     * <li>生成外键相关信息；</li>
     * <li>生成自定义显示信息；</li>
     * </ul>
     * @return 处理后的表字段 {@code String} 格式的字符串。
     * @since 1.0
     */
    public String caculationAllColumn(){
        if(StringUtils.isNotEmpty(columns)){
            return columns;
        }else{
            StringBuffer sb = new StringBuffer();
            List<Column> fds = new ArrayList<Column>();
            if(fds == null || fds.size() == 0){
                fds.addAll(this.fields.values());
            }
            for(Column f:fds){
// Path: uncode-dal/src/main/java/cn/uncode/dal/utils/ColumnWrapperUtils.java
// public class ColumnWrapperUtils {
// 
//     private static final String KEY_WORDS = "index,key,value,table,option,fields,version,user,name,status,desc,group,signal,";
// 
//     public static String wrap(String column) {
//         if (KEY_WORDS.indexOf(column) != -1) {
//             return "`" + column + "`";
//         } else {
//             return column;
//         }
//     }
// 
// }


// Path: uncode-dal/src/main/java/cn/uncode/dal/descriptor/Content.java
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import cn.uncode.dal.utils.ColumnWrapperUtils;

package cn.uncode.dal.descriptor;



/**
 * 表内容
 * @author ywj
 *
 */
public class Content implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -4742799207318016984L;

	/**
     * 所有字段-字符串
     */
    private String columns;
    
    
    private String database;
    
    /**
     * 表名
     */
    private String tableName;
    
    /**
     * 字段列表
     */
    private Map<String, Column> fields;
    
    /**
     * 索索列表
     */
    private Map<String, List<String>> indexs;
    
    /**
     * 索索字段-名称对应
     */
    private Map<String, String> indexFields;
    
    /**
     * 主键
     */
    private PrimaryKey primaryKey;
    
    /**
     * 版本字段
     */
    private Column versionField;
    
    public Content(){
    	super();
        fields = new HashMap<String, Column>();
        indexs = new HashMap<String, List<String>>();
        indexFields = new HashMap<String, String>();
        primaryKey = new PrimaryKey();
    }
    
    /**
     * 处理后的表字段 {@code String} 格式的字符串
     * <ul>
     * <li>对字段时行排序处理，sql也会进行排序；</li>
     * <li>最高级别隐藏不需要显示的字段；</li>
     * <li>生成主键相关信息；</li>
     * <li>生成外键相关信息；</li>
     * <li>生成自定义显示信息；</li>
     * </ul>
     * @return 处理后的表字段 {@code String} 格式的字符串。
     * @since 1.0
     */
    public String caculationAllColumn(){
        if(StringUtils.isNotEmpty(columns)){
            return columns;
        }else{
            StringBuffer sb = new StringBuffer();
            List<Column> fds = new ArrayList<Column>();
            if(fds == null || fds.size() == 0){
                fds.addAll(this.fields.values());
            }
            for(Column f:fds){
                sb.append(ColumnWrapperUtils.wrap(f.getFieldName())).append(",");