All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.clickntap.tool.bean.BeanInfo Maven / Gradle / Ivy

package com.clickntap.tool.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.springframework.util.StringUtils;

import com.clickntap.tool.jdbc.JdbcBlobber;

public class BeanInfo {
  private String beanName;

  private String cacheName;

  private int cacheMaxSize;

  private String createScript;

  private String currValScript;

  private String updateScript;

  private String deleteScript;

  private Map executeScriptMap;

  private Map readScriptMap;

  private Map readListScriptMap;

  private Map blobInfoMap;

  private ValidationInfo validationInfo;

  public BeanInfo(Document document, String beanName, BeanInfo beanInfo) throws Exception {
    if (document != null) {
      this.beanName = beanName;
      Element root = document.getRootElement();
      cacheName = root.attributeValue("cache");
      try {
        cacheMaxSize = Integer.parseInt(root.attributeValue("cache-max-size"));
      } catch (Exception e) {
        cacheMaxSize = Integer.MAX_VALUE;
      }
      createScript = getText(root, "create");
      currValScript = getText(root, "curr-val");
      updateScript = getText(root, "update");
      deleteScript = getText(root, "delete");
      executeScriptMap = new HashMap();
      loadScriptMap(root, "execute", executeScriptMap, beanInfo);
      readScriptMap = new HashMap();
      loadScriptMap(root, "read", readScriptMap, beanInfo);
      readListScriptMap = new HashMap();
      loadScriptMap(root, "read-list", readListScriptMap, beanInfo);

      List elementList;
      blobInfoMap = new HashMap();
      elementList = root.elements("blob");
      for (Element element : elementList) {
        blobInfoMap.put(element.attributeValue("db"), new BlobInfo(element));
      }
      Element element = root.element("validation");
      if (element != null)
        validationInfo = new ValidationInfo(element);
    }
  }

  private String getText(Element root, String tagName) {
    Element element;
    return (element = root.element(tagName)) != null ? element.getTextTrim() : null;
  }

  private void loadScriptMap(Element root, String tagName, Map map, BeanInfo beanInfo) {
    if (beanInfo != null && beanInfo.getExecuteScriptMap() != null) {
      for (String key : beanInfo.getExecuteScriptMap().keySet()) {
        map.put(key, beanInfo.getExecuteScriptMap().get(key));
      }
    }
    if (root != null) {
      Map beanMap = new HashMap();
      List elementList;
      elementList = root.elements(tagName);
      for (Element element : elementList) {
        String key = element.attributeValue("name");
        beanMap.put(key, element.getTextTrim());
      }
      for (String key : beanMap.keySet()) {
        map.put(key, beanMap.get(key));
      }
    }
  }

  public boolean isCacheEnabled() {
    return getCacheName() != null;
  }

  public String getCacheName() {
    return cacheName;
  }

  public String getCreateScript() {
    return createScript;
  }

  public String getCurrValScript() {
    return currValScript;
  }

  public String getReadScript(String key) {
    return readScriptMap.get(key);
  }

  public String getExecuteScript(String key) {
    return executeScriptMap.get(key);
  }

  public String getDeleteScript() {
    return deleteScript;
  }

  public String getUpdateScript() {
    return updateScript;
  }

  public String getReadListScript(String key) {
    return readListScriptMap.get(key);
  }

  public ValidationInfo getValidationInfo() {
    return validationInfo;
  }

  public String getBeanName() {
    return beanName;
  }

  public BlobInfo getBlobInfo(String db) {
    if (!blobInfoMap.containsKey(db))
      throw new RuntimeException("unsupported database '" + db + "'");
    return blobInfoMap.get(db);
  }

  public Map getExecuteScriptMap() {
    return executeScriptMap;
  }

  public class BlobInfo {
    private JdbcBlobber blobber;

    private List updateScriptList;

    private String readScript;

    public BlobInfo(Element root) throws Exception {
      blobber = (JdbcBlobber) Class.forName(root.attributeValue("class")).getDeclaredConstructor().newInstance();
      List elementList = root.elements("update");
      updateScriptList = new ArrayList(elementList.size());
      for (Element element : elementList) {
        updateScriptList.add(element.getTextTrim());
      }
      Element element = root.element("read");
      if (element != null) {
        readScript = element.getTextTrim();
      }
    }

    public JdbcBlobber getBlobber() {
      return blobber;
    }

    public List getUpdateScriptList() {
      return updateScriptList;
    }

    public String getReadScript() {
      return readScript;
    }

  }

  public class ValidationInfo {
    private Map> validationScriptListMap;

    public ValidationInfo(Element root) throws Exception {
      List elementList = root.elements("group");
      validationScriptListMap = new HashMap>(elementList.size());
      for (Element element : elementList) {
        String[] keys = StringUtils.commaDelimitedListToStringArray(element.attributeValue("name"));
        for (String key : keys) {
          List scriptList = getValidationScriptList(key);
          scriptList.add(element.getTextTrim());
        }
      }
    }

    public List getValidationScriptList(String key) {
      if (validationScriptListMap.containsKey(key)) {
        return validationScriptListMap.get(key);
      } else {
        List validationScriptList = new ArrayList();
        validationScriptListMap.put(key, validationScriptList);
        return validationScriptList;
      }
    }
  }

  public int getCacheMaxSize() {
    return cacheMaxSize;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy