Package com.sogou.qadev.service.cynthia.bean.impl

Source Code of com.sogou.qadev.service.cynthia.bean.impl.DataImpl

package com.sogou.qadev.service.cynthia.bean.impl;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

import com.sogou.qadev.cache.impl.TemplateCache;
import com.sogou.qadev.service.cynthia.bean.BaseType;
import com.sogou.qadev.service.cynthia.bean.ChangeLog;
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.Method;
import com.sogou.qadev.service.cynthia.bean.Template;
import com.sogou.qadev.service.cynthia.bean.UUID;
import com.sogou.qadev.service.cynthia.factory.DataAccessFactory;
import com.sogou.qadev.service.cynthia.util.CommonUtil;
import com.sogou.qadev.service.cynthia.util.Date;
import com.sohu.rd.td.util.reference.Pair;
import com.sohu.rd.td.util.xml.XMLUtil;

/**
* @description:data implements
* @author:liming
* @mail:liming@sogou-inc.com
* @date:2014-5-6 下午3:01:21
* @version:v1.0
*/
public final class DataImpl implements Data
{
  /**
   * @Fields:serialVersionUID
   * @Fields_Type:long
   * @description:TODO
   * @date:2014-5-6 下午3:01:12
   */
  private static final long serialVersionUID = 6558956319932690247L;
 
  /**
   * @description:get serial version id
   * @date:2014-5-6 下午3:02:43
   * @version:v1.0
   * @return
   */
  public static long getSerialversionuid() {
    return serialVersionUID;
  }
  private String assignUser = null;
  private List<ChangeLog> changeLogs = new ArrayList<ChangeLog>();
  private Timestamp createTime = null;
  private String createUser = null;
  private String description = null;
  private UUID id = null;
  private Timestamp lastModifyTime = null;
  private Map<String, Object> objectMapName = new HashMap<String, Object>();
  private Map<UUID, Object> objectMapUUID = new HashMap<UUID, Object>();
 
  private UUID statusId = null;

  private UUID templateId = null;

  private UUID templateTypeId = null;

  private String title = null;
 
  public DataImpl(){
  }
 
  /**
   * <h1> Title:</h1>
   * <p> Description:init data from node</p>
   * @date:2014-5-6
   * @param node
   */
  public DataImpl(Node node){
    init(node);
  }
 
