Package com.sogou.qadev.service.cynthia.dao

Source Code of com.sogou.qadev.service.cynthia.dao.FieldNameMapMySQL

package com.sogou.qadev.service.cynthia.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.sogou.qadev.service.cynthia.bean.Field;
import com.sogou.qadev.service.cynthia.bean.Field.DataType;
import com.sogou.qadev.service.cynthia.bean.Field.Type;
import com.sogou.qadev.service.cynthia.service.DbPoolConnection;

/**
* @description:field name map db processor
* @author:liming
* @mail:liming@sogou-inc.com
* @date:2014-5-6 下午5:32:25
* @version:v1.0
*/
public class FieldNameMapMySQL {
 
  private static FieldNameMapMySQL instance = null;

  private static Map<String,Integer> fieldTypeCountMap = new HashMap<String, Integer>();
 
  /**
   * max single type  field count
   */
  private static int fieldIntCount = 40;
 
  private static int fieldIntMCount = 10;
  /**
   * max single string field count
   */
  private static int fieldStrCount = 35;
  /**
   * max multi string type field count
   */
  private static int fieldStrMCount = 30;
  private static int fieldEditorCount = 5;
  private static int fieldComCount = 5;
 
  public static synchronized final FieldNameMapMySQL getInstance()
  {
    if (instance == null){
      instance = new FieldNameMapMySQL();
      fieldTypeCountMap.put("Int", fieldIntCount);
      fieldTypeCountMap.put("IntM", fieldIntMCount);
      fieldTypeCountMap.put("Str", fieldStrCount);
      fieldTypeCountMap.put("StrM", fieldStrMCount);
      fieldTypeCountMap.put("Editor", fieldEditorCount);
      fieldTypeCountMap.put("Com", fieldComCount);
    }
   
    return instance;
  }

  private FieldNameMapMySQL()
  {
    super();
  }
 
  /**
   * @description:get last used field colname by field type and template
   * @date:2014-5-6 下午5:35:28
   * @version:v1.0
   * @param fieldType
   * @param templateId
   * @return
   */
  private String getLastUsedFieldName(String fieldType,String templateId){
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    String fieldName = "";
    try {
      conn = DbPoolConnection.getInstance().getReadConnection();
      stat = conn.createStatement();
      rs = stat.executeQuery("SELECT fieldColName FROM field_name_map WHERE templateId="+ templateId +" and fieldType = '"+fieldType+"' ORDER BY id DESC LIMIT 1");
      while (rs.next()) {
        fieldName = rs.getString("fieldColName");
        break;
      }
    } catch (Exception e) {
      e.printStackTrace();
    }finally{
      DbPoolConnection.getInstance().closeResultSet(rs);
      DbPoolConnection.getInstance().closeStatment(stat);
      DbPoolConnection.getInstance().closeConn(conn);
    }
    return fieldName;
  }
 
  /**
   * @description:get all fieldcolnames by field type
   * @date:2014-5-6 下午5:35:09
   * @version:v1.0
   * @param fieldType
   * @param templateId
   * @return
   */
  private List<String> getAllUsedFieldName(String fieldType,String templateId){
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    List<String> allFieldName = new ArrayList<String>();
    try {
      conn = DbPoolConnection.getInstance().getConnection();
      stat = conn.createStatement();
      String sql = "SELECT fieldColName FROM field_name_map WHERE templateId="+ templateId +" and fieldType = '"+fieldType+"'";
      rs = stat.executeQuery(sql);
      while (rs.next()) {
        allFieldName.add(rs.getString("fieldColName"));
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException();
    }finally{
      DbPoolConnection.getInstance().closeResultSet(rs);
      DbPoolConnection.getInstance().closeStatment(stat);
      DbPoolConnection.getInstance().closeConn(conn);
    }
    if (fieldType != null && fieldType.equals("Com")) {  //保留字段
      allFieldName.add("fieldCom_1")//修改优先级 
    }
    return allFieldName;
  }
 
  private String returnFirstField(String fieldType ,Integer index){
    return "field" + fieldType + "_" + index;
  }
 
  /**
   *
   * 功能:从allFieldNameList获得第一个未用的列名
   * 更改时间:2013-9-4 下午3:47:01
   * 作者:李明
   * 版本:1.0
   * 邮箱:liming@sogou-inc.com
   * @param allFieldNameList
   * @param fieldType
   * @return
   */
  private String getOneNotUsed(List<String> allFieldNameList , String fieldType){
    int allLength = fieldTypeCountMap.get(fieldType);
    for (int i = 1; i <= allLength; i++) {
      String fieldColName = "field" + fieldType + "_" + i;
      if (!allFieldNameList.contains(fieldColName)) {
        return returnFirstField(fieldType, i);
      }
    }
    return "";
  }
 
  /**
   * @description:get one usable field colname
   * @date:2014-5-6 下午5:34:44
   * @version:v1.0
   * @param fieldType
   * @param templateId
   * @return
   */
  public String getOneFieldName(String fieldType,String templateId){
   
    //首先查询中间未使用的
    List<String> allFieldNameList = getAllUsedFieldName(fieldType, templateId);
    String fieldColName = getOneNotUsed(allFieldNameList,fieldType);
    if (fieldColName != "") {
       return fieldColName;
    }else {
      //查询剩余字段
      allFieldNameList = getAllUsedFieldName("Com", templateId)//Com为通用字段
      return getOneNotUsed(allFieldNameList, "Com");
    }
  }
 
  /**
   * @description:get field col name type
   * @date:2014-5-6 下午5:34:26
   * @version:v1.0
   * @param field
   * @return
   */
  public String getFieldColNameType(Field field){
    String fieldTypeStr = "";
    Type type = field.getType();
    DataType dataType = field.getDataType();
   
    if(field.getName().equals("修改优先级")){
      return "Com"
    }
   
    if (type == Type.t_selection) {
      if (dataType == DataType.dt_single) {
        fieldTypeStr = "Int";
      }else {
        fieldTypeStr = "IntM";
      }
    }else if (type == Type.t_reference) {
      if (dataType == DataType.dt_single) {
        fieldTypeStr = "Int";
      }else {
        fieldTypeStr = "StrM";
      }
    }else if (type == Type.t_attachment) {
      fieldTypeStr = "Str";
    }else if (type == Type.t_input) {
      if (dataType == DataType.dt_integer || dataType == DataType.dt_long) {
        fieldTypeStr = "Int";
      }else if (dataType == DataType.dt_double || dataType == DataType.dt_float ||dataType == DataType.dt_timestamp ||dataType == DataType.dt_string ) {
        fieldTypeStr = "Str";
      }else if ( dataType == DataType.dt_text) {
        fieldTypeStr = "StrM";
      }else {
        fieldTypeStr = "Editor";
      }
    }
   
    return fieldTypeStr;
  }
 
  /**
   * @description:return one useable field colname
   * @date:2014-5-6 下午5:34:04
   * @version:v1.0
   * @param field
   * @param templateId
   * @return
   */
  public String getOneFieldName(Field field, String templateId){
    if (field == null || templateId == null) {
      return null;
    }
    String fieldTypeStr = "";
    if(field.getName().equals("修改优先级")){
      return "fieldCom_1"
    }else {
      fieldTypeStr = getFieldColNameType(field);
      return getOneFieldName(fieldTypeStr, templateId);
    }
  }
}
TOP

Related Classes of com.sogou.qadev.service.cynthia.dao.FieldNameMapMySQL

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.