Package cn.org.rapid_framework.struts

Source Code of cn.org.rapid_framework.struts.DynamicModuleConfig

package cn.org.rapid_framework.struts;

import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.config.FormBeanConfig;
import org.apache.struts.config.ModuleConfig;
import org.apache.struts.config.impl.ModuleConfigImpl;

/**
* 动态的ModuleConfig,将name尝试作为classname装载以创建formBean配置
* @author badqiu(badqiu@gmail.com)
*/
public class DynamicModuleConfig extends ModuleConfigImpl implements ModuleConfig {
  Map invalidClassName = Collections.synchronizedMap(new WeakHashMap());
 
  public DynamicModuleConfig() {
    super();
  }

  public DynamicModuleConfig(String prefix) {
    super(prefix);
  }

  public FormBeanConfig findFormBeanConfig(String name) {
    FormBeanConfig result = super.findFormBeanConfig(name);
    if(result == null) {
      addFormBeanConfigByClassName(name);
      return super.findFormBeanConfig(name);
    }
    return result;
  }
 
  void addFormBeanConfigByClassName(String className) {
    if(!isValidClassName(className)) {
      return;
    }
    defreeze();
    FormBeanConfig formBeanConfig = new FormBeanConfig();
    formBeanConfig.setName(className);
    formBeanConfig.setType(className);
    addFormBeanConfig(formBeanConfig);
  }

  boolean isValidClassName(String clazzName) {
    if(invalidClassName.containsKey(clazzName)) {
      return false;
    }
    boolean isValidClassName =  isValidClassName0(clazzName);
    int MAX_CACHE_SIZE = 1000;
    if(!isValidClassName && invalidClassName.size() < MAX_CACHE_SIZE) {
      invalidClassName.put(clazzName, null);
    }
    return isValidClassName;
  }

  boolean isValidClassName0(String clazzName) {
    try {
      if(StringUtils.isNotBlank(clazzName)){
        Class.forName(clazzName).newInstance();
        return true;
      }
    }catch(Exception e) {
    }
    return false;
  }
 
  public void defreeze() {
    this.configured = false;
  }
}
TOP

Related Classes of cn.org.rapid_framework.struts.DynamicModuleConfig

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.