  /**
   * <h1> Title:</h1>
   * <p> Description:init data</p>
   * @date:2014-5-6
   * @param id
   * @param templateId
   * @param createUser
   * @param createTime
   */
  public DataImpl(UUID id, UUID templateId, String createUser, Timestamp createTime){
    this.id = id;
    this.templateId = templateId;
    this.createUser = createUser;
    this.createTime = createTime;
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:addChangeLog</p>
   * @param changeLog
   * @see com.sogou.qadev.service.cynthia.bean.Data#addChangeLog(com.sogou.qadev.service.cynthia.bean.ChangeLog)
   */
  public void addChangeLog(ChangeLog changeLog){
    this.changeLogs.add(changeLog);
  }

  /**
   * (non-Javadoc)
   * <p> Title:clone</p>
   * @return
   * @see java.lang.Object#clone()
   */
  public Data clone(){
    DataImpl dataImpl = new DataImpl(this.id, this.templateId, this.createUser, this.createTime);
    dataImpl.title = this.title;
    dataImpl.description = this.description;
    dataImpl.assignUser = this.assignUser;
    dataImpl.lastModifyTime = this.lastModifyTime;
    dataImpl.statusId = this.statusId;

    for(Map.Entry<String, Object> entry : this.objectMapName.entrySet()){
      if(entry.getValue() instanceof BaseType){
        dataImpl.objectMapName.put(entry.getKey(), ((BaseType)entry.getValue()).clone());
      }
      else{
        dataImpl.objectMapName.put(entry.getKey(), entry.getValue());
      }
    }

    for(Map.Entry<UUID, Object> entry : this.objectMapUUID.entrySet()){
      if (entry.getValue() instanceof BaseType){
        dataImpl.objectMapUUID.put(entry.getKey(), ((BaseType) entry.getValue()).clone());
      }
      else{
        dataImpl.objectMapUUID.put(entry.getKey(), entry.getValue());
      }
    }

    for(ChangeLog changeLog : this.changeLogs){
      dataImpl.changeLogs.add(changeLog);
    }

    return dataImpl;
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:getActionComment</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getActionComment()
   */
  public String getActionComment(){
    if(changeLogs.size() == 0){
      return null;
    }

    return changeLogs.get(changeLogs.size() - 1).getActionComment();
  }

  /**
   * (non-Javadoc)
   * <p> Title:getActionId</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getActionId()
   */
  public UUID getActionId(){
    if(changeLogs.size() == 0){
      return null;
    }

    return changeLogs.get(changeLogs.size() - 1).getActionId();
  }

  /**
   * (non-Javadoc)
   * <p> Title:getActionIndex</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getActionIndex()
   */
  public int getActionIndex(){
    return changeLogs.size();
  }

  /**
   * (non-Javadoc)
   * <p> Title:getActionUser</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getActionUser()
   */
  public String getActionUser(){
    if(changeLogs.size() == 0){
      return null;
    }

    return changeLogs.get(changeLogs.size() - 1).getCreateUser();
  }

  /**
   * (non-Javadoc)
   * <p> Title:getAssignUser</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getAssignUser()
   */
  public String getAssignUser() {
    return assignUser;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getAssignUsername</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getAssignUsername()
   */
  public String getAssignUsername(){
    return this.assignUser;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getAttachments</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getAttachments(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public UUID[] getAttachments(UUID fieldId){
    return getNotNullUUID((UUID[])this.objectMapUUID.get(fieldId));
  }

  /**
   * (non-Javadoc)
   * <p> Title:getChangeLogs</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getChangeLogs()
   */
  public ChangeLog[] getChangeLogs(){
    return this.changeLogs.toArray(new ChangeLog[this.changeLogs.size()]);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getCreateTime</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getCreateTime()
   */
  public Timestamp getCreateTime(){
    return this.createTime;
  }

  /**
   * @description:TODO
   * @date:2014-5-6 下午3:02:06
   * @version:v1.0
   * @return
   */
  public String getCreateUser() {
    return createUser;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getCreateUsername</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getCreateUsername()
   */
  public String getCreateUsername(){
    return this.createUser;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getDate</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getDate(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public Date getDate(UUID fieldId){
    return (Date)this.objectMapUUID.get(fieldId);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getDescription</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getDescription()
   */
  public String getDescription(){
    return this.description;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getDouble</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getDouble(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public Double getDouble(UUID fieldId){
    return (Double)this.objectMapUUID.get(fieldId);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getFloat</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getFloat(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public Float getFloat(UUID fieldId){
    return (Float)this.objectMapUUID.get(fieldId);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getId</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.BaseType#getId()
   */
  public UUID getId() {
    return id;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getInteger</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getInteger(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public Integer getInteger(UUID fieldId){
    return (Integer)this.objectMapUUID.get(fieldId);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getLastModifyTime</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getLastModifyTime()
   */
  public Timestamp getLastModifyTime(){
    return this.lastModifyTime;
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:getLong</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getLong(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public Long getLong(UUID fieldId){
    return (Long)this.objectMapUUID.get(fieldId);
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:getMultiReference</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getMultiReference(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public UUID[] getMultiReference(UUID fieldId){
    return getNotNullUUID((UUID[])this.objectMapUUID.get(fieldId));
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:getMultiSelection</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getMultiSelection(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public UUID[] getMultiSelection(UUID fieldId){
    return getNotNullUUID((UUID[])this.objectMapUUID.get(fieldId));
  }

  /**
   * @description:return not null uuids
   * @date:2014-5-6 下午3:08:05
   * @version:v1.0
   * @param inputUUID
   * @return
   */
  public UUID[] getNotNullUUID(UUID[] inputUUID){
    Set<UUID> uuidSet = new HashSet<UUID>();
    if (inputUUID != null) {
      for (UUID uuid : inputUUID) {
        if (uuid!=null) {
          uuidSet.add(uuid);
        }
      }
    }
    return uuidSet.toArray(new UUID[0]);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getObject</p>
   * @param fieldName
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getObject(java.lang.String)
   */
  public Object getObject(String fieldName){
    return this.objectMapName.get(fieldName);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getObject</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getObject(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public Object getObject(UUID fieldId){
    return this.objectMapUUID.get(fieldId);
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:getObjectMapName</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getObjectMapName()
   */
  public Map<String, Object> getObjectMapName() {
    return objectMapName;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getObjectMapUUID</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getObjectMapUUID()
   */
  public Map<UUID, Object> getObjectMapUUID() {
    return objectMapUUID;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getSingleReference</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getSingleReference(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public UUID getSingleReference(UUID fieldId){
    return (UUID)this.objectMapUUID.get(fieldId);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getSingleSelection</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getSingleSelection(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public UUID getSingleSelection(UUID fieldId){
    return (UUID)this.objectMapUUID.get(fieldId);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getStatusId</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getStatusId()
   */
  public UUID getStatusId() {
    return statusId;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getString</p>
   * @param fieldName
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getString(java.lang.String)
   */
  public String getString(String fieldName){
    return (String)this.objectMapName.get(fieldName);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getString</p>
   * @param fieldId
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getString(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public String getString(UUID fieldId){
    return (String)this.objectMapUUID.get(fieldId);
  }

  /**
   * (non-Javadoc)
   * <p> Title:getTemplateId</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getTemplateId()
   */
  public UUID getTemplateId() {
    return templateId;
  }


  /**
   * @description:TODO
   * @date:2014-5-6 下午3:01:48
   * @version:v1.0
   * @return
   */
  public UUID getTemplateTypeId() {
    return templateTypeId;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getTitle</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getTitle()
   */
  public String getTitle() {
    return title;
  }

  /**
   * (non-Javadoc)
   * <p> Title:getValidFieldIds</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getValidFieldIds()
   */
  public UUID[] getValidFieldIds(){
    Set<UUID> validFieldIdSet = new LinkedHashSet<UUID>();
    for(UUID fieldId : this.objectMapUUID.keySet()){
      if(this.objectMapUUID.get(fieldId) != null)
        validFieldIdSet.add(fieldId);
    }

    return validFieldIdSet.toArray(new UUID[validFieldIdSet.size()]);
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:getValidFieldNames</p>
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#getValidFieldNames()
   */
  public String[] getValidFieldNames(){
    Set<String> validFieldNameSet = new LinkedHashSet<String>();
    for(String fieldName : this.objectMapName.keySet()){
      if(this.objectMapName.get(fieldName) != null)
        validFieldNameSet.add(fieldName);
    }

    return validFieldNameSet.toArray(new String[validFieldNameSet.size()]);
  }

  /**
   * @description:init data from node
   * @date:2014-5-6 下午3:09:08
   * @version:v1.0
   * @param node
   */
  private void init(Node node){
    try {
    Node taskNode = XMLUtil.getSingleNode(node, "task");
    DataAccessFactory dataAccessFactory = DataAccessFactory.getInstance();

    this.id = dataAccessFactory.createUUID(XMLUtil.getSingleNodeTextContent(taskNode, "id"));
    this.templateId = dataAccessFactory.createUUID(XMLUtil.getSingleNodeTextContent(taskNode, "templateId"));
    this.title = XMLUtil.getSingleNodeTextContent(taskNode, "title");
    this.description = XMLUtil.getSingleNodeTextContent(taskNode, "description");
    this.createUser = XMLUtil.getSingleNodeTextContent(taskNode, "createUser");
    this.createTime = Timestamp.valueOf(XMLUtil.getSingleNodeTextContent(taskNode, "createTime"));
    this.assignUser = XMLUtil.getSingleNodeTextContent(taskNode, "assignUser");
    this.lastModifyTime = Timestamp.valueOf(XMLUtil.getSingleNodeTextContent(taskNode, "lastModifyTime"));
    this.statusId = dataAccessFactory.createUUID(XMLUtil.getSingleNodeTextContent(taskNode, "statusId"));

    Template template = TemplateCache.getInstance().get(this.templateId);
    if(template == null){
      throw new RuntimeException();
    }

    this.templateTypeId = template.getTemplateTypeId();

    List<Node> fieldNodeList = XMLUtil.getNodes(taskNode, "fields/field");

    for(Node fieldNode : fieldNodeList){
      List<Node> fieldDataNodeList = XMLUtil.getNodes(fieldNode, "data");
      if (fieldDataNodeList.size() == 0){
        continue;
      }

      UUID fieldId = dataAccessFactory.createUUID(XMLUtil.getSingleNodeTextContent(fieldNode, "id"));
      Field field = template.getField(fieldId);
      if(field == null){
        continue;
      }

      if(field.getType().equals(Type.t_selection)){
        if(field.getDataType().equals(DataType.dt_single)){
          this.setSingleSelection(fieldId, dataAccessFactory.createUUID(fieldDataNodeList.get(0).getTextContent()));
        }
        else if(field.getDataType().equals(DataType.dt_multiple)){
          Set<UUID> fieldDataSet = new LinkedHashSet<UUID>();

          for(Node fieldDataNode : fieldDataNodeList){
            fieldDataSet.add(dataAccessFactory.createUUID(fieldDataNode.getTextContent()));
          }

          this.setMultiSelection(fieldId, fieldDataSet.toArray(new UUID[fieldDataSet.size()]));
        }
      }
      else if(field.getType().equals(Type.t_reference)){
        if (field.getDataType().equals(DataType.dt_single)){
          this.setSingleReference(fieldId, dataAccessFactory.createUUID(fieldDataNodeList.get(0).getTextContent()));
        }
        else if(field.getDataType().equals(DataType.dt_multiple)){
          Set<UUID> fieldDataSet = new LinkedHashSet<UUID>();

          for(Node fieldDataNode : fieldDataNodeList){
            fieldDataSet.add(dataAccessFactory.createUUID(fieldDataNode.getTextContent()));
          }

          this.setMultiReference(fieldId, fieldDataSet.toArray(new UUID[fieldDataSet.size()]));
        }
      }
      else if(field.getType().equals(Type.t_attachment)){
        Set<UUID> fieldDataSet = new LinkedHashSet<UUID>();

        for(Node fieldDataNode : fieldDataNodeList){
          fieldDataSet.add(dataAccessFactory.createUUID(fieldDataNode.getTextContent()));
        }

        this.setAttachments(fieldId, fieldDataSet.toArray(new UUID[fieldDataSet.size()]));
      }
      else if(field.getType().equals(Type.t_input)){
        String fieldData = fieldDataNodeList.get(0).getTextContent();
        if(fieldData != null){
          if(field.getDataType().equals(DataType.dt_integer)){
            this.setInteger(fieldId, Integer.valueOf(fieldData));
          }
          else if(field.getDataType().equals(DataType.dt_double)){
            this.setDouble(fieldId, Double.valueOf(fieldData));
          }
          else if(field.getDataType().equals(DataType.dt_float)){
            this.setFloat(fieldId, Float.valueOf(fieldData));
          }
          else if(field.getDataType().equals(DataType.dt_long)){
            this.setLong(fieldId, Long.valueOf(fieldData));
          }
          else if(field.getDataType().equals(DataType.dt_timestamp)){
            this.setDate(fieldId, Date.valueOf(fieldData));
          }
          else if(field.getDataType().equals(DataType.dt_string) || field.getDataType().equals(DataType.dt_text)){
            this.setString(fieldId, fieldData);
          }
        }
      }
    }

    List<Node> logNodeList = XMLUtil.getNodes(taskNode, "logs/log");
    for(Node logNode : logNodeList){
      String logCreateUser = XMLUtil.getSingleNodeTextContent(logNode, "createUser");
      if(logCreateUser.equals("script@sogou-inc.com")){
        continue;
      }

      Timestamp logCreateTime = Timestamp.valueOf(XMLUtil.getSingleNodeTextContent(logNode, "createTime"));

      UUID actionId = null;
      String actionIdStr = XMLUtil.getSingleNodeTextContent(logNode, "actionId");
      if(actionIdStr != null){
        actionId = DataAccessFactory.getInstance().createUUID(actionIdStr);
      }

      String actionComment = XMLUtil.getSingleNodeTextContent(logNode, "actionComment");

      Map<String, Pair<Object, Object>> baseValueMap = new LinkedHashMap<String, Pair<Object, Object>>();

      List<Node> baseValueNodeList = XMLUtil.getNodes(logNode, "baseValues/baseValue");
      for(Node baseValueNode : baseValueNodeList){
        String base = XMLUtil.getSingleNodeTextContent(baseValueNode, "base");
        String previous = XMLUtil.getSingleNodeTextContent(baseValueNode, "previous");
        String current = XMLUtil.getSingleNodeTextContent(baseValueNode, "current");

        Pair<Object, Object> value = new Pair<Object, Object>();

        if(base.equals("id") || base.equals("statusId")){
          if(previous != null){
            value.setFirst(DataAccessFactory.getInstance().createUUID(previous));
          }

          if(current != null){
            value.setSecond(DataAccessFactory.getInstance().createUUID(current));
          }
        }
        else if(base.equals("createTime") || base.equals("lastModifyTime")){
          if(previous != null){
            value.setFirst(Timestamp.valueOf(previous));
          }

          if(current != null){
            value.setSecond(Timestamp.valueOf(current));
          }
        }
        else{
          value.setFirst(previous);
          value.setSecond(current);
        }

        baseValueMap.put(base, value);
      }

      Map<UUID, Pair<Object, Object>> extValueMap = new LinkedHashMap<UUID, Pair<Object, Object>>();

      List<Node> extValueNodeList = XMLUtil.getNodes(logNode, "extValues/extValue");
      for(Node extValueNode : extValueNodeList){
        UUID ext = DataAccessFactory.getInstance().createUUID(XMLUtil.getSingleNodeTextContent(extValueNode, "ext"));
        String previous = XMLUtil.getSingleNodeTextContent(extValueNode, "previous");
        String current = XMLUtil.getSingleNodeTextContent(extValueNode, "current");

        Field field = template.getField(ext);
        if(field == null){
          continue;
        }

        Pair<Object, Object> value = new Pair<Object, Object>();

        if(field.getType().equals(Type.t_selection) || field.getType().equals(Type.t_reference) || field.getType().equals(Type.t_attachment)){
          if(field.getDataType() != null && field.getDataType().equals(DataType.dt_single)){
            if(previous != null){
              value.setFirst(DataAccessFactory.getInstance().createUUID(previous));
            }

            if(current != null){
              value.setSecond(DataAccessFactory.getInstance().createUUID(current));
            }
          }
          else if(field.getDataType() == null || field.getDataType().equals(DataType.dt_multiple)){
            if(previous != null){
              String[] previousElemArray = previous.split("\\,");
              UUID[] previousElemIdArray = new UUID[previousElemArray.length];
              for(int i = 0; i < previousElemArray.length; i++){
                previousElemIdArray[i] = DataAccessFactory.getInstance().createUUID(previousElemArray[i]);
              }

              value.setFirst(previousElemIdArray);
            }

            if(current != null){
              String[] currentElemArray = current.split("\\,");
              UUID[] currentElemIdArray = new UUID[currentElemArray.length];
              for(int i = 0; i < currentElemArray.length; i++){
                currentElemIdArray[i] = DataAccessFactory.getInstance().createUUID(currentElemArray[i]);
              }

              value.setSecond(currentElemIdArray);
            }
          }
        }
        else if(field.getType().equals(Type.t_input)){
          if(field.getDataType().equals(DataType.dt_integer)){
            if(previous != null){
              value.setFirst(Integer.valueOf(previous));
            }

            if(current != null){
              value.setSecond(Integer.valueOf(current));
            }
          }

          if(field.getDataType().equals(DataType.dt_long)){
            if(previous != null){
              value.setFirst(Long.valueOf(previous));
            }

            if(current != null){
              value.setSecond(Long.valueOf(current));
            }
          }

          if(field.getDataType().equals(DataType.dt_float)){
            if(previous != null){
              value.setFirst(Float.valueOf(previous));
            }

            if(current != null){
              value.setSecond(Float.valueOf(current));
            }
          }

          if(field.getDataType().equals(DataType.dt_double)){
            if(previous != null){
              value.setFirst(Double.valueOf(previous));
            }

            if(current != null){
              value.setSecond(Double.valueOf(current));
            }
          }

          if(field.getDataType().equals(DataType.dt_timestamp)){
            if(previous != null){
              value.setFirst(Date.valueOf(previous));
            }

            if(current != null){
              value.setSecond(Date.valueOf(current));
            }
          }

          if(field.getDataType().equals(DataType.dt_string) || field.getDataType().equals(DataType.dt_text)){
            value.setFirst(previous);
            value.setSecond(current);
          }
        }

        extValueMap.put(ext, value);
      }

      this.addChangeLog(new ChangeLogImpl(this.id, logCreateUser, logCreateTime, actionId, actionComment, baseValueMap, extValueMap));
    }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * (non-Javadoc)
   * <p> Title:isMatching</p>
   * @param fieldId
   * @param method
   * @param c
   * @param isCurrent
   * @return
   * @see com.sogou.qadev.service.cynthia.bean.Data#isMatching(java.lang.String, com.sogou.qadev.service.cynthia.bean.Method, java.lang.Object, boolean)
   */
  public boolean isMatching(String fieldId, Method method, Object c, boolean isCurrent){
    if(!isCurrent){
      return false;
    }

    if(CommonUtil.isPosNum(fieldId)){
      return matchExt(DataAccessFactory.getInstance().createUUID(fieldId), method, c);
    }

    return matchBase(fieldId, method, c);
  }

  /**
   * @description:TODO
   * @date:2014-5-6 下午3:09:43
   * @version:v1.0
   * @param baseFieldId
   * @param method
   * @param c
   * @return
   */
  private boolean matchBase(String baseFieldId, Method method, Object c){
    //在这里添加状态转换代码
    if(baseFieldId.equals("id")){
      if(method.equals(Method.equals)){
        return this.getId().equals(c);
      }

      if(method.equals(Method.notequals)){
        return !this.getId().equals(c);
      }

      if(method.equals(Method.isnull)){
        return false;
      }

      if(method.equals(Method.isnotnull)){
        return true;
      }
    }
    else if(baseFieldId.equals("title")){
      if(method.equals(Method.equals)){
        return this.getTitle().equals(c);
      }

      if(method.equals(Method.notequals)){
        return !this.getTitle().equals(c);
      }

      if(method.equals(Method.like)){
        return (this.getTitle().indexOf(c.toString()) >= 0);
      }

      if(method.equals(Method.notlike)){
        return (this.getTitle().indexOf(c.toString()) < 0);
      }

      if(method.equals(Method.isnull)){
        return false;
      }

      if(method.equals(Method.isnotnull)){
        return true;
      }
    }
    else if(baseFieldId.equals("description"))
    {
      if(method.equals(Method.equals))
        return (this.getDescription() != null && this.getDescription().equals(c));

      if(method.equals(Method.notequals))
        return (this.getDescription() == null || !this.getDescription().equals(c));

      if(method.equals(Method.like))
        return (this.getDescription() != null && this.getDescription().indexOf(c.toString()) >= 0);

      if(method.equals(Method.notlike))
        return (this.getDescription() == null || this.getDescription().indexOf(c.toString()) < 0);

      if(method.equals(Method.isnull))
        return (this.getDescription() == null);

      if(method.equals(Method.isnotnull))
        return (this.getDescription() != null);
    }
    else if(baseFieldId.equals("create_user"))
    {
      if(method.equals(Method.equals))
        return this.getCreateUsername().equalsIgnoreCase(c.toString());

      if(method.equals(Method.notequals))
        return !this.getCreateUsername().equalsIgnoreCase(c.toString());

      if(method.equals(Method.in))
        return Arrays.asList((String[])c).contains(this.getCreateUsername());

      if(method.equals(Method.notin))
        return !Arrays.asList((String[])c).contains(this.getCreateUsername());

      if(method.equals(Method.isnull))
        return false;

      if(method.equals(Method.isnotnull))
        return true;
    }
    else if(baseFieldId.equals("create_time"))
    {
      if(method.equals(Method.equals))
        return this.getCreateTime().equals(c);

      if(method.equals(Method.notequals))
        return !this.getCreateTime().equals(c);

      if(method.equals(Method.gt))
        return (this.getCreateTime().getTime() > ((Timestamp)c).getTime());

      if(method.equals(Method.ge))
        return (this.getCreateTime().getTime() >= ((Timestamp)c).getTime());

      if(method.equals(Method.lt))
        return (this.getCreateTime().getTime() < ((Timestamp)c).getTime());

      if(method.equals(Method.le))
        return (this.getCreateTime().getTime() <= ((Timestamp)c).getTime());

      if(method.equals(Method.isnull))
        return false;

      if(method.equals(Method.isnotnull))
        return true;
    }
    else if(baseFieldId.equals("assign_user"))
    {
      if(method.equals(Method.equals))
        return (this.getAssignUsername() != null && this.getAssignUsername().equalsIgnoreCase(c.toString()));

      if(method.equals(Method.notequals))
        return (this.getAssignUsername() == null || !this.getAssignUsername().equalsIgnoreCase(c.toString()));

      if(method.equals(Method.in))
        return (this.getAssignUsername() != null && Arrays.asList((String[])c).contains(this.getAssignUsername()));

      if(method.equals(Method.notin))
        return (this.getAssignUsername() == null || !Arrays.asList((String[])c).contains(this.getAssignUsername()));

      if(method.equals(Method.isnull))
        return (this.getAssignUsername() == null);

      if(method.equals(Method.isnotnull))
        return (this.getAssignUsername() != null);
    }
    else if(baseFieldId.equals("last_modify_time"))
    {
      if(method.equals(Method.equals))
        return this.getLastModifyTime().equals(c);

      if(method.equals(Method.notequals))
        return !this.getLastModifyTime().equals(c);

      if(method.equals(Method.gt))
        return (this.getLastModifyTime().getTime() > ((Timestamp)c).getTime());

      if(method.equals(Method.ge))
        return (this.getLastModifyTime().getTime() >= ((Timestamp)c).getTime());

      if(method.equals(Method.lt))
        return (this.getLastModifyTime().getTime() < ((Timestamp)c).getTime());

      if(method.equals(Method.le))
        return (this.getLastModifyTime().getTime() <= ((Timestamp)c).getTime());

      if(method.equals(Method.isnull))
        return false;

      if(method.equals(Method.isnotnull))
        return true;
    }
    else if(baseFieldId.equals("status_id"))
    {
      if(method.equals(Method.equals))
        return this.getStatusId().equals(c);

      if(method.equals(Method.notequals))
        return !this.getStatusId().equals(c);

      if(method.equals(Method.in))
        return Arrays.asList((UUID[])c).contains(this.getStatusId());

      if(method.equals(Method.notin))
        return !Arrays.asList((UUID[])c).contains(this.getStatusId());

      if(method.equals(Method.isnull))
        return false;

      if(method.equals(Method.isnotnull))
        return true;
    }
    else if(baseFieldId.equals("action_id"))
    {
      if(method.equals(Method.equals))
        return (this.getActionId() != null && this.getActionId().equals(c));

      if(method.equals(Method.notequals))
        return (this.getActionId() == null || !this.getActionId().equals(c));

      if(method.equals(Method.in))
        return (this.getActionId() != null && Arrays.asList((UUID[])c).contains(this.getActionId()));

      if(method.equals(Method.notin))
        return (this.getActionId() == null || !Arrays.asList((UUID[])c).contains(this.getActionId()));

      if(method.equals(Method.isnull))
        return (this.getActionId() == null);

      if(method.equals(Method.isnotnull))
        return (this.getActionId() != null);
    }
    else if(baseFieldId.equals("action_user"))
    {
      if(method.equals(Method.equals))
        return (this.getActionUser() != null && this.getActionUser().equals(c));

      if(method.equals(Method.notequals))
        return (this.getActionUser() == null || !this.getActionUser().equals(c));

      if(method.equals(Method.in))
        return (this.getActionUser() != null && Arrays.asList((String[])c).contains(this.getActionUser()));

      if(method.equals(Method.notin))
        return (this.getActionUser() == null || !Arrays.asList((String[])c).contains(this.getActionUser()));

      if(method.equals(Method.isnull))
        return (this.getActionUser() == null);

      if(method.equals(Method.isnotnull))
        return (this.getActionUser() != null);
    }
    else if(baseFieldId.equals("action_comment"))
    {
      if(method.equals(Method.equals))
        return (this.getActionComment() != null && this.getActionComment().equals(c));

      if(method.equals(Method.notequals))
        return (this.getActionComment() == null || !this.getActionComment().equals(c));

      if(method.equals(Method.like))
        return (this.getActionComment() != null && this.getActionComment().indexOf(c.toString()) >= 0);

      if(method.equals(Method.notlike))
        return (this.getActionComment() == null || this.getActionComment().indexOf(c.toString()) < 0);

      if(method.equals(Method.isnull))
        return (this.getActionComment() == null);

      if(method.equals(Method.isnotnull))
        return (this.getActionComment() != null);
    }
    else if(baseFieldId.equals("action_index"))
    {
      if(method.equals(Method.equals))
        return this.getActionIndex() == ((Integer)c).intValue();

      if(method.equals(Method.notequals))
        return this.getActionIndex() != ((Integer)c).intValue();

      if(method.equals(Method.gt))
        return this.getActionIndex() > ((Integer)c).intValue();

      if(method.equals(Method.ge))
        return this.getActionIndex() >= ((Integer)c).intValue();

      if(method.equals(Method.lt))
        return this.getActionIndex() < ((Integer)c).intValue();

      if(method.equals(Method.le))
        return this.getActionIndex() <= ((Integer)c).intValue();

      if(method.equals(Method.isnull))
        return false;

      if(method.equals(Method.isnotnull))
        return true;
    }else if(baseFieldId.equals("action_time_range")){

      return true;
    }

    return false;
  }

  /**
   * @description:TODO
   * @date:2014-5-6 下午3:09:52
   * @version:v1.0
   * @param fieldId
   * @param method
   * @param c
   * @return
   */
  private boolean matchExt(UUID fieldId, Method method, Object c){
    switch (method.value)
    {
      case 1:// equals
        return (this.getObject(fieldId) != null && this.getObject(fieldId).equals(c));
      case 2:// notequals
        return (this.getObject(fieldId) == null || !this.getObject(fieldId).equals(c));
      case 3:// in
        return (this.getObject(fieldId) != null && Arrays.asList((UUID[])c).contains(this.getObject(fieldId)));
      case 4:// not in
        return (this.getObject(fieldId) == null || !Arrays.asList((UUID[])c).contains(this.getObject(fieldId)));
      case 5:// like
      {
        if(this.getObject(fieldId) == null)
          return false;

        if(this.getObject(fieldId) instanceof String)
          return (this.getObject(fieldId).toString().indexOf(c.toString()) >= 0);
        if(c instanceof UUID[])
        {
          UUID [] tempFieldValue = (UUID[])this.getObject(fieldId);
          List<UUID> tempFieldValueList =Arrays.asList((UUID[])c);
          for(UUID tempObject : tempFieldValue)
          {
            if(tempFieldValueList.contains(tempObject))
              return true;
          }
        }

        return Arrays.asList((UUID[])this.getObject(fieldId)).contains(c);
      }
      case 6:// not like
      {
        Object obj = this.getObject(fieldId);
        if(obj == null)
          return true;

        if(obj instanceof String)
          return (obj.toString().indexOf(c.toString()) < 0);

        return !Arrays.asList((UUID[])obj).contains(c);
      }
      case 7:// isnull
        return (this.getObject(fieldId) == null);
      case 8:// isnotnull
        return (this.getObject(fieldId) != null);
      case 9:// gt
        return (this.getObject(fieldId) != null && ((Comparable)this.getObject(fieldId)).compareTo(c) > 0);
      case 10:// ge
        return (this.getObject(fieldId) != null && ((Comparable)this.getObject(fieldId)).compareTo(c) >= 0);
      case 11:// lt
        return (this.getObject(fieldId) != null && ((Comparable)this.getObject(fieldId)).compareTo(c) < 0);
      case 12:// le
        return (this.getObject(fieldId) != null && ((Comparable)this.getObject(fieldId)).compareTo(c) <= 0);
    }

    return false;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setAssignUser</p>
   * @param assignUser
   * @see com.sogou.qadev.service.cynthia.bean.Data#setAssignUser(java.lang.String)
   */
  public void setAssignUser(String assignUser) {
    this.assignUser = assignUser;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setAssignUsername</p>
   * @param assignUser
   * @see com.sogou.qadev.service.cynthia.bean.Data#setAssignUsername(java.lang.String)
   */
  public void setAssignUsername(String assignUser){
    this.assignUser = assignUser;
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:setAttachments</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setAttachments(com.sogou.qadev.service.cynthia.bean.UUID, com.sogou.qadev.service.cynthia.bean.UUID[])
   */
  public void setAttachments(UUID fieldId, UUID[] x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setChangeLogs</p>
   * @param changeLogs
   * @see com.sogou.qadev.service.cynthia.bean.Data#setChangeLogs(java.util.List)
   */
  public void setChangeLogs(List<ChangeLog> changeLogs) {
    this.changeLogs = changeLogs;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setCreateTime</p>
   * @param createTime
   * @see com.sogou.qadev.service.cynthia.bean.Data#setCreateTime(java.sql.Timestamp)
   */
  public void setCreateTime(Timestamp createTime){
    this.createTime = createTime;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setCreateUser</p>
   * @param createUser
   * @see com.sogou.qadev.service.cynthia.bean.Data#setCreateUser(java.lang.String)
   */
  public void setCreateUser(String createUser) {
    this.createUser = createUser;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setCreateUsername</p>
   * @param username
   * @see com.sogou.qadev.service.cynthia.bean.Data#setCreateUsername(java.lang.String)
   */
  public void setCreateUsername(String username) {
    this.createUser = username;

  }

  /**
   * (non-Javadoc)
   * <p> Title:setDate</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setDate(com.sogou.qadev.service.cynthia.bean.UUID, com.sogou.qadev.service.cynthia.util.Date)
   */
  public void setDate(UUID fieldId, Date x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setDescription</p>
   * @param description
   * @see com.sogou.qadev.service.cynthia.bean.Data#setDescription(java.lang.String)
   */
  public void setDescription(String description){
    this.description = description;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setDouble</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setDouble(com.sogou.qadev.service.cynthia.bean.UUID, java.lang.Double)
   */
  public void setDouble(UUID fieldId, Double x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setFloat</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setFloat(com.sogou.qadev.service.cynthia.bean.UUID, java.lang.Float)
   */
  public void setFloat(UUID fieldId, Float x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setId</p>
   * @param id
   * @see com.sogou.qadev.service.cynthia.bean.Data#setId(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public void setId(UUID id) {
    this.id = id;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setInteger</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setInteger(com.sogou.qadev.service.cynthia.bean.UUID, java.lang.Integer)
   */
  public void setInteger(UUID fieldId, Integer x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * @description:modify the last modify time of data  and save the data log
   * @date:2014-5-6 下午3:10:31
   * @version:v1.0
   */
  public void setLastModifyTime(){
    if(this.lastModifyTime == null){
      this.lastModifyTime = this.createTime;
    }
    else{
      this.lastModifyTime = new Timestamp(System.currentTimeMillis());
    }

    String logCreateUser = (String)getObject("logCreateUser");
    if(logCreateUser.equals("script@sogou-inc.com")){
      return;
    }

    Timestamp logCreateTime = getLastModifyTime();
    UUID logActionId = (UUID)getObject("logActionId");
    String logActionComment = (String)getObject("logActionComment");

    Map<String, Pair<Object, Object>> logBaseValueMap = (Map<String, Pair<Object, Object>>)getObject("logBaseValueMap");
    Map<UUID, Pair<Object, Object>> logExtValueMap = (Map<UUID, Pair<Object, Object>>)getObject("logExtValueMap");
   
    addChangeLog(new ChangeLogImpl(getId(), logCreateUser, logCreateTime, logActionId, logActionComment, logBaseValueMap, logExtValueMap));
  }

  /**
   * (non-Javadoc)
   * <p> Title:setLastModifyTime</p>
   * @param lastModifyTime
   * @see com.sogou.qadev.service.cynthia.bean.Data#setLastModifyTime(java.sql.Timestamp)
   */
  public void setLastModifyTime(Timestamp lastModifyTime){
    this.lastModifyTime = lastModifyTime;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setLong</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setLong(com.sogou.qadev.service.cynthia.bean.UUID, java.lang.Long)
   */
  public void setLong(UUID fieldId, Long x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setMultiReference</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setMultiReference(com.sogou.qadev.service.cynthia.bean.UUID, com.sogou.qadev.service.cynthia.bean.UUID[])
   */
  public void setMultiReference(UUID fieldId, UUID[] x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setMultiSelection</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setMultiSelection(com.sogou.qadev.service.cynthia.bean.UUID, com.sogou.qadev.service.cynthia.bean.UUID[])
   */
  public void setMultiSelection(UUID fieldId, UUID[] x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setObject</p>
   * @param fieldName
   * @param value
   * @see com.sogou.qadev.service.cynthia.bean.Data#setObject(java.lang.String, java.lang.Object)
   */
  public void setObject(String fieldName, Object value){
    this.objectMapName.put(fieldName, value);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setObject</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setObject(com.sogou.qadev.service.cynthia.bean.UUID, java.lang.Object)
   */
  public void setObject(UUID fieldId, Object x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setObjectMapName</p>
   * @param objectMapName
   * @see com.sogou.qadev.service.cynthia.bean.Data#setObjectMapName(java.util.Map)
   */
  public void setObjectMapName(Map<String, Object> objectMapName) {
    this.objectMapName = objectMapName;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setObjectMapUUID</p>
   * @param objectMapUUID
   * @see com.sogou.qadev.service.cynthia.bean.Data#setObjectMapUUID(java.util.Map)
   */
  public void setObjectMapUUID(Map<UUID, Object> objectMapUUID) {
    this.objectMapUUID = objectMapUUID;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setSingleReference</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setSingleReference(com.sogou.qadev.service.cynthia.bean.UUID, com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public void setSingleReference(UUID fieldId, UUID x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setSingleSelection</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setSingleSelection(com.sogou.qadev.service.cynthia.bean.UUID, com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public void setSingleSelection(UUID fieldId, UUID x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setStatusId</p>
   * @param statusId
   * @see com.sogou.qadev.service.cynthia.bean.Data#setStatusId(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public void setStatusId(UUID statusId) {
    this.statusId = statusId;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setString</p>
   * @param fieldName
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setString(java.lang.String, java.lang.String)
   */
  public void setString(String fieldName, String x){
    this.objectMapName.put(fieldName, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setString</p>
   * @param fieldId
   * @param x
   * @see com.sogou.qadev.service.cynthia.bean.Data#setString(com.sogou.qadev.service.cynthia.bean.UUID, java.lang.String)
   */
  public void setString(UUID fieldId, String x){
    this.objectMapUUID.put(fieldId, x);
  }

  /**
   * (non-Javadoc)
   * <p> Title:setTemplateId</p>
   * @param templateId
   * @see com.sogou.qadev.service.cynthia.bean.Data#setTemplateId(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public void setTemplateId(UUID templateId) {
    this.templateId = templateId;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setTemplateTypeId</p>
   * @param templateTypeId
   * @see com.sogou.qadev.service.cynthia.bean.Data#setTemplateTypeId(com.sogou.qadev.service.cynthia.bean.UUID)
   */
  public void setTemplateTypeId(UUID templateTypeId) {
    this.templateTypeId = templateTypeId;
  }

  /**
   * (non-Javadoc)
   * <p> Title:setTitle</p>
   * @param title
   * @see com.sogou.qadev.service.cynthia.bean.Data#setTitle(java.lang.String)
   */
  public void setTitle(String title) {
    this.title = title;
  }

  /**
   * (non-Javadoc)
   * <p> Title:toXMLDocument</p>
   * @return
   * @throws Exception
   * @see com.sogou.qadev.service.cynthia.bean.BaseType#toXMLDocument()
   */
  public Document toXMLDocument() throws Exception{
    return XMLUtil.string2Document(toXMLString(), "UTF-8");
  }
 
  /**
   * (non-Javadoc)
   * <p> Title:toXMLString</p>
   * @return
   * @throws Exception
   * @see com.sogou.qadev.service.cynthia.bean.BaseType#toXMLString()
   */
  public String toXMLString() throws Exception{
    StringBuffer xmlb = new StringBuffer(10240);
    xmlb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");

    xmlb.append("<task>");

    xmlb.append("<id>").append(this.getId()).append("</id>");
    xmlb.append("<templateId>").append(this.getTemplateId()).append("</templateId>");
    xmlb.append("<title>").append(XMLUtil.toSafeXMLString(this.getTitle())).append("</title>");
    xmlb.append("<createUser>").append(this.getCreateUsername()).append("</createUser>");
    xmlb.append("<createTime>").append(this.getCreateTime()).append("</createTime>");
    xmlb.append("<lastModifyTime>").append(this.getLastModifyTime()).append("</lastModifyTime>");
    xmlb.append("<statusId>").append(this.getStatusId()).append("</statusId>");
    xmlb.append("<description>").append(XMLUtil.toSafeXMLString(this.getDescription())).append("</description>");
    xmlb.append("<assignUser>").append(XMLUtil.toSafeXMLString(this.getAssignUsername())).append("</assignUser>");

    Set<Field> validFieldSet = new LinkedHashSet<Field>();
    if(this.getValidFieldIds() != null)
    {
      Template template = TemplateCache.getInstance().get(this.getTemplateId());
      if(template != null)
      {
        for(UUID validFieldId : this.getValidFieldIds())
        {
          Field validField = template.getField(validFieldId);
          if(validField != null)
            validFieldSet.add(validField);
        }
      }
    }

    if(validFieldSet.size() == 0)
      xmlb.append("<fields/>");
    else
    {
      xmlb.append("<fields>");

      for (Field validField : validFieldSet)
      {
        xmlb.append("<field>");
        xmlb.append("<id>").append(validField.getId()).append("</id>");

        if (validField.getType().equals(Type.t_selection))
        {
          if (validField.getDataType().equals(DataType.dt_single))
          {
            UUID fieldData = this.getSingleSelection(validField.getId());
            if (fieldData != null)
              xmlb.append("<data>").append(fieldData).append("</data>");
          }
          else if (validField.getDataType().equals(DataType.dt_multiple))
          {
            UUID[] fieldDataArray = this.getMultiSelection(validField.getId());
            if (fieldDataArray != null)
            {
              for (UUID fieldData : fieldDataArray)
                xmlb.append("<data>").append(fieldData).append("</data>");
            }
          }
        }
        else if (validField.getType().equals(Type.t_reference))
        {
          if (validField.getDataType().equals(DataType.dt_single))
          {
            UUID fieldData = this.getSingleReference(validField.getId());
            if (fieldData != null)
              xmlb.append("<data>").append(fieldData).append("</data>");
          }
          else if (validField.getDataType().equals(DataType.dt_multiple))
          {
            UUID[] fieldDataArray = this.getMultiReference(validField.getId());
            if (fieldDataArray != null)
            {
              for (UUID fieldData : fieldDataArray)
                xmlb.append("<data>").append(fieldData).append("</data>");
            }
          }
        }
        else if (validField.getType().equals(Type.t_input))
        {
          if (validField.getDataType().equals(DataType.dt_integer))
          {
            if(this.getInteger(validField.getId()) != null)
              xmlb.append("<data>").append(this.getInteger(validField.getId())).append("</data>");
          }
          else if (validField.getDataType().equals(DataType.dt_double))
          {
            if(this.getDouble(validField.getId()) != null)
              xmlb.append("<data>").append(this.getDouble(validField.getId())).append("</data>");
          }
          else if (validField.getDataType().equals(DataType.dt_float))
          {
            if(this.getFloat(validField.getId()) != null)
              xmlb.append("<data>").append(this.getFloat(validField.getId())).append("</data>");
          }
          else if (validField.getDataType().equals(DataType.dt_long))
          {
            if(this.getLong(validField.getId()) != null)
              xmlb.append("<data>").append(this.getLong(validField.getId())).append("</data>");
          }
          else if (validField.getDataType().equals(DataType.dt_string) || validField.getDataType().equals(DataType.dt_text) || validField.getDataType().equals(DataType.dt_editor))
          {
            if(this.getString(validField.getId()) != null)
              xmlb.append("<data>").append(XMLUtil.toSafeXMLString(this.getString(validField.getId()))).append("</data>");
          }
          else if(validField.getDataType().equals(DataType.dt_timestamp))
          {
            if(this.getDate(validField.getId()) != null)
              xmlb.append("<data>").append(this.getDate(validField.getId()) == null ?"":this.getDate(validField.getId()).toTimestamp()).append("</data>");
          }
        }
        else if (validField.getType().equals(Type.t_attachment))
        {
          UUID[] fieldDataArray = this.getAttachments(validField.getId());
          if (fieldDataArray != null)
          {
            for (UUID fieldData : fieldDataArray)
              xmlb.append("<data>").append(fieldData).append("</data>");
          }
        }

        xmlb.append("</field>");
      }

      xmlb.append("</fields>");
    }

    if(this.getChangeLogs() == null || this.getChangeLogs().length == 0)
      xmlb.append("<logs/>");
    else
    {
      xmlb.append("<logs>");

      for (ChangeLog log : this.getChangeLogs())
      {
        xmlb.append("<log>");

        xmlb.append("<createUser>").append(log.getCreateUser()).append("</createUser>");

        xmlb.append("<createTime>").append(log.getCreateTime()).append("</createTime>");

        if(log.getActionId() != null)
          xmlb.append("<actionId>").append(log.getActionId()).append("</actionId>");
        else
          xmlb.append("<actionId/>");

        if (log.getActionComment() != null)
          xmlb.append("<actionComment>").append(XMLUtil.toSafeXMLString(log.getActionComment())).append("</actionComment>");
        else
          xmlb.append("<actionComment/>");

        Map<String, Pair<Object, Object>> baseValueMap = log.getBaseValueMap();
        if(baseValueMap == null || baseValueMap.size() == 0)
          xmlb.append("<baseValues/>");
        else
        {
          xmlb.append("<baseValues>");

          for(String base : baseValueMap.keySet())
          {
            Object previous = baseValueMap.get(base).getFirst();
            Object current = baseValueMap.get(base).getSecond();

            xmlb.append("<baseValue>");

            xmlb.append("<base>").append(base).append("</base>");

            if(previous == null)
              xmlb.append("<previous/>");
            else
              xmlb.append("<previous>").append(XMLUtil.toSafeXMLString(previous.toString())).append("</previous>");

            if(current == null)
              xmlb.append("<current/>");
            else
              xmlb.append("<current>").append(XMLUtil.toSafeXMLString(current.toString())).append("</current>");

            xmlb.append("</baseValue>");
          }

          xmlb.append("</baseValues>");
        }

        Map<UUID, Pair<Object, Object>> extValueMap = log.getExtValueMap();
        if(extValueMap == null || extValueMap.size() == 0)
          xmlb.append("<extValues/>");
        else
        {
          xmlb.append("<extValues>");

          for(UUID ext : extValueMap.keySet())
          {
            Object previous = extValueMap.get(ext).getFirst();
            Object current = extValueMap.get(ext).getSecond();

            xmlb.append("<extValue>");

            xmlb.append("<ext>").append(ext).append("</ext>");

            if(previous == null)
              xmlb.append("<previous/>");
            else
            {
              if(previous instanceof UUID[])
              {
                xmlb.append("<previous>");

                UUID[] previousIdArray = (UUID[])previous;
                for(int i = 0; i < previousIdArray.length; i++)
                {
                  if(i > 0)
                    xmlb.append(",");

                  xmlb.append(previousIdArray[i]);
                }

                xmlb.append("</previous>");
              }
              else
                xmlb.append("<previous>").append(XMLUtil.toSafeXMLString(previous.toString())).append("</previous>");
            }

            if(current == null)
              xmlb.append("<current/>");
            else
            {
              if(current instanceof UUID[])
              {
                xmlb.append("<current>");

                UUID[] currentIdArray = (UUID[])current;
                for(int i = 0; i < currentIdArray.length; i++)
                {
                  if(i > 0)
                    xmlb.append(",");

                  xmlb.append(currentIdArray[i]);
                }

                xmlb.append("</current>");
              }
              else
                xmlb.append("<current>").append(XMLUtil.toSafeXMLString(current.toString())).append("</current>");
            }

            xmlb.append("</extValue>");
          }

          xmlb.append("</extValues>");
        }

        xmlb.append("</log>");
      }

      xmlb.append("</logs>");
    }

    xmlb.append("</task>");

    return xmlb.toString();
  }
}
TOP

Related Classes of com.sogou.qadev.service.cynthia.bean.impl.DataImpl

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.