package cn.org.rapid_framework.generator;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.InvalidPropertiesFormatException;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import cn.org.rapid_framework.generator.util.GLogger;
import cn.org.rapid_framework.generator.util.PropertiesHelper;
import cn.org.rapid_framework.generator.util.typemapping.DatabaseTypeUtils;
/**
* 生成器配置类
* 用于装载generator.properties,generator.xml文件
* @author badqiu
* @email badqiu(a)gmail.com
*/
public class GeneratorProperties {
static final String PROPERTIES_FILE_NAMES[] = new String[]{"generator.properties","generator.xml"};
static PropertiesHelper propertiesHelper = new PropertiesHelper(new Properties(),true);
private GeneratorProperties(){}
static {
reload();
}
public static void load(String... files) throws InvalidPropertiesFormatException, IOException {
putAll(PropertiesHelper.load(files));
}
public static void putAll(Properties props) {
GeneratorProperties.getHelper().putAll(props);
}
public static void clear() {
GeneratorProperties.getHelper().clear();
}
public static void reload() {
try {
GLogger.println("Start Load GeneratorPropeties from classpath:"+Arrays.toString(PROPERTIES_FILE_NAMES));
Properties p = new Properties();
String[] loadedFiles = PropertiesHelper.loadAllPropertiesFromClassLoader(p,PROPERTIES_FILE_NAMES);
GLogger.println("GeneratorPropeties Load Success,files:"+Arrays.toString(loadedFiles));
setSepicalProperties(p, loadedFiles);
setProperties(p);
}catch(IOException e) {
throw new RuntimeException("Load "+PROPERTIES_FILE_NAMES+" error",e);
}
}
private static void setSepicalProperties(Properties p, String[] loadedFiles) {
if(loadedFiles != null && loadedFiles.length > 0) {
String basedir = p.getProperty("basedir");
if(basedir != null && basedir.startsWith(".")) {
p.setProperty("basedir", new File(new File(loadedFiles[0]).getParent(),basedir).getAbsolutePath());
}
}
}
public static String getDatabaseType(String key) {
return getDatabaseType(getHelper().getProperties(),key);
}
public static String getDatabaseType(Map p,String key) {
if(p.containsKey(key)) {
return (String)p.get(key);
}
String jdbcDriver = (String)p.get(GeneratorConstants.JDBC_DRIVER.code);
return DatabaseTypeUtils.getDatabaseTypeByJdbcDriver(jdbcDriver);
}
public static Properties getProperties() {
return getHelper().getProperties();
}
private static PropertiesHelper getHelper() {
Properties fromContext = GeneratorContext.getGeneratorProperties();
if(fromContext != null) {
return new PropertiesHelper(fromContext,true);
}
return propertiesHelper;
}
public static String getProperty(String key, String defaultValue) {
return getHelper().getProperty(key, defaultValue);
}
public static String getProperty(String key) {
return getHelper().getProperty(key);
}
public static String getProperty(GeneratorConstants key) {
return getHelper().getProperty(key.code,key.defaultValue);
}
public static String getRequiredProperty(String key) {
return getHelper().getRequiredProperty(key);
}
public static String getRequiredProperty(GeneratorConstants key) {
return getHelper().getRequiredProperty(key.code);
}
public static int getRequiredInt(String key) {
return getHelper().getRequiredInt(key);
}
public static boolean getRequiredBoolean(String key) {
return getHelper().getRequiredBoolean(key);
}
public static String getNullIfBlank(String key) {
return getHelper().getNullIfBlank(key);
}
public static String getNullIfBlank(GeneratorConstants key) {
return getHelper().getNullIfBlank(key.code);
}
public static String[] getStringArray(String key) {
return getHelper().getStringArray(key);
}
public static String[] getStringArray(GeneratorConstants key) {
return getHelper().getStringArray(key.code);
}
public static int[] getIntArray(String key) {
return getHelper().getIntArray(key);
}
public static boolean getBoolean(String key,boolean defaultValue) {
return getHelper().getBoolean(key, defaultValue);
}
public static boolean getBoolean(GeneratorConstants key) {
return getHelper().getBoolean(key.code, Boolean.parseBoolean(key.defaultValue));
}
public static void setProperty(GeneratorConstants key,String value) {
setProperty(key.code,value);
}
public static void setProperty(String key,String value) {
GLogger.debug("[setProperty()] "+key+"="+value);
getHelper().setProperty(key, value);
}
public static void setProperties(Properties inputProps) {
propertiesHelper = new PropertiesHelper(inputProps,true);
for(Iterator it = propertiesHelper.entrySet().iterator();it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
// assertPropertyKey(entry.getKey().toString());
GLogger.debug("[Property] "+entry.getKey()+"="+entry.getValue());
}
GLogger.println("");
}
}