/*
* Copyright 2008-2010 Xebia and the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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 fr.xebia.workshop.caching;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.route53.AmazonRoute53;
import com.amazonaws.services.route53.AmazonRoute53Client;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.io.Files;
import fr.xebia.cloud.amazon.aws.tools.AmazonAwsUtils;
import fr.xebia.cloud.cloudinit.FreemarkerUtils;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;
public class DocumentationGenerator {
private static final Logger logger = LoggerFactory.getLogger(DocumentationGenerator.class);
public static void main(String[] args) {
AWSCredentials awsCredentials = AmazonAwsUtils.loadAwsCredentials();
WorkshopInfrastructure workshopInfrastructure = new WorkshopInfrastructure()
.withTeamIdentifiers("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
.withAwsAccessKeyId(awsCredentials.getAWSAccessKeyId())
.withAwsSecretKey(awsCredentials.getAWSSecretKey())
.withKeyPairName("web-caching-workshop")
.withBeanstalkNotificationEmail("cleclerc@xebia.fr");
DocumentationGenerator documentationGenerator = new DocumentationGenerator();
try {
documentationGenerator.generateDocs(workshopInfrastructure, "target/wiki/");
} catch (IOException e) {
e.printStackTrace();
}
}
public void generateDocs(WorkshopInfrastructure workshopInfrastructure, String baseWikiFolder) throws IOException {
File wikiBaseFolder = new File(baseWikiFolder);
if (wikiBaseFolder.exists()) {
logger.debug("Delete wiki folder {}", wikiBaseFolder);
wikiBaseFolder.delete();
}
wikiBaseFolder.mkdirs();
Map<String, String> wikiPageNamesByTeamIdentifier = Maps.newHashMap();
for (String teamIdentifier : workshopInfrastructure.getTeamIdentifiers()) {
Map<String, Object> rootMap = Maps.newHashMap();
rootMap.put("infrastructure", workshopInfrastructure);
rootMap.put("teamIdentifier", teamIdentifier);
String templatePath = "/fr/xebia/workshop/caching/lab.md.ftl";
rootMap.put("generator", "This page has been generaterd by '{{{" + getClass() + "}}}' with template '{{{" + templatePath + "}}}' on the "
+ new DateTime());
String page = FreemarkerUtils.generate(rootMap, templatePath);
String wikiPageName = "Lab_team_" + teamIdentifier;
wikiPageNamesByTeamIdentifier.put(teamIdentifier, wikiPageName);
File wikiPageFile = new File(wikiBaseFolder, wikiPageName + ".md");
Files.write(page, wikiPageFile, Charsets.UTF_8);
logger.debug("Generated file {}", wikiPageFile.getAbsoluteFile());
}
StringWriter indexPageStringWriter = new StringWriter();
PrintWriter indexPageWriter = new PrintWriter(indexPageStringWriter);
indexPageWriter.println("# Labs Per Team");
for (String teamIdentifier : new TreeSet<String>(workshopInfrastructure.getTeamIdentifiers())) {
indexPageWriter.println(
"* [Lab for team " + teamIdentifier + "]" +
"(https://github.com/xebia-france/workshop-web-caching-cocktail/wiki/" + wikiPageNamesByTeamIdentifier.get(teamIdentifier) + ")");
}
String indexPageName = "Home";
Files.write(indexPageStringWriter.toString(), new File(baseWikiFolder, indexPageName + ".md"), Charsets.UTF_8);
System.out.println("GENERATED WIKI PAGES TO BE COMMITTED IN XEBIA-FRANCE GITHUB");
System.out.println("=================================================================");
System.out.println();
System.out.println("Base folder: " + baseWikiFolder);
System.out.println("All the files in " + baseWikiFolder + " must be committed in https://xebia-france.googlecode.com/svn/wiki");
System.out.println("Index page: " + indexPageName);
System.out.println("Per team pages: \n\t" + Joiner.on("\n\t").join(new TreeSet<String>(wikiPageNamesByTeamIdentifier.values())));
}
}