package com.github.wwadge.hbnpojogen;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.jvnet.inflector.Noun;
import org.jvnet.inflector.Rule;
import org.jvnet.inflector.RuleBasedPluralizer;
import org.jvnet.inflector.rule.RegexReplacementRule;
import java.util.*;
/**
* Configuration
*
* @author wallacew
*/
public class Config {
public static final String DISABLED_FROM_CONFIG = "__DISABLED FROM CONFIG__";
/**
* Internal constant
*/
private static XMLConfiguration config;
/**
* config
*/
public static Template template;
/**
* config
*/
public static Template interfaceTemplate;
/**
* config
*/
public static Template repoTemplate;
/**
* Configuration file parser
*
* @param configFile
* @param overridePath
* @param overrideIP
* @return source target path
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static String parseConfig(String configFile, String overridePath, String overrideIP)
throws Exception {
try {
Config.config = new XMLConfiguration(configFile);
} catch (ConfigurationException cex) {
cex.printStackTrace();
}
Properties p = new Properties();
p.setProperty("resource.loader", "class");
p.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
// p.setProperty("file.resource.loader.path", "templates");
p.setProperty("file.resource.loader.cache", "true");
p.setProperty("runtime.interpolate.string.literals", "true");
Velocity.init(p);
template = Velocity.getTemplate("templates/class.vm");
interfaceTemplate = Velocity.getTemplate("templates/classIface.vm");
repoTemplate = Velocity.getTemplate("templates/classRepo.vm");
fillMaven();
String path = fillBasicEntries();
if (overridePath != null) {
HbnPojoGen.log("Overriding source target to: " + overridePath);
State.getInstance().setSourceTarget(overridePath);
path = overridePath;
}
if (overrideIP != null) {
if (HbnPojoGen.jdbcConnection.indexOf("*") > -1) {
HbnPojoGen.log("Overriding database IP to source to : " + overrideIP);
} else {
HbnPojoGen.log("Overriding database IP given, but source IP is hardcoded. Use jdbc://*/yourSchema to enable overriding.");
}
HbnPojoGen.jdbcConnection = HbnPojoGen.jdbcConnection.replaceAll("\\*", overrideIP);
}
fillSchemaStrategy();
fillPreventCleanList();
// Fill in Abstract Classes - chrisp
fillAbstractTablesList();
fillImmutableTablesList();
fillIgnoreTableList();
fillPrepopulateList();
// Build the generator map list
fillGeneratorMap();
// Build the prepopulate list
fillPreExecuteList();
// Build the link "treat as enum" map
fillTreatAsEnum();
// Build the renaming section map
fillRenameSection();
// Build the package map list
fillPackageMap();
fillEnumMap();
// Build the annotations list
fillVersionCheck();
// build the linkTables list
fillLinkTableList();
// build the list of declare one-to-one relations
fillOne2OneList();
// build cyclic table exclusion list
fillCyclicTableExclusionList();
// build the natural keys list
fillNaturalKeysList();
// build the test values list
fillTestValuesList();
// build the disable back links list
fillDisableBackLinks();
fillDisableForwardLinks();
//
// build the disable back links list
fillNoFollowLinks();
// build the noOutput list
fillNoOutputForSchema();
// build the cascade list
fillCascadeList();
// build the fetchtype list
fillFetchTypeList();
// build the suffix list
fillSuffix();
fillCache();
fillFakeFK();
fillCustomPluralization();
fillEqualityExcludes();
fillTransientFields();
fillMoneyFields();
fillCurrencyFields();
fillEncryptedFields();
fillUniqueKeys();
// switch config get List here:
fillLdap();
fillAnnotationList();
return path;
}
/**
*
*
*/
@SuppressWarnings("unchecked")
private static void fillEqualityExcludes() {
ArrayList<String> excludes = (ArrayList<String>) Config.config.getList("equalityExcludes.field");
State.getInstance().getEqualityExcludes().addAll(excludes);
}
private static void fillTransientFields() {
ArrayList<String> transients = (ArrayList<String>) Config.config.getList("transientFields.field");
State.getInstance().getTransientFields().addAll(transients);
}
private static void fillMoneyFields() {
ArrayList<String> money = (ArrayList<String>) Config.config.getList("moneyFields.field");
State.getInstance().getMoneyFields().addAll(money);
State.getInstance().setCustomMoneyType(Config.config.getString("moneyFields[@typeOverride]", "org.jadira.usertype.moneyandcurrency.moneta.PersistentMoneyAmountAndCurrency"));
}
private static void fillCurrencyFields() {
ArrayList<String> currency = (ArrayList<String>) Config.config.getList("currencyUnitFields.field");
State.getInstance().getCurrencyFields().addAll(currency);
State.getInstance().setCustomCurrencyUnitType(Config.config.getString("currencyUnitFields[@typeOverride]", "org.jadira.usertype.moneyandcurrency.moneta.PersistentCurrencyUnit"));
}
private static void fillEncryptedFields() {
// ArrayList<String> enc = (ArrayList<String>) Config.config.getList("encryptedFields.field");
List<String> tmp = Config.config.getList("encryptedFields.field");
for (int i = 0; i < tmp.size(); i++) {
State.getInstance().encryptList.put(tmp.get(i).toUpperCase(), Config.config.getList(String.format("encryptedFields.field(%d)[@except-for]", i), new LinkedList<String>()));
}
// State.getInstance().getEncryptedFields().addAll(enc);
}
/**
* @param cascadeType
* @param state
*/
@SuppressWarnings("unchecked")
private static void fillCascade(String cascadeType, TreeMap<String, CascadeState> state) {
boolean defaultXToX = Config.config.getBoolean("cascading." + cascadeType + "[@default]", true);
List<String> defaultCascadeL = Config.config.getList("cascading." + cascadeType + "[@defaultCascade]");
if (defaultCascadeL.isEmpty()) {
defaultCascadeL.add("SAVE_UPDATE");
}
state.put("*", new CascadeState(defaultXToX, new HashSet<String>(defaultCascadeL)));
ArrayList<Object> tmpCascade = (ArrayList<Object>) Config.config.getList("cascading." + cascadeType + ".except[@package]");
for (int i = 0; i < tmpCascade.size(); i++) {
String packageName = Config.config.getString(String.format("cascading.%s.except(%d)[@package]", cascadeType, i), "*");
String className = Config.config.getString(String.format("cascading.%s.except(%d)[@class]", cascadeType, i), "*");
String propertyName = Config.config.getString(String.format("cascading.%s.except(%d)[@property]", cascadeType, i), "*");
List<String> cascadeL = Config.config.getList(String.format("cascading.%s.except(%d)[@cascade]", cascadeType, i));
if (!cascadeL.isEmpty()) {
cascadeL.add("SAVE_UPDATE");
}
Boolean enabled = Config.config.getBoolean(String.format("cascading.%s.except(%d)[@enabled]", cascadeType, i), !defaultXToX);
state.put(packageName + "." + className + "." + propertyName, new CascadeState(enabled, new HashSet<String>(cascadeL)));
}
tmpCascade = (ArrayList<Object>) Config.config.getList("cascading." + cascadeType + ".except-to[@to-package]");
for (int i = 0; i < tmpCascade.size(); i++) {
String packageName = Config.config.getString(String.format("cascading.%s.except-to(%d)[@to-package]", cascadeType, i), "*");
String className = Config.config.getString(String.format("cascading.%s.except-to(%d)[@to-class]", cascadeType, i), "*");
String propertyName = Config.config.getString(String.format("cascading.%s.except-to(%d)[@to-property]", cascadeType, i), "*");
List<String> cascadeL = Config.config.getList(String.format("cascading.%s.except-to(%d)[@cascade]", cascadeType, i));
if (!cascadeL.isEmpty()) {
cascadeL.add("SAVE_UPDATE");
}
Boolean enabled = Config.config.getBoolean(String.format("cascading.%s.except-to(%d)[@enabled]", cascadeType, i), !defaultXToX);
state.put("to:" + packageName + "." + className + "." + propertyName, new CascadeState(enabled, new HashSet<String>(cascadeL)));
}
}
/**
*/
@SuppressWarnings("unchecked")
private static void fillSuffix() {
String defaultSuffix = Config.config.getString("suffix[@default]", "");
Map<String, String> state = State.getInstance().getClassSuffixes();
state.put("*", defaultSuffix);
ArrayList<Object> tmpSuffix = (ArrayList<Object>) Config.config.getList("suffix.except[@package]");
for (int i = 0; i < tmpSuffix.size(); i++) {
String packageName = Config.config.getString(String.format("suffix.except(%d)[@package]", i), "*");
String className = Config.config.getString(String.format("suffix.except(%d)[@class]", i), "*");
String suffix = Config.config.getString(String.format("suffix.except(%d)[@suffix]", i), "");
state.put(packageName + "." + className, suffix);
}
}
private static void fillCache() {
String defaultStrategy = Config.config.getString("cache[@default]", "NONSTRICT_READ_WRITE");
Map<String, String> state = State.getInstance().getClassCache();
state.put("*", defaultStrategy);
ArrayList<Object> tmpStrategy = (ArrayList<Object>) Config.config.getList("cache.except[@package]");
for (int i = 0; i < tmpStrategy.size(); i++) {
String packageName = Config.config.getString(String.format("cache.except(%d)[@package]", i), "*");
String className = Config.config.getString(String.format("cache.except(%d)[@class]", i), "*");
String strategy = Config.config.getString(String.format("cache.except(%d)[@strategy]", i), "");
state.put(packageName + "." + className, strategy);
}
}
/**
*/
@SuppressWarnings("unchecked")
private static void fillFakeFK() {
boolean enabled = Config.config.getBoolean("fakeFK[@enabled]", false);
String pattern = Config.config.getString("fakeFK[@pattern]", "_DONT_MATCH_BY_DEFAULT_");
String replacePattern = Config.config.getString("fakeFK[@replacePattern]", "$0");
TreeMap<String, FakeFKPattern> state = State.getInstance().getFakeFK();
state.put("*", new FakeFKPattern(pattern, replacePattern, enabled));
ArrayList<Object> tmpSuffix = (ArrayList<Object>) Config.config.getList("fakeFK.except[@table]");
for (int i = 0; i < tmpSuffix.size(); i++) {
String table = Config.config.getString(String.format("fakeFK.except(%d)[@table]", i), "*");
String patternItem = Config.config.getString(String.format("fakeFK.except(%d)[@pattern]", i), "*");
String replacePatternItem = Config.config.getString(String.format("fakeFK.except(%d)[@replacePattern]", i), "*");
Boolean enabledItem = Config.config.getBoolean(String.format("fakeFK.except(%d)[@enabled]", i), false);
state.put(table, new FakeFKPattern(patternItem, replacePatternItem, enabledItem));
}
}
/**
*/
@SuppressWarnings("unchecked")
private static void fillCustomPluralization() {
ArrayList<Object> tmpRule = (ArrayList<Object>) Config.config.getList("customPluralization.rule[@regexmatch]");
List<Rule> customRules = new ArrayList<Rule>();
for (int i = 0; i < tmpRule.size(); i++) {
String match = Config.config.getString(String.format("customPluralization.rule(%d)[@regexmatch]", i), "*");
String replace = Config.config.getString(String.format("customPluralization.rule(%d)[@regexreplace]", i), "");
customRules.add(new RegexReplacementRule(match, replace));
}
State.getInstance().setCustomPluralizer(new RuleBasedPluralizer(customRules, Locale.ENGLISH, Noun.pluralizer(Locale.ENGLISH)));
}
@SuppressWarnings("unchecked")
private static void fillVersionCheck() {
try {
Config.config.configurationAt("versionCheck");
State.getInstance().setVersionCheckEnabled(true);
} catch (IllegalArgumentException iae) {
State.getInstance().setVersionCheckEnabled(false);
}
boolean defaultEnable = Config.config.getBoolean("versionCheck[@defaultEnabled]", true);
String defaultTable = Config.config.getString("versionCheck[@defaultTable]", "db_version");
String defaultVersionCheckWhereClause = Config.config.getString("versionCheck[@whereClause]", "");
String defaultVersionCheckOrderBy = Config.config.getString("versionCheck[@orderBy]", "");
if (!defaultEnable) {
defaultTable = Config.DISABLED_FROM_CONFIG;
} else {
State.getInstance().ignoreTableList.add("*." + defaultTable);
}
List defList = new LinkedList<String>();
defList.add("branch");
defList.add("alter_no");
// defList.add("system");
List defaultFields = Config.config.getList("versionCheck[@defaultFields]", defList);
State.getInstance().setVersionCheckDefaultEnabled(defaultEnable);
Set<String> fields = new HashSet<String>(defaultFields);
State.getInstance().getVersionCheck().put("*", new ObjectPair<String, Set<String>>(defaultTable, fields));
State.getInstance().getVersionCheckWhereClause().put("*", defaultVersionCheckWhereClause);
State.getInstance().getVersionCheckOrderBy().put("*", defaultVersionCheckOrderBy);
ArrayList<Object> tmpVersion = (ArrayList<Object>) Config.config.getList("versionCheck.except[@schema]");
for (int i = 0; i < tmpVersion.size(); i++) {
Boolean enabled = Config.config.getBoolean(String.format("versionCheck.except(%d)[@enabled]", i), false);
String schema = Config.config.getString(String.format("versionCheck.except(%d)[@schema]", i));
String table = Config.config.getString(String.format("versionCheck.except(%d)[@table]", i));
String whereClause = Config.config.getString(String.format("versionCheck.except(%d)[@whereClause]", i), defaultVersionCheckWhereClause);
String orderBy = Config.config.getString(String.format("versionCheck.except(%d)[@orderBy]", i), defaultVersionCheckOrderBy);
List vfields = Config.config.getList(String.format("versionCheck.except(%d)[@fields]", i), defList);
if (!enabled) {
table = DISABLED_FROM_CONFIG;
} else {
State.getInstance().ignoreTableList.add(schema + "." + table);
}
State.getInstance().getVersionCheck().put(schema, new ObjectPair<String, Set<String>>(table, new HashSet<String>(vfields)));
State.getInstance().getVersionCheckWhereClause().put(schema, whereClause);
State.getInstance().getVersionCheckOrderBy().put(schema, orderBy);
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillMaven() {
boolean mavenEnabled = Config.config.getBoolean("maven[@enabled]", false);
boolean mavenPomEnabled = Config.config.getBoolean("maven[@enablePomGeneration]", true);
State.getInstance().setMavenVersion(Config.config.getString("maven[@version]", "1.0"));
State.getInstance().setMavenJavaVersion(Config.config.getString("maven[@javaVersion]", "1.7"));
State.getInstance().setMavenName(Config.config.getString("maven[@name]", State.getInstance().getProjectName()));
State.getInstance().setMavenArtifactVersionsDisabled(Config.config.getBoolean("maven[@noArtifactVersions]", false));
State.getInstance().setMavenEnabled(mavenEnabled);
State.getInstance().setMavenPomEnabled(mavenPomEnabled);
if (mavenEnabled) {
State.getInstance().setMavenAdditionalPomEntries(Config.config.getString("maven.additionalPomEntries", ""));
State.getInstance().setMavenDistributionManagement(Config.config.getString("maven.distributionManagement", ""));
State.getInstance().setMavenDependency(Config.config.getString("maven.dependencies"));
State.getInstance().setMavenArtifactId(Config.config.getString("maven[@artifactId]", State.getInstance().getProjectName()));
State.getInstance().setMavenGroupId(Config.config.getString("maven[@groupId]", State.getInstance().getTopLevel()));
State.getInstance().setMavenNoDeps(Config.config.getBoolean("maven[@noDeps]", false));
State.getInstance().setMavenUseExternalLib(Config.config.getBoolean("maven[@useExternalLib]", false));
}
}
/**
* Lazy fetchtype
*
* @param fetchType
* @param state
*/
@SuppressWarnings("unchecked")
private static void fillLazy(String fetchType, TreeMap<String, Boolean> state) {
boolean defaultXToX = Config.config.getBoolean("fetchtype." + fetchType + "[@defaultlazy]", true);
state.put("*", defaultXToX);
ArrayList<Object> tmpCascade = (ArrayList<Object>) Config.config.getList("fetchtype." + fetchType + ".except[@package]");
for (int i = 0; i < tmpCascade.size(); i++) {
String packageName = Config.config.getString(String.format("fetchtype.%s.except(%d)[@package]", fetchType, i));
String className = Config.config.getString(String.format("fetchtype.%s.except(%d)[@class]", fetchType, i));
String propertyName = Config.config.getString(String.format("fetchtype.%s.except(%d)[@property]", fetchType, i));
state.put(packageName + "." + className + "." + propertyName, !defaultXToX);
}
}
/**
* Fills the cascade exception list.
*/
@SuppressWarnings("unchecked")
private static void fillCascadeList() {
fillCascade("one-to-many", State.getInstance().getOneToManyCascadeEnabled());
fillCascade("many-to-one", State.getInstance().getManyToOneCascadeEnabled());
fillCascade("many-to-many", State.getInstance().getManyToManyCascadeEnabled());
fillCascade("one-to-one", State.getInstance().getOneToOneCascadeEnabled());
}
/**
* Fills the cascade exception list.
*/
@SuppressWarnings("unchecked")
private static void fillFetchTypeList() {
fillLazy("one-to-many", State.getInstance().getOneToManyLazyEnabled());
fillLazy("many-to-one", State.getInstance().getManyToOneLazyEnabled());
fillLazy("many-to-many", State.getInstance().getManyToManyLazyEnabled());
fillLazy("one-to-one", State.getInstance().getOneToOneLazyEnabled());
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillNoOutputForSchema() {
ArrayList<String> tmp = (ArrayList<String>) Config.config.getList("noOutputForSchema.ignore");
for (int i = 0; i < tmp.size(); i++) {
State.getInstance().noOutPutForSchemaList.add(tmp.get(i).toUpperCase());
}
ArrayList<String> tmp2 = (ArrayList<String>) Config.config.getList("noOutputForSchema.ignoreAllExcept");
for (int i = 0; i < tmp2.size(); i++) {
State.getInstance().noOutPutForExceptSchemaList.add(tmp2.get(i).toUpperCase());
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillDisableBackLinks() {
ArrayList<Object> tmpOne2One = (ArrayList<Object>) Config.config.getList("disableBackLinks.nobacklink[@from]");
for (int i = 0; i < tmpOne2One.size(); i++) {
String fromTable = Config.config.getString(String.format("disableBackLinks.nobacklink(%d)[@from]", i));
String toTable = Config.config.getString(String.format("disableBackLinks.nobacklink(%d)[@to]", i));
String fromField = Config.config.getString(String.format("disableBackLinks.nobacklink(%d)[@from-field]", i));
TreeMap<String, TreeSet<String>> entry = State.getInstance().getDisableBackLinkTables().get(fromTable);
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeMap<String, TreeSet<String>>(new CaseInsensitiveComparator());
State.getInstance().getDisableBackLinkTables().put(fromTable, entry);
}
TreeSet<String> fromFields = entry.get(fromTable);
if (fromFields == null) {
fromFields = new TreeSet<String>();
entry.put(toTable, fromFields);
}
fromFields.add(fromField);
}
}
private static void fillDisableForwardLinks() {
ArrayList<Object> tmpOne2One = (ArrayList<Object>) Config.config.getList("disableForwardLinks.noforwardlink[@from]");
for (int i = 0; i < tmpOne2One.size(); i++) {
String fromTable = Config.config.getString(String.format("disableForwardLinks.noforwardlink(%d)[@from]", i));
String toTable = Config.config.getString(String.format("disableForwardLinks.noforwardlink(%d)[@to]", i));
String fromField = Config.config.getString(String.format("disableForwardLinks.noforwardlink(%d)[@from-field]", i));
TreeMap<String, TreeSet<String>> entry = State.getInstance().getDisableForwardLinkTables().get(fromTable);
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeMap<String, TreeSet<String>>(new CaseInsensitiveComparator());
State.getInstance().getDisableForwardLinkTables().put(fromTable, entry);
}
TreeSet<String> fromFields = entry.get(fromTable);
if (fromFields == null) {
fromFields = new TreeSet<String>();
entry.put(toTable, fromFields);
}
fromFields.add(fromField);
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillNoFollowLinks() {
ArrayList<Object> tmpOne2One = (ArrayList<Object>) Config.config.getList("noFollowLinks.nofollow[@from]");
for (int i = 0; i < tmpOne2One.size(); i++) {
String fromTable = Config.config.getString(String.format("noFollowLinks.nofollow(%d)[@from]", i));
String toTable = Config.config.getString(String.format("noFollowLinks.nofollow(%d)[@to]", i));
String fromField = Config.config.getString(String.format("noFollowLinks.nofollow(%d)[@from-field]", i));
TreeMap<String, TreeSet<String>> entry = State.getInstance().getNoFollowTables().get(fromTable);
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeMap<String, TreeSet<String>>(new CaseInsensitiveComparator());
State.getInstance().getNoFollowTables().put(fromTable, entry);
}
TreeSet<String> fromFields = entry.get(fromTable);
if (fromFields == null) {
fromFields = new TreeSet<String>();
entry.put(toTable, fromFields);
}
fromFields.add(fromField);
}
}
private static void fillUniqueKeys() {
ArrayList<Object> tmpUnique = (ArrayList<Object>) Config.config.getList("uniqueKeys.unique[@schema]");
for (int i = 0; i < tmpUnique.size(); i++) {
String schema = Config.config.getString(String.format("uniqueKeys.unique(%d)[@schema]", i));
String table = Config.config.getString(String.format("uniqueKeys.unique(%d)[@table]", i));
String field = Config.config.getString(String.format("uniqueKeys.unique(%d)[@field]", i));
String fullTable = schema + "." + table;
TreeSet<String> entry = State.getInstance().getUniqueKeys().get(fullTable);
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeSet<String>(new CaseInsensitiveComparator());
State.getInstance().getUniqueKeys().put(fullTable, entry);
}
entry.add(field);
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillIgnoreTableList() {
ArrayList<String> tmp = (ArrayList<String>) Config.config.getList("ignore.table");
for (int i = 0; i < tmp.size(); i++) {
State.getInstance().ignoreTableList.add(tmp.get(i).toUpperCase());
}
tmp = (ArrayList<String>) Config.config.getList("ignore.field");
for (int i = 0; i < tmp.size(); i++) {
State.getInstance().ignoreFieldList.put(tmp.get(i).toUpperCase(), Config.config.getList(String.format("ignore.field(%d)[@except-for]", i), null));
}
tmp = (ArrayList<String>) Config.config.getList("ignore.everything-except.table");
for (int i = 0; i < tmp.size(); i++) {
State.getInstance().ignoreEverythingExceptList.add(tmp.get(i).toUpperCase());
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillPreventCleanList() {
ArrayList<Object> preventCleanList = (ArrayList<Object>) Config.config.getList("preventclean.table");
for (int i = 0; i < preventCleanList.size(); i++) {
State.getInstance().preventClean.add(preventCleanList.get(i).toString().toUpperCase());
}
}
/**
* Fills in the list of Abstract tables - chrisp
*/
@SuppressWarnings("unchecked")
private static void fillAbstractTablesList() {
ArrayList<Object> abstractTablesList = (ArrayList<Object>) Config.config.getList("abstractTables.table");
for (int i = 0; i < abstractTablesList.size(); i++) {
State.getInstance().abstractTables.add(abstractTablesList.get(i).toString().toUpperCase());
}
}
/**
* Fills in the list of Abstract tables - chrisp
*/
@SuppressWarnings("unchecked")
private static void fillImmutableTablesList() {
ArrayList<Object> immutableTablesList = (ArrayList<Object>) Config.config.getList("immutableTables.table");
for (int i = 0; i < immutableTablesList.size(); i++) {
boolean genStatic = Config.config.getBoolean(String.format("immutableTables.table(%d)[@generate-static-test]", i), false);
State.getInstance().getImmutableTables().put(immutableTablesList.get(i).toString().toUpperCase(), genStatic);
}
}
/**
* @return path
*/
private static String fillBasicEntries() {
State.getInstance().dbType = Config.config.getString(Constants.DATABASE_TYPE);
if (State.getInstance().dbType != null) {
if (State.getInstance().dbType.equalsIgnoreCase("MYSQL")) {
State.getInstance().dbMode = 0;
} else if (State.getInstance().dbType.equalsIgnoreCase("MSSQL")) {
State.getInstance().dbMode = 1;
} else if (State.getInstance().dbType.equalsIgnoreCase("PostgreSQL")) {
State.getInstance().dbMode = 2;
}
}
State.getInstance().customDialect = Config.config.getString("dbType[@dialect]", null);
State.getInstance().dbIP = Config.config.getString(Constants.DATABASE_IP);
State.getInstance().dbCatalog = Config.config.getString(Constants.DATABASE_CATALOG);
State.getInstance().dbSchema = Config.config.getString(Constants.DATABASE_SCHEMA);
if (State.getInstance().dbSchema == null) {
State.getInstance().dbSchema = "public";
}
State.getInstance().dbUsername = Config.config.getString(Constants.DATABASE_USERNAME);
State.getInstance().dbPassword = Config.config.getString(Constants.DATABASE_PASSWORD);
String path = Config.config.getString(Constants.SOURCE_TARGET);
State.getInstance().setSourceTarget(path);
State.getInstance().setConnectionPool(Config.config.getString("connectionPool", "HIKARICP").toUpperCase());
State.getInstance().projectName = Config.config.getString(Constants.PROJECT_NAME);
HbnPojoGen.driver = Config.config.getString(Constants.DRIVER);
HbnPojoGen.jdbcConnection = Config.config.getString(Constants.JDBC_CONNECTION_STRING);
State.getInstance().topLevel = Config.config.getString(Constants.TOP_LEVEL);
State.getInstance().libPath = Config.config.getString(Constants.LIB_PATH);
State.getInstance().disableUnderscoreConversion = Config.config.getString(Constants.DISABLE_UNDERSCORE_CONVERSION, "false").equalsIgnoreCase("TRUE");
State.getInstance().disableCleanTables = Config.config.getBoolean("disableCleanTables", false);
State.getInstance().disableSubtypeEnumGeneration = Config.config.getBoolean("disableSubtypeEnumGeneration", false);
State.getInstance().disableEnglishPlural = Config.config.getString(Constants.DISABLE_ENGLISH_PLURAL, "false").equalsIgnoreCase("TRUE");
State.getInstance().disableTestRollback = Config.config.getString("disableTestRollback", "false").equalsIgnoreCase("TRUE");
State.getInstance().enableStateSave = Config.config.getString("enableStateSave", "false").equalsIgnoreCase("TRUE");
State.getInstance().enableJacksonSupport = Config.config.getString("enableJacksonSupport", "false").equalsIgnoreCase("TRUE");
State.getInstance().enableJadiraSupport = Config.config.getString("enableJadiraSupport", "false").equalsIgnoreCase("TRUE");
State.getInstance().enableJacksonManagedReferences = Config.config.getBoolean("enableJacksonSupport[@managedReference]", false);
State.getInstance().enableMockitoBeans = Config.config.getString("enableMockitoBeans", "true").equalsIgnoreCase("TRUE");
State.getInstance().setMockitoFilename(Config.config.getString("enableMockitoBeans[@filename]", "beans.test.mockito.xml"));
State.getInstance().enableHibernateValidator = Config.config.getString("enableHibernateValidator", "false").equalsIgnoreCase("TRUE");
State.getInstance().setEnableJodaSupport(Config.config.getString("enableJodaSupport", "false").equalsIgnoreCase("TRUE"));
State.getInstance().setEnableJDK8Support(Config.config.getString("enableJDK8Support", "false").equalsIgnoreCase("TRUE"));
State.getInstance().setEnableSpringData(Config.config.getString("enableSpringData", "true").equalsIgnoreCase("TRUE"));
State.getInstance().setSpringDataFactoryClass(Config.config.getString("enableSpringData[@factoryClass]", ""));
State.getInstance().setSpringDataRepoInterface(Config.config.getString("enableSpringData[@repoInterface]", " org.springframework.data.jpa.repository.JpaRepository"));
State.getInstance().disableBackLinksInDataPoolFactory = Config.config.getString("disableBackLinksInDataPoolFactory", "false").equalsIgnoreCase("TRUE");
State.getInstance().setDisableLazyConnections(Config.config.getString("disableLazyConnections", "false").equalsIgnoreCase("TRUE"));
State.getInstance().setEnablePropertyPlaceholderConfigurer(Config.config.getString("enablePropertyPlaceholderConfigurer", "false").equalsIgnoreCase("TRUE"));
State.getInstance().setPropertyPlaceholderConfigurerPrefix(Config.config.getString("enablePropertyPlaceholderConfigurer[@prefix]", ""));
State.getInstance().setPropertyPlaceholderConfigurerSuppressBean(Config.config.getBoolean("enablePropertyPlaceholderConfigurer[@suppressBean]", false));
State.getInstance().setApplicationContextFilename(Config.config.getString("applicationContextFilename", "applicationContext.xml"));
State.getInstance().setDisableApplicationContext(Config.config.getBoolean("applicationContextFilename[@disableGeneration]", false));
State.getInstance().setSessionFactoryItems(Config.config.getString("sessionFactory", ""));
State.getInstance().setTransactionManagerItems(Config.config.getString("transactionManagerItems", ""));
State.getInstance().setAdditionalContextItems(Config.config.getString("additionalContextItems", ""));
State.getInstance().setSpringVersion(Config.config.getInt("springVersion", 2));
boolean mavenEnabled = State.getInstance().isMavenEnabled();
String defaultSrc = mavenEnabled ? "src/main/java" : "src";
State.getInstance().setSrcFolder(Config.config.getString("sourceFolderName", defaultSrc));
defaultSrc = mavenEnabled ? "src/test/java" : "test/unit";
State.getInstance().setTestFolder(Config.config.getString("testFolderName", defaultSrc));
StringBuilder sb = new StringBuilder();
for (Iterator<Object> it = Config.config.getList("testDaoCustomContextConfig", Collections.emptyList()).iterator(); it.hasNext(); ) {
sb.append(it.next());
if (it.hasNext()) {
sb.append(Config.config.getListDelimiter());
}
}
State.getInstance().setDaoCustomContextConfig(sb.toString());
defaultSrc = mavenEnabled ? "src/main/resources" : "resources";
State.getInstance().setResourceFolder(Config.config.getString("resourceFolder", defaultSrc));
defaultSrc = mavenEnabled ? "src/test/resources" : "test/unit/resources";
State.getInstance().setTestResourceFolder(Config.config.getString("testResourceFolder", defaultSrc));
return path;
}
private static void fillLdap() {
config.setDelimiterParsingDisabled(true);
config.setListDelimiter((char) 1);
Config.config.clear();
try {
config.load();
} catch (ConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
State.getInstance().setUseLDAP(Config.config.getBoolean("connectionPool[@useLDAP]", false));
State.getInstance().setUseDynamicLDAPDataSource(Config.config.getBoolean("connectionPool[@enableDynamicLdapDataSource]", false));
State.getInstance().setUseLDAPImport(Config.config.getBoolean("connectionPool[@useLDAPImport]", false));
State.getInstance().setLdapServer(Config.config.getString("connectionPool[@ldapServer]"));
State.getInstance().setLdapCn(Config.config.getString("connectionPool[@ldapCn]"));
State.getInstance().setLdapBase(Config.config.getString("connectionPool[@ldapBase]"));
}
/**
*
*/
private static void fillSchemaStrategy() {
String schemaRestrictTmp = Config.config.getString(Constants.SCHEMA_STRATEGY);
State.getInstance().schemaRestrict = -1;
if (schemaRestrictTmp.equalsIgnoreCase(Constants.RESTRICT)) {
State.getInstance().schemaRestrict = 0;
} else {
if (schemaRestrictTmp.equalsIgnoreCase(Constants.PARTIAL)) {
State.getInstance().schemaRestrict = 1;
} else {
if (schemaRestrictTmp.equalsIgnoreCase(Constants.FULL)) {
State.getInstance().schemaRestrict = 2;
} else if (schemaRestrictTmp.equalsIgnoreCase(Constants.ALL)) {
State.getInstance().schemaRestrict = 3;
}
}
}
if (State.getInstance().schemaRestrict < 0) {
HbnPojoGen.logE("Schema Restrict option in config file is invalid (it must be RESTRICT, PARTIAL, FULL or ALL. Defaulting to RESTRICT");
State.getInstance().schemaRestrict = 0;
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillTestValuesList() {
ArrayList<Object> testValues = (ArrayList<Object>) Config.config.getList("testValues.tables.table.name");
for (int i = 0; i < testValues.size(); i++) {
TreeMap<String, String> properties = State.getInstance().defaultTestValues.get(testValues.get(i).toString().toUpperCase());
if (properties == null) {
properties = new TreeMap<String, String>();
State.getInstance().defaultTestValues.put(testValues.get(i).toString().toUpperCase(), properties);
}
ArrayList<Object> fieldValues = (ArrayList<Object>) Config.config.getList("testValues.tables.table(" + i + ").fields.name");
for (int j = 0; j < fieldValues.size(); j++) {
properties.put(fieldValues.get(j).toString().toUpperCase(), Config.config.getString("testValues.tables.table(" + i + ").fields(" + j +
").value"));
}
}
testValues = (ArrayList<Object>) Config.config.getList("testValues.target[@schema]");
for (int i = 0; i < testValues.size(); i++) {
String schema = Config.config.getString(String.format("testValues.target(%d)[@schema]", i));
String datapool = Config.config.getString(String.format("testValues.target(%d)[@datapool]", i));
State.getInstance().testDataPools.put(schema, datapool);
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillNaturalKeysList() {
ArrayList<Object> tmpKeys = (ArrayList<Object>) Config.config.getList("naturalKeys.table[@name]");
for (int i = 0; i < tmpKeys.size(); i++) {
TreeSet<String> entry = State.getInstance().naturalKeys.get(tmpKeys.get(i));
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeSet<String>(new CaseInsensitiveComparator());
State.getInstance().naturalKeys.put((String) tmpKeys.get(i), entry);
}
ArrayList<Object> tmpFields = (ArrayList<Object>) Config.config.getList(String.format("naturalKeys.table(%d).key[@field]", i));
for (int j = 0; j < tmpFields.size(); j++) {
// get the set of destLinks
entry.add(Config.config.getString(String.format("naturalKeys.table(%d).key(%d)[@field]", i, j)));
}
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillOne2OneList() {
ArrayList<Object> tmpOne2One = (ArrayList<Object>) Config.config.getList("oneToOne.table[@name]");
for (int i = 0; i < tmpOne2One.size(); i++) {
String tableName = Config.config.getString(String.format("oneToOne.table(%d)[@name]", i));
String fieldName = Config.config.getString(String.format("oneToOne.table(%d)[@field]", i));
TreeSet<String> entry = State.getInstance().oneToOneTables.get(tableName);
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeSet<String>(new CaseInsensitiveComparator());
State.getInstance().oneToOneTables.put(tableName, entry);
}
entry.add(fieldName);
}
}
/**
* Fills in the list of cyclicTableExclusionList tables. - chrisp
*/
@SuppressWarnings("unchecked")
private static void fillCyclicTableExclusionList() {
ArrayList<Object> tmpCyclicTableExclusionList = (ArrayList<Object>) Config.config.getList("cyclicTableExclusionList.table[@name]");
for (int i = 0; i < tmpCyclicTableExclusionList.size(); i++) {
String tableName = Config.config.getString(String.format("cyclicTableExclusionList.table(%d)[@name]", i));
String fieldName = Config.config.getString(String.format("cyclicTableExclusionList.table(%d)[@field]", i));
String replacement = Config.config.getString(String.format("cyclicTableExclusionList.table(%d)[@replacement]", i));
TreeMap<String, String> entry = State.getInstance().cyclicTableExclusionListTables.get(tableName);
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeMap<String, String>(new CaseInsensitiveComparator());
State.getInstance().cyclicTableExclusionListTables.put(tableName, entry);
}
entry.put(fieldName, replacement);
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillLinkTableList() {
ArrayList<Object> tmpLinks = (ArrayList<Object>) Config.config.getList("linktables.table[@name]");
for (int i = 0; i < tmpLinks.size(); i++) {
TreeMap<String, TreeSet<String>> entry = State.getInstance().linkTables.get(tmpLinks.get(i));
if (entry == null) {
// this is a new table we're seeing. Create an entry
entry = new TreeMap<String, TreeSet<String>>(new CaseInsensitiveComparator());
State.getInstance().linkTables.put((String) tmpLinks.get(i), entry);
}
ArrayList<Object> tmpFields = (ArrayList<Object>) Config.config.getList(String.format("linktables.table(%d).link[@srcField]", i));
for (int j = 0; j < tmpFields.size(); j++) {
// get the set of destLinks
String srcField = Config.config.getString(String.format("linktables.table(%d).link(%d)[@srcField]", i, j));
TreeSet<String> src = entry.get(srcField);
if (src == null) {
// we're seeing a new srcField...
src = new TreeSet<String>(new CaseInsensitiveComparator());
entry.put(srcField, src);
}
src.add(Config.config.getString(String.format("linktables.table(%d).link(%d)[@dstField]", i, j)));
}
}
}
/**
*
*/
@SuppressWarnings({"unchecked", "cast"})
private static void fillAnnotationList() {
config.setDelimiterParsingDisabled(true);
Config.config.clear();
try {
config.load();
} catch (ConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<Object> tmpAnnotationClasses = (ArrayList<Object>) Config.config.getList("annotations.class[@name]");
for (int i = 0; i < tmpAnnotationClasses.size(); i++) {
TreeMap<String, CustomAnnotations> property = new TreeMap<String, CustomAnnotations>(new CaseInsensitiveComparator());
State.getInstance().customClassAnnotations.put(tmpAnnotationClasses.get(i).toString(), Config.config.getString(String.format(
"annotations.class(%d).classAnnotation", i)));
State.getInstance().customClassCode.put(tmpAnnotationClasses.get(i).toString(), Config.config.getString(String.format(
"annotations.class(%d).customClassCode", i)));
State.getInstance().customClassCodeFields.put(tmpAnnotationClasses.get(i).toString(), Config.config.getString(String.format(
"annotations.class(%d).customClassCodeFields", i)));
State.getInstance().customAnnotations.put(tmpAnnotationClasses.get(i).toString(), property);
// Build the annotations list
TreeSet<String> tmpAnnotationImports = new TreeSet<String>(new CaseInsensitiveComparator());
tmpAnnotationImports.addAll((ArrayList<String>) Config.config.getList(String.format("annotations.class(%d).imports.import", i)));
State.getInstance().customClassImports.put(tmpAnnotationClasses.get(i).toString(), tmpAnnotationImports);
TreeSet<String> tmpAnnotationInterfaces = new TreeSet<String>(new CaseInsensitiveComparator());
tmpAnnotationInterfaces.addAll((ArrayList<String>) Config.config.getList(String.format("annotations.class(%d).implements.interface", i)));
State.getInstance().customClassInterfaces.put(tmpAnnotationClasses.get(i).toString(), tmpAnnotationInterfaces);
TreeSet<String> tmpAnnotationExtends = new TreeSet<String>(new CaseInsensitiveComparator());
tmpAnnotationExtends.addAll((ArrayList<String>) Config.config.getList(String.format("annotations.class(%d).extends.extend", i)));
State.getInstance().customClassExtends.put(tmpAnnotationClasses.get(i).toString(), tmpAnnotationExtends);
// Build the annotations list
ArrayList<Object> tmpAnnotationProperties =
(ArrayList<Object>) Config.config.getList(String.format("annotations.class(%d).property[@name]", i));
for (int j = 0; j < tmpAnnotationProperties.size(); j++) {
ArrayList<Object> tmpProperties =
(ArrayList<Object>) Config.config.getList(String.format("annotations.class(%d).property(%d).annotation", i, j));
CustomAnnotations annotation = new CustomAnnotations();
property.put(Config.config.getString(String.format("annotations.class(%d).property(%d)[@name]", i, j)), annotation);
for (int k = 0; k < tmpProperties.size(); k++) {
String type =
Config.config.getString(String.format("annotations.class(%d).property(%d).annotation(%d)[@type]", i, j, k)).toUpperCase();
if (type.equals("PROPERTY")) {
annotation.getPropertyLevelAnnotations().add((String) tmpProperties.get(k));
} else if (type.equals("GETTER")) {
annotation.getMethodLevelAnnotationsOnGetters().add((String) tmpProperties.get(k));
} else if (type.equals("SETTER")) {
annotation.getMethodLevelAnnotationsOnSetters().add((String) tmpProperties.get(k));
} else if (type.equals("SETTERPRECONDITION")) {
annotation.getMethodLevelSetterPrecondition().add((String) tmpProperties.get(k));
} else if (type.equals("GETTERPRECONDITION")) {
annotation.getMethodLevelGetterPrecondition().add((String) tmpProperties.get(k));
} else if (type.equals("SETTERPOSTCONDITION")) {
annotation.getMethodLevelSetterPostcondition().add((String) tmpProperties.get(k));
} else if (type.equals("GETTERPOSTCONDITION")) {
annotation.getMethodLevelGetterPostcondition().add((String) tmpProperties.get(k));
}
}
}
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillEnumMap() {
ArrayList<Object> tmpEnumMap = (ArrayList<Object>) Config.config.getList("coalesceEnums.schema[@name]");
for (int i = 0; i < tmpEnumMap.size(); i++) {
String schema = (String) tmpEnumMap.get(i);
TreeMap<String, String> map = State.getInstance().enumMappings.get(schema);
if (map == null) {
map = new TreeMap<String, String>(new CaseInsensitiveComparator());
State.getInstance().enumMappings.put(schema, map);
}
ArrayList<Object> tmpEnum = (ArrayList<Object>) Config.config.getList(String.format("coalesceEnums.schema(%d).enum[@name]", i));
for (int j = 0; j < tmpEnum.size(); j++) {
String enumName = (String) tmpEnum.get(j);
ArrayList<Object> fieldList =
(ArrayList<Object>) Config.config.getList(String.format("coalesceEnums.schema(%d).enum(%d).field", i, j));
for (int k = 0; k < fieldList.size(); k++) {
String field = Config.config.getString(String.format("coalesceEnums.schema(%d).enum(%d).field(%d)", i, j, k));
// HbnPojoGen.log(field + " - "+enumName);
map.put(field, enumName);
}
}
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillPackageMap() {
ArrayList<Object> tmpPackageClasses = (ArrayList<Object>) Config.config.getList("dbPackageMap.map[@schema]");
for (int i = 0; i < tmpPackageClasses.size(); i++) {
PackageMap packageMap = new PackageMap();
packageMap.setDaoPackage(Config.config.getString(String.format("dbPackageMap.map(%d).daoPackage", i)));
packageMap.setDaoImplPackage(Config.config.getString(String.format("dbPackageMap.map(%d).daoImplPackage", i)));
packageMap.setDataPackage(Config.config.getString(String.format("dbPackageMap.map(%d).dataPackage", i)));
packageMap.setEnumPackage(Config.config.getString(String.format("dbPackageMap.map(%d).enumPackage", i)));
packageMap.setEnumPackageTargetBase(Config.config.getString(String.format("dbPackageMap.map(%d).enumPackage[@targetbase]", i)));
packageMap.setEnumSubtypePackage(Config.config.getString(String.format("dbPackageMap.map(%d).enumSubtypePackage", i)));
packageMap.setFactoryPackage(Config.config.getString(String.format("dbPackageMap.map(%d).factoryPackage", i)));
packageMap.setUtilPackage(Config.config.getString(String.format("dbPackageMap.map(%d).utilPackage", i)));
packageMap.setObjectPackage(Config.config.getString(String.format("dbPackageMap.map(%d).objectPackage", i)));
packageMap.setObjectInterfacePackage(Config.config.getString(String.format("dbPackageMap.map(%d).objectInterfacePackage", i)));
State.getInstance().skipModelInterfaces(Config.config.getBoolean(String.format("dbPackageMap.map(%d).objectInterfacePackage[@skip]", i), false));
packageMap.setObjectTableRepoPackage(Config.config.getString(String.format("dbPackageMap.map(%d).objectTableRepoPackage", i)));
packageMap.setRepositoryFactoryPackage(Config.config.getString(String.format("dbPackageMap.map(%d).repositoryFactoryPackage", i)));
State.getInstance().packageMaps.put(SyncUtils.removeUnderscores((String) tmpPackageClasses.get(i)), packageMap);
}
// test for default packagemap. Make sure there's always *something* to work upon
PackageMap packageMap = State.getInstance().packageMaps.get("DEFAULT");
if (packageMap == null) {
packageMap = new PackageMap();
State.getInstance().packageMaps.put("DEFAULT", packageMap);
}
if (packageMap.getDaoPackage() == null) {
packageMap.setDaoPackage(String.format("%s.%s.model.dao.${DB}", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getObjectPackage() == null) {
packageMap.setObjectPackage(String.format("%s.%s.model.obj.${DB}", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getObjectInterfacePackage() == null) {
packageMap.setObjectInterfacePackage(String.format("%s.%s.model.obj.${DB}.iface", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getObjectTableRepoPackage() == null) {
packageMap.setObjectTableRepoPackage(String.format("%s.%s.model.obj.${DB}.repository", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getRepositoryFactoryPackage() == null) {
packageMap.setRepositoryFactoryPackage(String.format("%s.%s.model.obj.${DB}.repository.factory", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getDataPackage() == null) {
packageMap.setDataPackage(String.format("%s.%s.services.data", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getEnumPackage() == null) {
packageMap.setEnumPackage(String.format("%s.%s.enums.db.${DB}", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getEnumPackageTargetBase() == null) {
packageMap.setEnumPackageTargetBase(State.getInstance().getSourceTarget());
}
if (packageMap.getEnumSubtypePackage() == null) {
packageMap.setEnumSubtypePackage(String.format("%s.%s.enums.subtype.${DB}", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getFactoryPackage() == null) {
packageMap.setFactoryPackage(String.format("%s.%s.factories.${DB}", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getUtilPackage() == null) {
packageMap.setUtilPackage(String.format("%s.%s.util", State.getInstance().topLevel, State.getInstance().projectName));
}
if (packageMap.getDaoImplPackage() == null) {
packageMap.setDaoImplPackage(String.format("%s.%s.model.dao.${DB}.impl", State.getInstance().topLevel, State.getInstance().projectName));
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillTreatAsEnum() {
ArrayList<Object> tmpEnumLink = (ArrayList<Object>) Config.config.getList("treatLinkAsEnum.schema[@name]");
for (int i = 0; i < tmpEnumLink.size(); i++) {
// packageMap.setObjectPackage(config.getString(String.format("dbPackageMap.map(%d).objectPackage", i)));
// packageMaps.put(, packageMap);
String schema = SyncUtils.removeUnderscores((String) tmpEnumLink.get(i));
TreeMap<String, EnumMapping> definitions = State.getInstance().enumAsLinkMaps.get(schema);
if (definitions == null) {
definitions = new TreeMap<String, EnumMapping>(new CaseInsensitiveComparator());
State.getInstance().enumAsLinkMaps.put(schema, definitions);
}
// HbnPojoGen.log(schema);
ArrayList<Object> tmpEnumLinkField =
(ArrayList<Object>) Config.config.getList(String.format("treatLinkAsEnum.schema(%d).field[@src]", i));
for (int j = 0; j < tmpEnumLinkField.size(); j++) {
String srcdef = Config.config.getString(String.format("treatLinkAsEnum.schema(%d).field(%d)[@src]", i, j));
String dstTable = Config.config.getString(String.format("treatLinkAsEnum.schema(%d).field(%d)[@dstTable]", i, j));
String keyCol = Config.config.getString(String.format("treatLinkAsEnum.schema(%d).field(%d)[@keyColumnName]", i, j));
String valCol = Config.config.getString(String.format("treatLinkAsEnum.schema(%d).field(%d)[@valueColumnName]", i, j));
TreeSet<String> otherCol = new TreeSet<String>(Config.config.getList(String.format("treatLinkAsEnum.schema(%d).field(%d)[@otherColumnNames]", i, j)));
String srctable = SyncUtils.removeUnderscores(SyncUtils.getTableCatalog(srcdef));
String srcfield = SyncUtils.removeUnderscores(SyncUtils.getTableName(srcdef));
srcdef = srctable + "." + srcfield;
EnumMapping map = new EnumMapping();
map.setKeyColumnLabel(keyCol);
map.setValueColumnLabel(valCol);
map.setDsttableFieldname(dstTable);
map.setOtherColumnLabels(otherCol);
definitions.put(srcdef, map);
}
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillRenameSection() {
ArrayList<Object> tmpRename = (ArrayList<Object>) Config.config.getList("renaming.schema[@name]");
for (int i = 0; i < tmpRename.size(); i++) {
String schema = SyncUtils.removeUnderscores((String) tmpRename.get(i));
TreeMap<String, String> definitions = State.getInstance().renameFieldMap.get(schema);
if (definitions == null) {
definitions = new TreeMap<String, String>(new CaseInsensitiveComparator());
State.getInstance().renameFieldMap.put(schema, definitions);
}
// HbnPojoGen.log(schema);
ArrayList<Object> tmpRenameField =
(ArrayList<Object>) Config.config.getList(String.format("renaming.schema(%d).field[@srcName]", i));
for (int j = 0; j < tmpRenameField.size(); j++) {
String srcdef = Config.config.getString(String.format("renaming.schema(%d).field(%d)[@srcName]", i, j));
String dstName = Config.config.getString(String.format("renaming.schema(%d).field(%d)[@dstName]", i, j));
String inverseName = Config.config.getString(String.format("renaming.schema(%d).field(%d)[@inverseName]", i, j));
String srctable = SyncUtils.removeUnderscores(SyncUtils.getTableCatalog(srcdef));
String srcfield = SyncUtils.removeUnderscores(SyncUtils.getTableName(srcdef));
srcdef = srctable + "." + srcfield;
definitions.put(srcdef, dstName + ":" + inverseName);
}
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillPreExecuteList() {
ArrayList<Object> preExecuteList = (ArrayList<Object>) Config.config.getList("preexec.connections.connection");
for (int i = 0; i < preExecuteList.size(); i++) {
CustomDB pre = new CustomDB();
pre.setStatements(new LinkedList<String>());
pre.setConnectionURL(preExecuteList.get(i).toString());
pre.setDriver(Config.config.getString("preexec.connections(" + i + ").driver"));
pre.setConnectionUsername(Config.config.getString("preexec.connections(" + i + ").connectionUsername"));
pre.setConnectionPassword(Config.config.getString("preexec.connections(" + i + ").connectionPassword"));
pre.getStatements().addAll(Config.config.getList("preexec.connections(" + i + ").statements.statement"));
State.getInstance().preExecList.add(pre);
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillGeneratorMap() {
ArrayList<String> genIdList = (ArrayList<String>) Config.config.getList("generatedId.map[@schema]");
for (int i = 0; i < genIdList.size(); i++) {
String schema = Config.config.getString(String.format("generatedId.map(%d)[@schema]", i));
GeneratedValueSchemas genSchema = State.getInstance().generators.get(schema);
if (genSchema == null) {
genSchema = new GeneratedValueSchemas();
State.getInstance().generators.put(schema, genSchema);
}
ArrayList<String> genIdTables = (ArrayList<String>) Config.config.getList(String.format("generatedId.map(%d).table[@name]", i));
for (int j = 0; j < genIdTables.size(); j++) {
String tableName = Config.config.getString(String.format("generatedId.map(%d).table(%d)[@name]", i, j));
String fieldName = Config.config.getString(String.format("generatedId.map(%d).table(%d)[@field]", i, j));
String generator = Config.config.getString(String.format("generatedId.map(%d).table(%d)[@generator]", i, j));
GeneratedValueFields genFields = genSchema.getTables().get(tableName);
if (genFields == null) {
genFields = new GeneratedValueFields();
genSchema.getTables().put(tableName, genFields);
}
genFields.getFields().put(fieldName, HbnPojoGen.mapGeneratorType(generator));
}
}
// Add the default generator
String defaultGenerator = Config.config.getString("generatedId.default[@generator]");
String defaultGeneratorPattern = Config.config.getString("generatedId.default[@idpattern]");
if (defaultGenerator == null || !HbnPojoGen.isValidGenerator(defaultGenerator)) {
defaultGenerator = "AUTO";
}
if (defaultGeneratorPattern == null) {
defaultGeneratorPattern = "${DB}_id";
}
if (HbnPojoGen.isValidGenerator(defaultGenerator)) {
GeneratedValueSchemas genSchema = new GeneratedValueSchemas();
GeneratedValueFields genField = new GeneratedValueFields();
genField.getFields().put(defaultGeneratorPattern, HbnPojoGen.mapGeneratorType(defaultGenerator));
genSchema.getTables().put("*", genField);
State.getInstance().generators.put("DEFAULT", genSchema);
}
}
/**
*
*/
@SuppressWarnings("unchecked")
private static void fillPrepopulateList() {
// Build the prepopulate list
ArrayList<Object> prepopList = (ArrayList<Object>) Config.config.getList("prepopulateDB.connections.connection");
for (int i = 0; i < prepopList.size(); i++) {
CustomDB pre = new CustomDB();
pre.setStatements(new LinkedList<String>());
pre.setConnectionURL(prepopList.get(i).toString());
pre.setDriver(Config.config.getString("prepopulateDB.connections(" + i + ").driver"));
pre.setConnectionUsername(Config.config.getString("prepopulateDB.connections(" + i + ").connectionUsername"));
pre.setConnectionPassword(Config.config.getString("prepopulateDB.connections(" + i + ").connectionPassword"));
pre.getStatements().addAll(Config.config.getList("prepopulateDB.connections(" + i + ").statements.statement"));
State.getInstance().prepopulateList.add(pre);
}
}
}