package com.sogou.qadev.service.cynthia.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import com.sogou.qadev.cache.impl.TemplateCache;
import com.sogou.qadev.service.cynthia.bean.Action;
import com.sogou.qadev.service.cynthia.bean.Attachment;
import com.sogou.qadev.service.cynthia.bean.Data;
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.bean.Option;
import com.sogou.qadev.service.cynthia.bean.Template;
import com.sogou.qadev.service.cynthia.bean.UUID;
import com.sogou.qadev.service.cynthia.service.DataAccessSession;
import com.sogou.qadev.service.cynthia.service.DataManager;
public abstract class BaseUtil {
public static Map<String, String> baseFieldNameMap = new HashMap<String, String>();
public static Map<String, String> baseFieldIdMap = new HashMap<String, String>();
public static Map<String, String> baseFieldTypeMap = new HashMap<String, String>();
public static String errorXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><error>true</error></root>";
public static String correctXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><error>false</error></root>";
public static String emptyDataXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><resultset><totalcount>0</totalcount></resultset>";
static {
baseFieldNameMap.put("title", "标题");
baseFieldNameMap.put("description", "描述");
baseFieldNameMap.put("status_id", "状态");
baseFieldNameMap.put("create_user", "创建人");
baseFieldNameMap.put("create_time", "创建时间");
baseFieldNameMap.put("assign_user", "指派人");
baseFieldNameMap.put("last_modify_time", "修改时间");
baseFieldNameMap.put("node_id", "项目");
baseFieldNameMap.put("action_id", "执行动作");
baseFieldNameMap.put("action_user", "执行人");
baseFieldNameMap.put("action_comment", "执行描述");
baseFieldNameMap.put("action_index", "执行序号");
}
static {
baseFieldTypeMap.put("title", "input");
baseFieldTypeMap.put("description", "text");
baseFieldTypeMap.put("status_id", "selection");
baseFieldTypeMap.put("create_user", "selection");
baseFieldTypeMap.put("create_time", "timestamp");
baseFieldTypeMap.put("assign_user", "selection");
baseFieldTypeMap.put("last_modify_time", "timestamp");
baseFieldTypeMap.put("node_id", "selection");
baseFieldTypeMap.put("action_id", "selection");
baseFieldTypeMap.put("action_user", "selection");
baseFieldTypeMap.put("action_comment", "text");
}
static {
for (Map.Entry<String, String> entry : baseFieldNameMap.entrySet())
baseFieldIdMap.put(entry.getValue(), entry.getKey());
}
/**
* @description:get all data value map
* @date:2014-5-6 下午6:34:43
* @version:v1.0
* @param task
* @param das
* @return
*/
protected Map<String, String> createMapByTaskFieldValue(Data task,DataAccessSession das) {
Map<String, String> dataMap = new HashMap<String, String>();
Template template = das.queryTemplate(task.getTemplateId());
if (template == null)
return dataMap;
for (Field field : template.getFields()) {
if (field.getType().equals(Type.t_selection)) {
if (field.getDataType().equals(DataType.dt_single)) {
UUID optionId = task.getSingleSelection(field.getId());
if (optionId != null) {
Option option = field.getOption(optionId);
if (option != null)
dataMap.put(field.getName(), option.getName());
}
} else {
UUID[] optionIdArray = task
.getMultiSelection(field.getId());
if (optionIdArray != null && optionIdArray.length > 0) {
StringBuffer valueStrb = new StringBuffer();
for (UUID optionId : optionIdArray) {
Option option = field.getOption(optionId);
if (option != null) {
if (valueStrb.length() > 0)
valueStrb.append(",");
valueStrb.append("[").append(option.getName())
.append("]");
}
}
if (valueStrb.length() > 0)
dataMap.put(field.getName(), valueStrb.toString());
}
}
} else if (field.getType().equals(Type.t_reference)) {
if (field.getDataType().equals(DataType.dt_single)) {
UUID dataId = task.getSingleReference(field.getId());
if (dataId != null) {
Data data = das.queryData(dataId);
if (data != null)
dataMap.put(field.getName(), data.getTitle());
}
} else {
UUID[] dataIdArray = task.getMultiReference(field.getId());
if (dataIdArray != null && dataIdArray.length > 0) {
StringBuffer valueStrb = new StringBuffer();
for (UUID dataId : dataIdArray) {
Data data = das.queryData(dataId);
if (data != null) {
if (valueStrb.length() > 0)
valueStrb.append(",");
valueStrb.append("[").append(data.getTitle())
.append("]");
}
}
if (valueStrb.length() > 0)
dataMap.put(field.getName(), valueStrb.toString());
}
}
} else if (field.getType().equals(Type.t_attachment)) {
UUID[] attachmentIdArray = task.getAttachments(field.getId());
if (attachmentIdArray != null && attachmentIdArray.length > 0) {
StringBuffer valueStrb = new StringBuffer();
Attachment[] attachmentArray = das.queryAttachments(
attachmentIdArray, false);
for (Attachment attachment : attachmentArray) {
if (valueStrb.length() > 0)
valueStrb.append(",");
valueStrb.append("[").append(attachment.getName())
.append("]");
}
if (valueStrb.length() > 0)
dataMap.put(field.getName(), valueStrb.toString());
}
} else if (field.getType().equals(Type.t_input)) {
if (field.getDataType().equals(DataType.dt_integer)) {
Integer value = task.getInteger(field.getId());
if (value == null) {
value = Integer.MIN_VALUE;
}
dataMap.put(field.getName(), value.toString());
} else if (field.getDataType().equals(DataType.dt_long)) {
Long value = task.getLong(field.getId());
if (value == null) {
value = Long.MIN_VALUE;
}
dataMap.put(field.getName(), value.toString());
} else if (field.getDataType().equals(DataType.dt_float)) {
Float value = task.getFloat(field.getId());
if (value == null) {
value = Float.MIN_VALUE;
}
dataMap.put(field.getName(), value.toString());
} else if (field.getDataType().equals(DataType.dt_double)) {
Double value = task.getDouble(field.getId());
if (value == null) {
value = Double.MIN_VALUE;
}
dataMap.put(field.getName(), value.toString());
} else if (field.getDataType().equals(DataType.dt_string)
|| field.getDataType().equals(DataType.dt_text)) {
String value = task.getString(field.getId());
if (value != null)
dataMap.put(field.getName(), value);
} else if (field.getDataType().equals(DataType.dt_timestamp)) {
Date value = task.getDate(field.getId());
if (value != null)
dataMap.put(field.getName(), value.toString());
}
}
}
return dataMap;
}
/**
* @description:get base field values by field name
* @date:2014-5-6 下午6:34:56
* @version:v1.0
* @param task
* @param fieldName
* @param das
* @return
*/
protected String getTaskBaseAttribute(Data task, String fieldName,
DataAccessSession das) {
if ("title".equals(fieldName) || "标题".equals(fieldName))
return task.getTitle();
else if ("status_id".equals(fieldName) || "状态".equals(fieldName))
return DataManager.getInstance().getDataStatus(task, das);
else if ("create_user".equals(fieldName) || "创建人".equals(fieldName))
return task.getCreateUsername();
else if ("create_time".equals(fieldName) || "创建时间".equals(fieldName)) {
String createTime = task.getCreateTime().toString();
if (createTime.indexOf(".") > 0)
createTime = createTime.split("\\.")[0];
return createTime;
} else if ("description".equals(fieldName) || "描述".equals(fieldName))
return task.getDescription();
else if ("assign_user".equals(fieldName) || "指派人".equals(fieldName))
return task.getAssignUsername();
else if ("last_modify_time".equals(fieldName)
|| "修改时间".equals(fieldName)) {
String lastModifyTime = task.getLastModifyTime().toString();
if (lastModifyTime.indexOf(".") > 0)
lastModifyTime = lastModifyTime.split("\\.")[0];
return lastModifyTime;
} else if ("node_id".equals(fieldName) || "项目".equals(fieldName)) {
Template template = das.queryTemplate(task.getTemplateId());
if (template != null)
return template.getName();
return null;
} else if ("action_id".equals(fieldName) || "执行动作".equals(fieldName)) {
if (task.getActionId() == null)
return "编辑";
Template template = TemplateCache.getInstance().get(
task.getTemplateId());
Action action = das.queryAction(task.getActionId(),
template.getFlowId());
if (action != null)
return action.getName();
return null;
} else if ("action_user".equals(fieldName) || "执行人".equals(fieldName))
return task.getActionUser();
else if ("action_comment".equals(fieldName) || "执行描述".equals(fieldName))
return task.getActionComment();
else if ("action_index".equals(fieldName) || "执行序号".equals(fieldName))
return Integer.toString(task.getActionIndex());
return null;
}
/**
* @description:cut data
* @date:2014-5-6 下午6:35:15
* @version:v1.0
* @param datas
* @param start
* @param limit
* @return
*/
protected List<Data> cutData(Data[] datas, int start, int limit) {
List<Data> result = new ArrayList<Data>();
if (datas == null || datas.length == 0)
return result;
int totalCount = datas.length;
int begin = start;
int end = start + limit > totalCount ? totalCount : start + limit;
for (int i = begin; i < end; i++) {
result.add(datas[i]);
}
return result;
}
protected Document getNewDocument() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (Exception e) {
e.printStackTrace();
return null;
}
Document document = builder.newDocument();
return document;
}
}