/** * */ package org.minnal.generator.core; import java.io.File; import org.minnal.generator.CommandNew; import org.minnal.generator.exception.MinnalGeneratorException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author ganeshs */ public class ProjectGenerator extends AbstractGenerator { private CommandNew command; private static final Logger logger = LoggerFactory.getLogger(ProjectGenerator.class); public ProjectGenerator(CommandNew command) { super(createProjectDir(command)); this.command = command; } @Override public void init() { super.init(); createFolder(MAIN_JAVA_FOLDER); createFolder(TEST_JAVA_FOLDER); createFolder(MAIN_RESOURCES_FOLDER); createFolder(TEST_RESOURCES_FOLDER); createFolder(MAIN_META_INF_FOLDER); createFolder(MAIN_SERVICES_FOLDER); PomGenerator pomGenerator = createPomGenerator(); ApplicationGenerator applicationGenerator = new ApplicationGenerator(baseDir, !command.isNojpa()); ContainerConfigGenerator containerConfigGenerator = new ContainerConfigGenerator(baseDir); containerConfigGenerator.addApplication(getApplicationClassName(), "/"); addGenerator(pomGenerator); addGenerator(containerConfigGenerator); addGenerator(applicationGenerator); addGenerator(new LoggerConfigGenerator(baseDir)); } private PomGenerator createPomGenerator() { PomGenerator pomGenerator = new PomGenerator(baseDir, command.getProjectName()); pomGenerator.addDependency("org.minnal", "minnal-core", command.getVersion()); pomGenerator.addDependency("org.hibernate", "hibernate-entitymanager", "4.3.6.Final"); pomGenerator.addDependency("com.h2database", "h2", "1.4.181"); pomGenerator.addDependency("org.testng", "testng", "6.8.1", "test"); pomGenerator.addDependency("org.minnal", "minnal-test", command.getVersion(), "test"); pomGenerator.addDependency("org.minnal", "minnal-migrations", command.getVersion()); pomGenerator.addDependency("org.mockito", "mockito-all", "1.9.5"); pomGenerator.addDependency("org.minnal", "minnal-generator", command.getVersion()); pomGenerator.addDependency("org.minnal", "minnal-api", command.getVersion()); if (!command.isNojpa()) { pomGenerator.addDependency("org.minnal", "minnal-jpa", command.getVersion()); } if (!command.isNoinst()) { pomGenerator.addDependency("org.minnal", "minnal-instrumentation", command.getVersion()); } return pomGenerator; } protected static File createProjectDir(CommandNew command) { logger.info("Creating the project {} under {}", command.getProjectName(), command.getBaseDir()); File dir = new File(command.getBaseDir()); if (!dir.exists()) { logger.trace("Directory {} doesn't exist. Creating one.", command.getBaseDir()); if (!dir.mkdirs()) { throw new IllegalStateException("Failed while creating the dir - " + dir.getPath()); } } else if (!dir.isDirectory()) { logger.trace("Path {} is not a directory", command.getBaseDir()); throw new MinnalGeneratorException("Path " + command.getBaseDir() + " is not a directory"); } File projectDir = new File(dir, command.getProjectName()); if (projectDir.exists()) { logger.trace("Project directory {} already exists", projectDir.getAbsolutePath()); throw new MinnalGeneratorException("Project dir " + projectDir.getAbsolutePath() + " already exists"); } if (!projectDir.mkdirs()) { throw new IllegalStateException("Failed while creating the project dir - " + projectDir.getPath()); } return projectDir; } }