/**
*
*/
package org.minnal.generator.core;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.javalite.common.Inflector;
import org.minnal.core.config.ApplicationConfiguration;
import org.minnal.core.config.DatabaseConfiguration;
import org.minnal.utils.serializer.Serializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author ganeshs
*
*/
public class ApplicationConfigGenerator extends AbstractGenerator {
private File file;
private boolean enableInstrumentation;
private ApplicationConfiguration configuration;
private static final Logger logger = LoggerFactory.getLogger(ApplicationConfigGenerator.class);
/**
* @param baseDir
* @param enableInstrumentation
*/
public ApplicationConfigGenerator(File baseDir, boolean enableInstrumentation) {
super(baseDir);
this.enableInstrumentation = enableInstrumentation;
}
@Override
public void init() {
super.init();
file = new File(getMetaInfFolder(true), applicationName.toLowerCase() + ".yml");
if (! file.exists()) {
configuration = createApplicationConfiguration();
} else {
configuration = deserializeFrom(file, Serializer.DEFAULT_YAML_SERIALIZER, ApplicationConfiguration.class);
}
}
private ApplicationConfiguration createApplicationConfiguration() {
ApplicationConfiguration configuration = new ApplicationConfiguration(Inflector.tableize(applicationName));
DatabaseConfiguration databaseConfiguration = new DatabaseConfiguration();
databaseConfiguration.setDriverClass("org.h2.Driver");
databaseConfiguration.setIdleConnectionTestPeriod(300);
databaseConfiguration.setMinSize(5);
databaseConfiguration.setMaxSize(10);
databaseConfiguration.setPackagesToScan(Arrays.asList(getBasePackage()));
databaseConfiguration.setUrl("jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
databaseConfiguration.setUsername("sa");
Map<String, String> properties = new HashMap<String, String>();
properties.put("hibernate.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.current_session_context_class", "thread");
properties.put("hibernate.hbm2ddl.auto", "create-drop");
databaseConfiguration.setProviderProperties(properties);
configuration.setPackagesToScan(Arrays.asList(getBasePackage()));
configuration.setDatabaseConfiguration(databaseConfiguration);
configuration.setInstrumentationEnabled(enableInstrumentation);
return configuration;
}
@Override
public void generate() {
logger.info("Creating the application config file {}", file.getAbsolutePath());
serializeTo(file, configuration, Serializer.DEFAULT_YAML_SERIALIZER);
}
}