/*
* Copyright(C) 2010-2013 Baidu Group
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
package com.baidu.qa.service.test.setup;
import java.io.File;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
import com.baidu.qa.service.test.client.MysqlClientImpl;
import com.baidu.qa.service.test.dto.Config;
import com.baidu.qa.service.test.dto.Constant;
import com.baidu.qa.service.test.template.VariableGenerator;
import com.baidu.qa.service.test.util.FileCharsetDetector;
import com.baidu.qa.service.test.util.FileUtil;
import com.baidu.qa.service.test.util.JdbcUtil;
public class SetUpWithMysqlImpl implements SetUpWithMysql {
private Log log = LogFactory.getLog(SetUpWithMysqlImpl.class);
public boolean setTestDataWithSql(File file,Config config) {
FileCharsetDetector det = new FileCharsetDetector();
try{
String oldcharset = det.guestFileEncoding(file);
if(oldcharset.equalsIgnoreCase("UTF-8") == false)
FileUtil.transferFile(file, oldcharset, "UTF-8");
}catch(Exception ex){
log.error("[change expect file charset error]:"+ex);
}
List<String> datalist = FileUtil.getListFromFile(file);
if(datalist.size() <= 1){
return true;
}
try{
String table = file.getName().substring(0, file.getName().indexOf(Constant.FILE_TYPE_DB)-1);
String[] name=table.split("\\.");
Assert.assertEquals("[get db name error]:from "+file.getName(),2, name.length);
String dbname=name[0];
StringBuilder sb = new StringBuilder();
sb.append("insert into ");
sb.append(table);
sb.append(" ( "+datalist.get(0)+" )");
sb.append(" values ");
for(int i=1;i<datalist.size();i++){
sb.append(" ("+datalist.get(i)+" ),");
}
sb.deleteCharAt(sb.length()-1);
log.info("[insert csv data into db,the sql is]:"+sb.toString());
JdbcUtil.excuteInsertOrUpdateSql(sb.toString(),dbname,config.getReplace_time());
log.debug("[insert csv data into db,the data are]:");
for(int i=0;i<datalist.size();i++){
System.out.println(datalist.get(i));
}
return true;
}catch(Exception e){
log.error("[insert csv data into mysql error]:", e);
throw new AssertionError("insert csv data into mysql error..."+e.getMessage());
}
}
public boolean setTestDataWithCsvFile(File file,Config config){
FileCharsetDetector det = new FileCharsetDetector();
try{
String oldcharset = det.guestFileEncoding(file);
if(oldcharset.equalsIgnoreCase("UTF-8") == false)
FileUtil.transferFile(file, oldcharset, "UTF-8");
}catch(Exception ex){
log.error("[change expect file charset error]:"+ex);
}
List<String> datalist = FileUtil.getListFromFile(file);
if(datalist.size() == 0){
return true;
}
try{
for(String sql : datalist){
log.info("[setup sql:]"+sql);
String[] split=sql.split("\\.");
if(split.length<2){
log.error("wrong sql:"+file);
return false;
}
String[] name=split[0].split(" ");
String dbname=name[name.length-1];
JdbcUtil.excuteInsertOrUpdateSql(sql,dbname,config.getReplace_time());
}
return true;
}catch(Exception e){
log.error("[insert csv data into mysql error]:", e);
throw new AssertionError("insert csv data into mysql error..."+e.getMessage());
}
}
public boolean setTestDataFromMysql(File file, Config config,
VariableGenerator vargen) {
MysqlClientImpl mc = new MysqlClientImpl();
try{
mc.selectVar(file, config, vargen);
return true;
}catch(Exception e){
log.error("[get test result data from mysql error]:", e);
return false;
}
}
}