
com.amazonaws.scala.ProjectGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of project-generator Show documentation
Show all versions of project-generator Show documentation
Root project generator for the AWS SDK for Scala
The newest version!
/*
* Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.amazonaws.scala;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
* Main point of entry for the project generator.
*/
public final class ProjectGenerator {
private final File baseDir;
private final Freemarker freemarker;
private final ObjectMapper mapper;
/**
* @param baseDir the base directory of the project
*/
public ProjectGenerator(File baseDir) {
this(baseDir, new Freemarker(), new ObjectMapper(new YAMLFactory()));
}
/**
* @param baseDir the base directory of the project
* @param freemarker a utility for working with freemarker
* @param mapper a Jackson ObjectMapper for loading the YAML configuration
*/
public ProjectGenerator(
File baseDir,
Freemarker freemarker,
ObjectMapper mapper) {
this.baseDir = baseDir;
this.freemarker = freemarker;
this.mapper = mapper;
}
/**
* Generates a multi-module maven project structure under
* {@code $baseDir/project} from the configuration in
* {@code $baseDir/config.yaml}.
*/
public void generate() throws IOException, TemplateException {
File configFile = new File(baseDir, "config.yaml");
AggregatorModel aggregator = mapper.readValue(configFile, AggregatorModel.class);
File project = new File(baseDir, "project");
mkdir(project);
// Generate the individual client modules.
Template pom = freemarker.getPomTemplate();
for (ModuleModel module : aggregator.getModules()) {
File dir = new File(project, module.getName());
mkdir(dir);
Writer writer = new FileWriter(new File(dir, "pom.xml"));
try {
pom.process(module, writer);
} finally {
writer.close();
}
}
// Generate the aggregator module.
Template agg = freemarker.getAggregatorTemplate();
Writer writer = new FileWriter(new File(project, "pom.xml"));
try {
agg.process(aggregator, writer);
} finally {
writer.close();
}
}
private void mkdir(File dir) throws IOException {
if (dir.exists()) {
for (String file : dir.list()) {
delete(new File(dir, file));
}
} else {
if (!dir.mkdirs()) {
throw new IOException("Error creating directory " + dir);
}
}
}
private void delete(File file) throws IOException {
if (file.isDirectory()) {
for (String f : file.list()) {
delete(new File(file, f));
}
}
if (!file.delete()) {
throw new IOException("Could not delete " + file);
}
}
/**
* Main point of entry from the command line. Pass the base directory for
* generation as the only argument.
*/
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.err.println("usage: generator ");
System.exit(-1);
}
File baseDir = new File(args[0]);
System.out.println("Using baseDir: " + baseDir.getAbsolutePath());
new ProjectGenerator(baseDir).generate();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy